1dd2cfabdSEdoardo Sanguineti //===----------------------------------------------------------------------===// 2dd2cfabdSEdoardo Sanguineti // 3dd2cfabdSEdoardo Sanguineti // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4dd2cfabdSEdoardo Sanguineti // See https://llvm.org/LICENSE.txt for license information. 5dd2cfabdSEdoardo Sanguineti // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6dd2cfabdSEdoardo Sanguineti // 7dd2cfabdSEdoardo Sanguineti //===----------------------------------------------------------------------===// 8dd2cfabdSEdoardo Sanguineti // 9dd2cfabdSEdoardo Sanguineti // UNSUPPORTED: no-threads 10*bf1666fbSLouis Dionne // UNSUPPORTED: c++03, c++11, c++14, c++17 119ddedf07SLouis Dionne 12dd2cfabdSEdoardo Sanguineti // <latch> 13dd2cfabdSEdoardo Sanguineti 14dd2cfabdSEdoardo Sanguineti // inline constexpr explicit latch(ptrdiff_t __expected); 15dd2cfabdSEdoardo Sanguineti 16dd2cfabdSEdoardo Sanguineti // Make sure that the ctor of latch is constexpr and explicit. 17dd2cfabdSEdoardo Sanguineti 18dd2cfabdSEdoardo Sanguineti #include <latch> 19dd2cfabdSEdoardo Sanguineti 20dd2cfabdSEdoardo Sanguineti #include "test_convertible.h" 21dd2cfabdSEdoardo Sanguineti 22dd2cfabdSEdoardo Sanguineti static_assert(!test_convertible<std::latch, std::ptrdiff_t>(), "This constructor must be explicit"); 23dd2cfabdSEdoardo Sanguineti 24dd2cfabdSEdoardo Sanguineti constexpr bool test() { 25dd2cfabdSEdoardo Sanguineti std::latch l(5); 26dd2cfabdSEdoardo Sanguineti (void)l; 27dd2cfabdSEdoardo Sanguineti return true; 28dd2cfabdSEdoardo Sanguineti } 29dd2cfabdSEdoardo Sanguineti 30dd2cfabdSEdoardo Sanguineti int main(int, char**) { 31dd2cfabdSEdoardo Sanguineti test(); 32dd2cfabdSEdoardo Sanguineti static_assert(test(), ""); 33dd2cfabdSEdoardo Sanguineti 34dd2cfabdSEdoardo Sanguineti return 0; 35dd2cfabdSEdoardo Sanguineti } 36