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 142c6217f2SLouis Dionne // <optional> 152c6217f2SLouis Dionne 162c6217f2SLouis Dionne // Test the feature test macros defined by <optional> 172c6217f2SLouis Dionne 182c6217f2SLouis Dionne /* Constant Value 19b699a9baSLouis Dionne __cpp_lib_constrained_equality 202403L [C++26] 20f49ccca8SMark de Wever __cpp_lib_freestanding_optional 202311L [C++26] 212c6217f2SLouis Dionne __cpp_lib_optional 201606L [C++17] 22*cae351f3SA. Jiang 202106L [C++20] 2371400505SMark de Wever 202110L [C++23] 242dadf8d7SMark de Wever __cpp_lib_optional_range_support 202406L [C++26] 252c6217f2SLouis Dionne */ 262c6217f2SLouis Dionne 272c6217f2SLouis Dionne #include <optional> 282c6217f2SLouis Dionne #include "test_macros.h" 292c6217f2SLouis Dionne 302c6217f2SLouis Dionne #if TEST_STD_VER < 14 312c6217f2SLouis Dionne 32b699a9baSLouis Dionne # ifdef __cpp_lib_constrained_equality 33b699a9baSLouis Dionne # error "__cpp_lib_constrained_equality should not be defined before c++26" 34b699a9baSLouis Dionne # endif 35b699a9baSLouis Dionne 36f49ccca8SMark de Wever # ifdef __cpp_lib_freestanding_optional 37f49ccca8SMark de Wever # error "__cpp_lib_freestanding_optional should not be defined before c++26" 38f49ccca8SMark de Wever # endif 39f49ccca8SMark de Wever 402c6217f2SLouis Dionne # ifdef __cpp_lib_optional 412c6217f2SLouis Dionne # error "__cpp_lib_optional should not be defined before c++17" 422c6217f2SLouis Dionne # endif 432c6217f2SLouis Dionne 442dadf8d7SMark de Wever # ifdef __cpp_lib_optional_range_support 452dadf8d7SMark de Wever # error "__cpp_lib_optional_range_support should not be defined before c++26" 462dadf8d7SMark de Wever # endif 472dadf8d7SMark de Wever 482c6217f2SLouis Dionne #elif TEST_STD_VER == 14 492c6217f2SLouis Dionne 50b699a9baSLouis Dionne # ifdef __cpp_lib_constrained_equality 51b699a9baSLouis Dionne # error "__cpp_lib_constrained_equality should not be defined before c++26" 52b699a9baSLouis Dionne # endif 53b699a9baSLouis Dionne 54f49ccca8SMark de Wever # ifdef __cpp_lib_freestanding_optional 55f49ccca8SMark de Wever # error "__cpp_lib_freestanding_optional should not be defined before c++26" 56f49ccca8SMark de Wever # endif 57f49ccca8SMark de Wever 582c6217f2SLouis Dionne # ifdef __cpp_lib_optional 592c6217f2SLouis Dionne # error "__cpp_lib_optional should not be defined before c++17" 602c6217f2SLouis Dionne # endif 612c6217f2SLouis Dionne 622dadf8d7SMark de Wever # ifdef __cpp_lib_optional_range_support 632dadf8d7SMark de Wever # error "__cpp_lib_optional_range_support should not be defined before c++26" 642dadf8d7SMark de Wever # endif 652dadf8d7SMark de Wever 662c6217f2SLouis Dionne #elif TEST_STD_VER == 17 672c6217f2SLouis Dionne 68b699a9baSLouis Dionne # ifdef __cpp_lib_constrained_equality 69b699a9baSLouis Dionne # error "__cpp_lib_constrained_equality should not be defined before c++26" 70b699a9baSLouis Dionne # endif 71b699a9baSLouis Dionne 72f49ccca8SMark de Wever # ifdef __cpp_lib_freestanding_optional 73f49ccca8SMark de Wever # error "__cpp_lib_freestanding_optional should not be defined before c++26" 74f49ccca8SMark de Wever # endif 75f49ccca8SMark de Wever 762c6217f2SLouis Dionne # ifndef __cpp_lib_optional 772c6217f2SLouis Dionne # error "__cpp_lib_optional should be defined in c++17" 782c6217f2SLouis Dionne # endif 792c6217f2SLouis Dionne # if __cpp_lib_optional != 201606L 802c6217f2SLouis Dionne # error "__cpp_lib_optional should have the value 201606L in c++17" 812c6217f2SLouis Dionne # endif 822c6217f2SLouis Dionne 832dadf8d7SMark de Wever # ifdef __cpp_lib_optional_range_support 842dadf8d7SMark de Wever # error "__cpp_lib_optional_range_support should not be defined before c++26" 852dadf8d7SMark de Wever # endif 862dadf8d7SMark de Wever 872c6217f2SLouis Dionne #elif TEST_STD_VER == 20 882c6217f2SLouis Dionne 89b699a9baSLouis Dionne # ifdef __cpp_lib_constrained_equality 90b699a9baSLouis Dionne # error "__cpp_lib_constrained_equality should not be defined before c++26" 91b699a9baSLouis Dionne # endif 92b699a9baSLouis Dionne 93f49ccca8SMark de Wever # ifdef __cpp_lib_freestanding_optional 94f49ccca8SMark de Wever # error "__cpp_lib_freestanding_optional should not be defined before c++26" 95f49ccca8SMark de Wever # endif 96f49ccca8SMark de Wever 972c6217f2SLouis Dionne # ifndef __cpp_lib_optional 982c6217f2SLouis Dionne # error "__cpp_lib_optional should be defined in c++20" 992c6217f2SLouis Dionne # endif 100*cae351f3SA. Jiang # if __cpp_lib_optional != 202106L 101*cae351f3SA. Jiang # error "__cpp_lib_optional should have the value 202106L in c++20" 1022c6217f2SLouis Dionne # endif 1032c6217f2SLouis Dionne 1042dadf8d7SMark de Wever # ifdef __cpp_lib_optional_range_support 1052dadf8d7SMark de Wever # error "__cpp_lib_optional_range_support should not be defined before c++26" 1062dadf8d7SMark de Wever # endif 1072dadf8d7SMark de Wever 10800c97cbcSMark de Wever #elif TEST_STD_VER == 23 1092c6217f2SLouis Dionne 110b699a9baSLouis Dionne # ifdef __cpp_lib_constrained_equality 111b699a9baSLouis Dionne # error "__cpp_lib_constrained_equality should not be defined before c++26" 112b699a9baSLouis Dionne # endif 113b699a9baSLouis Dionne 114f49ccca8SMark de Wever # ifdef __cpp_lib_freestanding_optional 115f49ccca8SMark de Wever # error "__cpp_lib_freestanding_optional should not be defined before c++26" 116f49ccca8SMark de Wever # endif 117f49ccca8SMark de Wever 1182c6217f2SLouis Dionne # ifndef __cpp_lib_optional 11971400505SMark de Wever # error "__cpp_lib_optional should be defined in c++23" 1202c6217f2SLouis Dionne # endif 1219e5c2934SMark de Wever # if __cpp_lib_optional != 202110L 12271400505SMark de Wever # error "__cpp_lib_optional should have the value 202110L in c++23" 1232c6217f2SLouis Dionne # endif 1242c6217f2SLouis Dionne 1252dadf8d7SMark de Wever # ifdef __cpp_lib_optional_range_support 1262dadf8d7SMark de Wever # error "__cpp_lib_optional_range_support should not be defined before c++26" 1272dadf8d7SMark de Wever # endif 1282dadf8d7SMark de Wever 12900c97cbcSMark de Wever #elif TEST_STD_VER > 23 13000c97cbcSMark de Wever 131f49ccca8SMark de Wever # if !defined(_LIBCPP_VERSION) 132b699a9baSLouis Dionne # ifndef __cpp_lib_constrained_equality 133b699a9baSLouis Dionne # error "__cpp_lib_constrained_equality should be defined in c++26" 134b699a9baSLouis Dionne # endif 135b699a9baSLouis Dionne # if __cpp_lib_constrained_equality != 202403L 136b699a9baSLouis Dionne # error "__cpp_lib_constrained_equality should have the value 202403L in c++26" 137b699a9baSLouis Dionne # endif 138b699a9baSLouis Dionne # else // _LIBCPP_VERSION 139b699a9baSLouis Dionne # ifdef __cpp_lib_constrained_equality 140b699a9baSLouis Dionne # error "__cpp_lib_constrained_equality should not be defined because it is unimplemented in libc++!" 141b699a9baSLouis Dionne # endif 142b699a9baSLouis Dionne # endif 143b699a9baSLouis Dionne 144b699a9baSLouis Dionne # if !defined(_LIBCPP_VERSION) 145f49ccca8SMark de Wever # ifndef __cpp_lib_freestanding_optional 146f49ccca8SMark de Wever # error "__cpp_lib_freestanding_optional should be defined in c++26" 147f49ccca8SMark de Wever # endif 148f49ccca8SMark de Wever # if __cpp_lib_freestanding_optional != 202311L 149f49ccca8SMark de Wever # error "__cpp_lib_freestanding_optional should have the value 202311L in c++26" 150f49ccca8SMark de Wever # endif 151f49ccca8SMark de Wever # else // _LIBCPP_VERSION 152f49ccca8SMark de Wever # ifdef __cpp_lib_freestanding_optional 153f49ccca8SMark de Wever # error "__cpp_lib_freestanding_optional should not be defined because it is unimplemented in libc++!" 154f49ccca8SMark de Wever # endif 155f49ccca8SMark de Wever # endif 156f49ccca8SMark de Wever 15700c97cbcSMark de Wever # ifndef __cpp_lib_optional 15800c97cbcSMark de Wever # error "__cpp_lib_optional should be defined in c++26" 15900c97cbcSMark de Wever # endif 16000c97cbcSMark de Wever # if __cpp_lib_optional != 202110L 16100c97cbcSMark de Wever # error "__cpp_lib_optional should have the value 202110L in c++26" 16200c97cbcSMark de Wever # endif 16300c97cbcSMark de Wever 1642dadf8d7SMark de Wever # if !defined(_LIBCPP_VERSION) 1652dadf8d7SMark de Wever # ifndef __cpp_lib_optional_range_support 1662dadf8d7SMark de Wever # error "__cpp_lib_optional_range_support should be defined in c++26" 1672dadf8d7SMark de Wever # endif 1682dadf8d7SMark de Wever # if __cpp_lib_optional_range_support != 202406L 1692dadf8d7SMark de Wever # error "__cpp_lib_optional_range_support should have the value 202406L in c++26" 1702dadf8d7SMark de Wever # endif 1712dadf8d7SMark de Wever # else // _LIBCPP_VERSION 1722dadf8d7SMark de Wever # ifdef __cpp_lib_optional_range_support 1732dadf8d7SMark de Wever # error "__cpp_lib_optional_range_support should not be defined because it is unimplemented in libc++!" 1742dadf8d7SMark de Wever # endif 1752dadf8d7SMark de Wever # endif 1762dadf8d7SMark de Wever 17700c97cbcSMark de Wever #endif // TEST_STD_VER > 23 1782c6217f2SLouis Dionne 179