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-filesystem
152c6217f2SLouis Dionne 
162c6217f2SLouis Dionne // <filesystem>
172c6217f2SLouis Dionne 
182c6217f2SLouis Dionne // Test the feature test macros defined by <filesystem>
192c6217f2SLouis Dionne 
202c6217f2SLouis Dionne /*  Constant                 Value
21309aed30SNikolas Klauser     __cpp_lib_char8_t        201907L [C++20]
222c6217f2SLouis Dionne     __cpp_lib_filesystem     201703L [C++17]
23a4bef0caSStephan T. Lavavej     __cpp_lib_format_path    202403L [C++26]
242c6217f2SLouis Dionne */
252c6217f2SLouis Dionne 
262c6217f2SLouis Dionne #include <filesystem>
272c6217f2SLouis Dionne #include "test_macros.h"
282c6217f2SLouis Dionne 
292c6217f2SLouis Dionne #if TEST_STD_VER < 14
302c6217f2SLouis Dionne 
312c6217f2SLouis Dionne # ifdef __cpp_lib_char8_t
322c6217f2SLouis Dionne #   error "__cpp_lib_char8_t should not be defined before c++20"
332c6217f2SLouis Dionne # endif
342c6217f2SLouis Dionne 
352c6217f2SLouis Dionne # ifdef __cpp_lib_filesystem
362c6217f2SLouis Dionne #   error "__cpp_lib_filesystem should not be defined before c++17"
372c6217f2SLouis Dionne # endif
382c6217f2SLouis Dionne 
39b699a9baSLouis Dionne # ifdef __cpp_lib_format_path
40a4bef0caSStephan T. Lavavej #   error "__cpp_lib_format_path should not be defined before c++26"
41b699a9baSLouis Dionne # endif
42b699a9baSLouis Dionne 
432c6217f2SLouis Dionne #elif TEST_STD_VER == 14
442c6217f2SLouis Dionne 
452c6217f2SLouis Dionne # ifdef __cpp_lib_char8_t
462c6217f2SLouis Dionne #   error "__cpp_lib_char8_t should not be defined before c++20"
472c6217f2SLouis Dionne # endif
482c6217f2SLouis Dionne 
492c6217f2SLouis Dionne # ifdef __cpp_lib_filesystem
502c6217f2SLouis Dionne #   error "__cpp_lib_filesystem should not be defined before c++17"
512c6217f2SLouis Dionne # endif
522c6217f2SLouis Dionne 
53b699a9baSLouis Dionne # ifdef __cpp_lib_format_path
54a4bef0caSStephan T. Lavavej #   error "__cpp_lib_format_path should not be defined before c++26"
55b699a9baSLouis Dionne # endif
56b699a9baSLouis Dionne 
572c6217f2SLouis Dionne #elif TEST_STD_VER == 17
582c6217f2SLouis Dionne 
592c6217f2SLouis Dionne # ifdef __cpp_lib_char8_t
602c6217f2SLouis Dionne #   error "__cpp_lib_char8_t should not be defined before c++20"
612c6217f2SLouis Dionne # endif
622c6217f2SLouis Dionne 
63*c6f3b7bcSNikolas Klauser # if !defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_FILESYSTEM && _LIBCPP_AVAILABILITY_HAS_FILESYSTEM_LIBRARY)
642c6217f2SLouis Dionne #   ifndef __cpp_lib_filesystem
652c6217f2SLouis Dionne #     error "__cpp_lib_filesystem should be defined in c++17"
662c6217f2SLouis Dionne #   endif
672c6217f2SLouis Dionne #   if __cpp_lib_filesystem != 201703L
682c6217f2SLouis Dionne #     error "__cpp_lib_filesystem should have the value 201703L in c++17"
692c6217f2SLouis Dionne #   endif
702c6217f2SLouis Dionne # else
712c6217f2SLouis Dionne #   ifdef __cpp_lib_filesystem
72*c6f3b7bcSNikolas Klauser #     error "__cpp_lib_filesystem should not be defined when the requirement '!defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_FILESYSTEM && _LIBCPP_AVAILABILITY_HAS_FILESYSTEM_LIBRARY)' is not met!"
732c6217f2SLouis Dionne #   endif
742c6217f2SLouis Dionne # endif
752c6217f2SLouis Dionne 
76b699a9baSLouis Dionne # ifdef __cpp_lib_format_path
77a4bef0caSStephan T. Lavavej #   error "__cpp_lib_format_path should not be defined before c++26"
78b699a9baSLouis Dionne # endif
79b699a9baSLouis Dionne 
802c6217f2SLouis Dionne #elif TEST_STD_VER == 20
812c6217f2SLouis Dionne 
822c6217f2SLouis Dionne # if defined(__cpp_char8_t)
832c6217f2SLouis Dionne #   ifndef __cpp_lib_char8_t
842c6217f2SLouis Dionne #     error "__cpp_lib_char8_t should be defined in c++20"
852c6217f2SLouis Dionne #   endif
86309aed30SNikolas Klauser #   if __cpp_lib_char8_t != 201907L
87309aed30SNikolas Klauser #     error "__cpp_lib_char8_t should have the value 201907L in c++20"
882c6217f2SLouis Dionne #   endif
892c6217f2SLouis Dionne # else
902c6217f2SLouis Dionne #   ifdef __cpp_lib_char8_t
91a72f6b03SMark de Wever #     error "__cpp_lib_char8_t should not be defined when the requirement 'defined(__cpp_char8_t)' is not met!"
922c6217f2SLouis Dionne #   endif
932c6217f2SLouis Dionne # endif
942c6217f2SLouis Dionne 
95*c6f3b7bcSNikolas Klauser # if !defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_FILESYSTEM && _LIBCPP_AVAILABILITY_HAS_FILESYSTEM_LIBRARY)
962c6217f2SLouis Dionne #   ifndef __cpp_lib_filesystem
972c6217f2SLouis Dionne #     error "__cpp_lib_filesystem should be defined in c++20"
982c6217f2SLouis Dionne #   endif
992c6217f2SLouis Dionne #   if __cpp_lib_filesystem != 201703L
1002c6217f2SLouis Dionne #     error "__cpp_lib_filesystem should have the value 201703L in c++20"
1012c6217f2SLouis Dionne #   endif
1022c6217f2SLouis Dionne # else
1032c6217f2SLouis Dionne #   ifdef __cpp_lib_filesystem
104*c6f3b7bcSNikolas Klauser #     error "__cpp_lib_filesystem should not be defined when the requirement '!defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_FILESYSTEM && _LIBCPP_AVAILABILITY_HAS_FILESYSTEM_LIBRARY)' is not met!"
1052c6217f2SLouis Dionne #   endif
1062c6217f2SLouis Dionne # endif
1072c6217f2SLouis Dionne 
108b699a9baSLouis Dionne # ifdef __cpp_lib_format_path
109a4bef0caSStephan T. Lavavej #   error "__cpp_lib_format_path should not be defined before c++26"
110b699a9baSLouis Dionne # endif
111b699a9baSLouis Dionne 
11200c97cbcSMark de Wever #elif TEST_STD_VER == 23
1132c6217f2SLouis Dionne 
1142c6217f2SLouis Dionne # if defined(__cpp_char8_t)
1152c6217f2SLouis Dionne #   ifndef __cpp_lib_char8_t
11671400505SMark de Wever #     error "__cpp_lib_char8_t should be defined in c++23"
1172c6217f2SLouis Dionne #   endif
118309aed30SNikolas Klauser #   if __cpp_lib_char8_t != 201907L
11971400505SMark de Wever #     error "__cpp_lib_char8_t should have the value 201907L in c++23"
1202c6217f2SLouis Dionne #   endif
1212c6217f2SLouis Dionne # else
1222c6217f2SLouis Dionne #   ifdef __cpp_lib_char8_t
123a72f6b03SMark de Wever #     error "__cpp_lib_char8_t should not be defined when the requirement 'defined(__cpp_char8_t)' is not met!"
1242c6217f2SLouis Dionne #   endif
1252c6217f2SLouis Dionne # endif
1262c6217f2SLouis Dionne 
127*c6f3b7bcSNikolas Klauser # if !defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_FILESYSTEM && _LIBCPP_AVAILABILITY_HAS_FILESYSTEM_LIBRARY)
1282c6217f2SLouis Dionne #   ifndef __cpp_lib_filesystem
12971400505SMark de Wever #     error "__cpp_lib_filesystem should be defined in c++23"
1302c6217f2SLouis Dionne #   endif
1312c6217f2SLouis Dionne #   if __cpp_lib_filesystem != 201703L
13271400505SMark de Wever #     error "__cpp_lib_filesystem should have the value 201703L in c++23"
1332c6217f2SLouis Dionne #   endif
1342c6217f2SLouis Dionne # else
1352c6217f2SLouis Dionne #   ifdef __cpp_lib_filesystem
136*c6f3b7bcSNikolas Klauser #     error "__cpp_lib_filesystem should not be defined when the requirement '!defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_FILESYSTEM && _LIBCPP_AVAILABILITY_HAS_FILESYSTEM_LIBRARY)' is not met!"
1372c6217f2SLouis Dionne #   endif
1382c6217f2SLouis Dionne # endif
1392c6217f2SLouis Dionne 
140b699a9baSLouis Dionne # ifdef __cpp_lib_format_path
141a4bef0caSStephan T. Lavavej #   error "__cpp_lib_format_path should not be defined before c++26"
142b699a9baSLouis Dionne # endif
143b699a9baSLouis Dionne 
14400c97cbcSMark de Wever #elif TEST_STD_VER > 23
14500c97cbcSMark de Wever 
14600c97cbcSMark de Wever # if defined(__cpp_char8_t)
14700c97cbcSMark de Wever #   ifndef __cpp_lib_char8_t
14800c97cbcSMark de Wever #     error "__cpp_lib_char8_t should be defined in c++26"
14900c97cbcSMark de Wever #   endif
15000c97cbcSMark de Wever #   if __cpp_lib_char8_t != 201907L
15100c97cbcSMark de Wever #     error "__cpp_lib_char8_t should have the value 201907L in c++26"
15200c97cbcSMark de Wever #   endif
15300c97cbcSMark de Wever # else
15400c97cbcSMark de Wever #   ifdef __cpp_lib_char8_t
15500c97cbcSMark de Wever #     error "__cpp_lib_char8_t should not be defined when the requirement 'defined(__cpp_char8_t)' is not met!"
15600c97cbcSMark de Wever #   endif
15700c97cbcSMark de Wever # endif
15800c97cbcSMark de Wever 
159*c6f3b7bcSNikolas Klauser # if !defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_FILESYSTEM && _LIBCPP_AVAILABILITY_HAS_FILESYSTEM_LIBRARY)
16000c97cbcSMark de Wever #   ifndef __cpp_lib_filesystem
16100c97cbcSMark de Wever #     error "__cpp_lib_filesystem should be defined in c++26"
16200c97cbcSMark de Wever #   endif
16300c97cbcSMark de Wever #   if __cpp_lib_filesystem != 201703L
16400c97cbcSMark de Wever #     error "__cpp_lib_filesystem should have the value 201703L in c++26"
16500c97cbcSMark de Wever #   endif
16600c97cbcSMark de Wever # else
16700c97cbcSMark de Wever #   ifdef __cpp_lib_filesystem
168*c6f3b7bcSNikolas Klauser #     error "__cpp_lib_filesystem should not be defined when the requirement '!defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_FILESYSTEM && _LIBCPP_AVAILABILITY_HAS_FILESYSTEM_LIBRARY)' is not met!"
16900c97cbcSMark de Wever #   endif
17000c97cbcSMark de Wever # endif
17100c97cbcSMark de Wever 
172b699a9baSLouis Dionne # if !defined(_LIBCPP_VERSION)
173b699a9baSLouis Dionne #   ifndef __cpp_lib_format_path
174b699a9baSLouis Dionne #     error "__cpp_lib_format_path should be defined in c++26"
175b699a9baSLouis Dionne #   endif
176b699a9baSLouis Dionne #   if __cpp_lib_format_path != 202403L
177b699a9baSLouis Dionne #     error "__cpp_lib_format_path should have the value 202403L in c++26"
178b699a9baSLouis Dionne #   endif
179b699a9baSLouis Dionne # else // _LIBCPP_VERSION
180b699a9baSLouis Dionne #   ifdef __cpp_lib_format_path
181b699a9baSLouis Dionne #     error "__cpp_lib_format_path should not be defined because it is unimplemented in libc++!"
182b699a9baSLouis Dionne #   endif
183b699a9baSLouis Dionne # endif
184b699a9baSLouis Dionne 
18500c97cbcSMark de Wever #endif // TEST_STD_VER > 23
1862c6217f2SLouis Dionne 
187