12c6217f2SLouis Dionne //===----------------------------------------------------------------------===//
22c6217f2SLouis Dionne //
32c6217f2SLouis Dionne // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
42c6217f2SLouis Dionne // See https://llvm.org/LICENSE.txt for license information.
52c6217f2SLouis Dionne // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
62c6217f2SLouis Dionne //
72c6217f2SLouis Dionne //===----------------------------------------------------------------------===//
82c6217f2SLouis Dionne //
92c6217f2SLouis Dionne // WARNING: This test was generated by generate_feature_test_macro_components.py
102c6217f2SLouis Dionne // and should not be edited manually.
112c6217f2SLouis Dionne //
122c6217f2SLouis Dionne // clang-format off
132c6217f2SLouis Dionne 
14a7f9895cSLouis Dionne // UNSUPPORTED: no-threads
152c6217f2SLouis Dionne 
162c6217f2SLouis Dionne // <mutex>
172c6217f2SLouis Dionne 
182c6217f2SLouis Dionne // Test the feature test macros defined by <mutex>
192c6217f2SLouis Dionne 
202c6217f2SLouis Dionne /*  Constant                 Value
212c6217f2SLouis Dionne     __cpp_lib_scoped_lock    201703L [C++17]
222c6217f2SLouis Dionne */
232c6217f2SLouis Dionne 
242c6217f2SLouis Dionne #include <mutex>
252c6217f2SLouis Dionne #include "test_macros.h"
262c6217f2SLouis Dionne 
272c6217f2SLouis Dionne #if TEST_STD_VER < 14
282c6217f2SLouis Dionne 
292c6217f2SLouis Dionne # ifdef __cpp_lib_scoped_lock
302c6217f2SLouis Dionne #   error "__cpp_lib_scoped_lock should not be defined before c++17"
312c6217f2SLouis Dionne # endif
322c6217f2SLouis Dionne 
332c6217f2SLouis Dionne #elif TEST_STD_VER == 14
342c6217f2SLouis Dionne 
352c6217f2SLouis Dionne # ifdef __cpp_lib_scoped_lock
362c6217f2SLouis Dionne #   error "__cpp_lib_scoped_lock should not be defined before c++17"
372c6217f2SLouis Dionne # endif
382c6217f2SLouis Dionne 
392c6217f2SLouis Dionne #elif TEST_STD_VER == 17
402c6217f2SLouis Dionne 
41*c6f3b7bcSNikolas Klauser # if !defined(_LIBCPP_VERSION) || _LIBCPP_HAS_THREADS
422c6217f2SLouis Dionne #   ifndef __cpp_lib_scoped_lock
432c6217f2SLouis Dionne #     error "__cpp_lib_scoped_lock should be defined in c++17"
442c6217f2SLouis Dionne #   endif
452c6217f2SLouis Dionne #   if __cpp_lib_scoped_lock != 201703L
462c6217f2SLouis Dionne #     error "__cpp_lib_scoped_lock should have the value 201703L in c++17"
472c6217f2SLouis Dionne #   endif
48f2c84211SLouis Dionne # else
49f2c84211SLouis Dionne #   ifdef __cpp_lib_scoped_lock
50*c6f3b7bcSNikolas Klauser #     error "__cpp_lib_scoped_lock should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_HAS_THREADS' is not met!"
51f2c84211SLouis Dionne #   endif
52f2c84211SLouis Dionne # endif
532c6217f2SLouis Dionne 
542c6217f2SLouis Dionne #elif TEST_STD_VER == 20
552c6217f2SLouis Dionne 
56*c6f3b7bcSNikolas Klauser # if !defined(_LIBCPP_VERSION) || _LIBCPP_HAS_THREADS
572c6217f2SLouis Dionne #   ifndef __cpp_lib_scoped_lock
582c6217f2SLouis Dionne #     error "__cpp_lib_scoped_lock should be defined in c++20"
592c6217f2SLouis Dionne #   endif
602c6217f2SLouis Dionne #   if __cpp_lib_scoped_lock != 201703L
612c6217f2SLouis Dionne #     error "__cpp_lib_scoped_lock should have the value 201703L in c++20"
622c6217f2SLouis Dionne #   endif
63f2c84211SLouis Dionne # else
64f2c84211SLouis Dionne #   ifdef __cpp_lib_scoped_lock
65*c6f3b7bcSNikolas Klauser #     error "__cpp_lib_scoped_lock should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_HAS_THREADS' is not met!"
66f2c84211SLouis Dionne #   endif
67f2c84211SLouis Dionne # endif
682c6217f2SLouis Dionne 
6900c97cbcSMark de Wever #elif TEST_STD_VER == 23
702c6217f2SLouis Dionne 
71*c6f3b7bcSNikolas Klauser # if !defined(_LIBCPP_VERSION) || _LIBCPP_HAS_THREADS
722c6217f2SLouis Dionne #   ifndef __cpp_lib_scoped_lock
7371400505SMark de Wever #     error "__cpp_lib_scoped_lock should be defined in c++23"
742c6217f2SLouis Dionne #   endif
752c6217f2SLouis Dionne #   if __cpp_lib_scoped_lock != 201703L
7671400505SMark de Wever #     error "__cpp_lib_scoped_lock should have the value 201703L in c++23"
772c6217f2SLouis Dionne #   endif
78f2c84211SLouis Dionne # else
79f2c84211SLouis Dionne #   ifdef __cpp_lib_scoped_lock
80*c6f3b7bcSNikolas Klauser #     error "__cpp_lib_scoped_lock should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_HAS_THREADS' is not met!"
81f2c84211SLouis Dionne #   endif
82f2c84211SLouis Dionne # endif
832c6217f2SLouis Dionne 
8400c97cbcSMark de Wever #elif TEST_STD_VER > 23
8500c97cbcSMark de Wever 
86*c6f3b7bcSNikolas Klauser # if !defined(_LIBCPP_VERSION) || _LIBCPP_HAS_THREADS
8700c97cbcSMark de Wever #   ifndef __cpp_lib_scoped_lock
8800c97cbcSMark de Wever #     error "__cpp_lib_scoped_lock should be defined in c++26"
8900c97cbcSMark de Wever #   endif
9000c97cbcSMark de Wever #   if __cpp_lib_scoped_lock != 201703L
9100c97cbcSMark de Wever #     error "__cpp_lib_scoped_lock should have the value 201703L in c++26"
9200c97cbcSMark de Wever #   endif
93f2c84211SLouis Dionne # else
94f2c84211SLouis Dionne #   ifdef __cpp_lib_scoped_lock
95*c6f3b7bcSNikolas Klauser #     error "__cpp_lib_scoped_lock should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_HAS_THREADS' is not met!"
96f2c84211SLouis Dionne #   endif
97f2c84211SLouis Dionne # endif
9800c97cbcSMark de Wever 
9900c97cbcSMark de Wever #endif // TEST_STD_VER > 23
1002c6217f2SLouis Dionne 
101