xref: /llvm-project/libcxx/test/std/thread/thread.latch/ctor.pass.cpp (revision bf1666fb0bc19ffa18072e2727e4611c293a9aee)
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