1*0b57cec5SDimitry Andric// -*- C++ -*- 2*0b57cec5SDimitry Andric//===--------------------------- version ----------------------------------===// 3*0b57cec5SDimitry Andric// 4*0b57cec5SDimitry Andric// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 5*0b57cec5SDimitry Andric// See https://llvm.org/LICENSE.txt for license information. 6*0b57cec5SDimitry Andric// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 7*0b57cec5SDimitry Andric// 8*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 9*0b57cec5SDimitry Andric 10*0b57cec5SDimitry Andric#ifndef _LIBCPP_VERSIONH 11*0b57cec5SDimitry Andric#define _LIBCPP_VERSIONH 12*0b57cec5SDimitry Andric 13*0b57cec5SDimitry Andric/* 14*0b57cec5SDimitry Andric version synopsis 15*0b57cec5SDimitry Andric 16*0b57cec5SDimitry AndricMacro name Value Headers 17*0b57cec5SDimitry Andric__cpp_lib_addressof_constexpr 201603L <memory> 18*0b57cec5SDimitry Andric__cpp_lib_allocator_traits_is_always_equal 201411L <memory> <scoped_allocator> <string> 19*0b57cec5SDimitry Andric <deque> <forward_list> <list> 20*0b57cec5SDimitry Andric <vector> <map> <set> 21*0b57cec5SDimitry Andric <unordered_map> <unordered_set> 22*0b57cec5SDimitry Andric__cpp_lib_any 201606L <any> 23*0b57cec5SDimitry Andric__cpp_lib_apply 201603L <tuple> 24*0b57cec5SDimitry Andric__cpp_lib_array_constexpr 201603L <iterator> <array> 25*0b57cec5SDimitry Andric__cpp_lib_as_const 201510L <utility> 26*0b57cec5SDimitry Andric__cpp_lib_atomic_is_always_lock_free 201603L <atomic> 27*0b57cec5SDimitry Andric__cpp_lib_atomic_ref 201806L <atomic> 28*0b57cec5SDimitry Andric__cpp_lib_bind_front 201811L <functional> 29*0b57cec5SDimitry Andric__cpp_lib_bit_cast 201806L <bit> 30*0b57cec5SDimitry Andric__cpp_lib_bool_constant 201505L <type_traits> 31*0b57cec5SDimitry Andric__cpp_lib_boyer_moore_searcher 201603L <functional> 32*0b57cec5SDimitry Andric__cpp_lib_byte 201603L <cstddef> 33*0b57cec5SDimitry Andric__cpp_lib_char8_t 201811L <atomic> <filesystem> <istream> 34*0b57cec5SDimitry Andric <limits> <locale> <ostream> 35*0b57cec5SDimitry Andric <string> <string_view> 36*0b57cec5SDimitry Andric__cpp_lib_chrono 201611L <chrono> 37*0b57cec5SDimitry Andric__cpp_lib_chrono_udls 201304L <chrono> 38*0b57cec5SDimitry Andric__cpp_lib_clamp 201603L <algorithm> 39*0b57cec5SDimitry Andric__cpp_lib_complex_udls 201309L <complex> 40*0b57cec5SDimitry Andric__cpp_lib_concepts 201806L <concepts> 41*0b57cec5SDimitry Andric__cpp_lib_constexpr_misc 201811L <array> <functional> <iterator> 42*0b57cec5SDimitry Andric <string_view> <tuple> <utility> 43*0b57cec5SDimitry Andric__cpp_lib_constexpr_swap_algorithms 201806L <algorithm> 44*0b57cec5SDimitry Andric__cpp_lib_destroying_delete 201806L <new> 45*0b57cec5SDimitry Andric__cpp_lib_enable_shared_from_this 201603L <memory> 46*0b57cec5SDimitry Andric__cpp_lib_erase_if 201811L <string> <deque> <forward_list> 47*0b57cec5SDimitry Andric <list> <vector> <map> 48*0b57cec5SDimitry Andric <set> <unordered_map> <unordered_set> 49*0b57cec5SDimitry Andric__cpp_lib_exchange_function 201304L <utility> 50*0b57cec5SDimitry Andric__cpp_lib_execution 201603L <execution> 51*0b57cec5SDimitry Andric__cpp_lib_filesystem 201703L <filesystem> 52*0b57cec5SDimitry Andric__cpp_lib_gcd_lcm 201606L <numeric> 53*0b57cec5SDimitry Andric__cpp_lib_generic_associative_lookup 201304L <map> <set> 54*0b57cec5SDimitry Andric__cpp_lib_generic_unordered_lookup 201811L <unordered_map> <unordered_set> 55*0b57cec5SDimitry Andric__cpp_lib_hardware_interference_size 201703L <new> 56*0b57cec5SDimitry Andric__cpp_lib_has_unique_object_representations 201606L <type_traits> 57*0b57cec5SDimitry Andric__cpp_lib_hypot 201603L <cmath> 58*0b57cec5SDimitry Andric__cpp_lib_incomplete_container_elements 201505L <forward_list> <list> <vector> 59*0b57cec5SDimitry Andric__cpp_lib_integer_sequence 201304L <utility> 60*0b57cec5SDimitry Andric__cpp_lib_integral_constant_callable 201304L <type_traits> 61*0b57cec5SDimitry Andric__cpp_lib_interpolate 201902L <numeric> 62*0b57cec5SDimitry Andric__cpp_lib_invoke 201411L <functional> 63*0b57cec5SDimitry Andric__cpp_lib_is_aggregate 201703L <type_traits> 64*0b57cec5SDimitry Andric__cpp_lib_is_constant_evaluated 201811L <type_traits> 65*0b57cec5SDimitry Andric__cpp_lib_is_final 201402L <type_traits> 66*0b57cec5SDimitry Andric__cpp_lib_is_invocable 201703L <type_traits> 67*0b57cec5SDimitry Andric__cpp_lib_is_null_pointer 201309L <type_traits> 68*0b57cec5SDimitry Andric__cpp_lib_is_swappable 201603L <type_traits> 69*0b57cec5SDimitry Andric__cpp_lib_launder 201606L <new> 70*0b57cec5SDimitry Andric__cpp_lib_list_remove_return_type 201806L <forward_list> <list> 71*0b57cec5SDimitry Andric__cpp_lib_logical_traits 201510L <type_traits> 72*0b57cec5SDimitry Andric__cpp_lib_make_from_tuple 201606L <tuple> 73*0b57cec5SDimitry Andric__cpp_lib_make_reverse_iterator 201402L <iterator> 74*0b57cec5SDimitry Andric__cpp_lib_make_unique 201304L <memory> 75*0b57cec5SDimitry Andric__cpp_lib_map_try_emplace 201411L <map> 76*0b57cec5SDimitry Andric__cpp_lib_math_special_functions 201603L <cmath> 77*0b57cec5SDimitry Andric__cpp_lib_memory_resource 201603L <memory_resource> 78*0b57cec5SDimitry Andric__cpp_lib_node_extract 201606L <map> <set> <unordered_map> 79*0b57cec5SDimitry Andric <unordered_set> 80*0b57cec5SDimitry Andric__cpp_lib_nonmember_container_access 201411L <iterator> <array> <deque> 81*0b57cec5SDimitry Andric <forward_list> <list> <map> 82*0b57cec5SDimitry Andric <regex> <set> <string> 83*0b57cec5SDimitry Andric <unordered_map> <unordered_set> <vector> 84*0b57cec5SDimitry Andric__cpp_lib_not_fn 201603L <functional> 85*0b57cec5SDimitry Andric__cpp_lib_null_iterators 201304L <iterator> 86*0b57cec5SDimitry Andric__cpp_lib_optional 201606L <optional> 87*0b57cec5SDimitry Andric__cpp_lib_parallel_algorithm 201603L <algorithm> <numeric> 88*0b57cec5SDimitry Andric__cpp_lib_quoted_string_io 201304L <iomanip> 89*0b57cec5SDimitry Andric__cpp_lib_ranges 201811L <algorithm> <functional> <iterator> 90*0b57cec5SDimitry Andric <memory> <ranges> 91*0b57cec5SDimitry Andric__cpp_lib_raw_memory_algorithms 201606L <memory> 92*0b57cec5SDimitry Andric__cpp_lib_result_of_sfinae 201210L <functional> <type_traits> 93*0b57cec5SDimitry Andric__cpp_lib_robust_nonmodifying_seq_ops 201304L <algorithm> 94*0b57cec5SDimitry Andric__cpp_lib_sample 201603L <algorithm> 95*0b57cec5SDimitry Andric__cpp_lib_scoped_lock 201703L <mutex> 96*0b57cec5SDimitry Andric__cpp_lib_shared_mutex 201505L <shared_mutex> 97*0b57cec5SDimitry Andric__cpp_lib_shared_ptr_arrays 201611L <memory> 98*0b57cec5SDimitry Andric__cpp_lib_shared_ptr_weak_type 201606L <memory> 99*0b57cec5SDimitry Andric__cpp_lib_shared_timed_mutex 201402L <shared_mutex> 100*0b57cec5SDimitry Andric__cpp_lib_string_udls 201304L <string> 101*0b57cec5SDimitry Andric__cpp_lib_string_view 201606L <string> <string_view> 102*0b57cec5SDimitry Andric__cpp_lib_three_way_comparison 201711L <compare> 103*0b57cec5SDimitry Andric__cpp_lib_to_chars 201611L <utility> 104*0b57cec5SDimitry Andric__cpp_lib_transformation_trait_aliases 201304L <type_traits> 105*0b57cec5SDimitry Andric__cpp_lib_transparent_operators 201510L <functional> 106*0b57cec5SDimitry Andric 201210L // C++14 107*0b57cec5SDimitry Andric__cpp_lib_tuple_element_t 201402L <tuple> 108*0b57cec5SDimitry Andric__cpp_lib_tuples_by_type 201304L <utility> <tuple> 109*0b57cec5SDimitry Andric__cpp_lib_type_trait_variable_templates 201510L <type_traits> 110*0b57cec5SDimitry Andric__cpp_lib_uncaught_exceptions 201411L <exception> 111*0b57cec5SDimitry Andric__cpp_lib_unordered_map_try_emplace 201411L <unordered_map> 112*0b57cec5SDimitry Andric__cpp_lib_variant 201606L <variant> 113*0b57cec5SDimitry Andric__cpp_lib_void_t 201411L <type_traits> 114*0b57cec5SDimitry Andric 115*0b57cec5SDimitry Andric*/ 116*0b57cec5SDimitry Andric 117*0b57cec5SDimitry Andric#include <__config> 118*0b57cec5SDimitry Andric 119*0b57cec5SDimitry Andric#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 120*0b57cec5SDimitry Andric#pragma GCC system_header 121*0b57cec5SDimitry Andric#endif 122*0b57cec5SDimitry Andric 123*0b57cec5SDimitry Andric#if _LIBCPP_STD_VER > 11 124*0b57cec5SDimitry Andric# define __cpp_lib_chrono_udls 201304L 125*0b57cec5SDimitry Andric# define __cpp_lib_complex_udls 201309L 126*0b57cec5SDimitry Andric# define __cpp_lib_exchange_function 201304L 127*0b57cec5SDimitry Andric# define __cpp_lib_generic_associative_lookup 201304L 128*0b57cec5SDimitry Andric# define __cpp_lib_integer_sequence 201304L 129*0b57cec5SDimitry Andric# define __cpp_lib_integral_constant_callable 201304L 130*0b57cec5SDimitry Andric# define __cpp_lib_is_final 201402L 131*0b57cec5SDimitry Andric# define __cpp_lib_is_null_pointer 201309L 132*0b57cec5SDimitry Andric# define __cpp_lib_make_reverse_iterator 201402L 133*0b57cec5SDimitry Andric# define __cpp_lib_make_unique 201304L 134*0b57cec5SDimitry Andric# define __cpp_lib_null_iterators 201304L 135*0b57cec5SDimitry Andric# define __cpp_lib_quoted_string_io 201304L 136*0b57cec5SDimitry Andric# define __cpp_lib_result_of_sfinae 201210L 137*0b57cec5SDimitry Andric# define __cpp_lib_robust_nonmodifying_seq_ops 201304L 138*0b57cec5SDimitry Andric# if !defined(_LIBCPP_HAS_NO_THREADS) 139*0b57cec5SDimitry Andric# define __cpp_lib_shared_timed_mutex 201402L 140*0b57cec5SDimitry Andric# endif 141*0b57cec5SDimitry Andric# define __cpp_lib_string_udls 201304L 142*0b57cec5SDimitry Andric# define __cpp_lib_transformation_trait_aliases 201304L 143*0b57cec5SDimitry Andric# define __cpp_lib_transparent_operators 201210L 144*0b57cec5SDimitry Andric# define __cpp_lib_tuple_element_t 201402L 145*0b57cec5SDimitry Andric# define __cpp_lib_tuples_by_type 201304L 146*0b57cec5SDimitry Andric#endif 147*0b57cec5SDimitry Andric 148*0b57cec5SDimitry Andric#if _LIBCPP_STD_VER > 14 149*0b57cec5SDimitry Andric# if !defined(_LIBCPP_HAS_NO_BUILTIN_ADDRESSOF) 150*0b57cec5SDimitry Andric# define __cpp_lib_addressof_constexpr 201603L 151*0b57cec5SDimitry Andric# endif 152*0b57cec5SDimitry Andric# define __cpp_lib_allocator_traits_is_always_equal 201411L 153*0b57cec5SDimitry Andric# define __cpp_lib_any 201606L 154*0b57cec5SDimitry Andric# define __cpp_lib_apply 201603L 155*0b57cec5SDimitry Andric# define __cpp_lib_array_constexpr 201603L 156*0b57cec5SDimitry Andric# define __cpp_lib_as_const 201510L 157*0b57cec5SDimitry Andric# if !defined(_LIBCPP_HAS_NO_THREADS) 158*0b57cec5SDimitry Andric# define __cpp_lib_atomic_is_always_lock_free 201603L 159*0b57cec5SDimitry Andric# endif 160*0b57cec5SDimitry Andric# define __cpp_lib_bool_constant 201505L 161*0b57cec5SDimitry Andric// # define __cpp_lib_boyer_moore_searcher 201603L 162*0b57cec5SDimitry Andric# define __cpp_lib_byte 201603L 163*0b57cec5SDimitry Andric# define __cpp_lib_chrono 201611L 164*0b57cec5SDimitry Andric# define __cpp_lib_clamp 201603L 165*0b57cec5SDimitry Andric# define __cpp_lib_enable_shared_from_this 201603L 166*0b57cec5SDimitry Andric// # define __cpp_lib_execution 201603L 167*0b57cec5SDimitry Andric# define __cpp_lib_filesystem 201703L 168*0b57cec5SDimitry Andric# define __cpp_lib_gcd_lcm 201606L 169*0b57cec5SDimitry Andric# define __cpp_lib_hardware_interference_size 201703L 170*0b57cec5SDimitry Andric# if defined(_LIBCPP_HAS_UNIQUE_OBJECT_REPRESENTATIONS) 171*0b57cec5SDimitry Andric# define __cpp_lib_has_unique_object_representations 201606L 172*0b57cec5SDimitry Andric# endif 173*0b57cec5SDimitry Andric# define __cpp_lib_hypot 201603L 174*0b57cec5SDimitry Andric# define __cpp_lib_incomplete_container_elements 201505L 175*0b57cec5SDimitry Andric# define __cpp_lib_invoke 201411L 176*0b57cec5SDimitry Andric# if !defined(_LIBCPP_HAS_NO_IS_AGGREGATE) 177*0b57cec5SDimitry Andric# define __cpp_lib_is_aggregate 201703L 178*0b57cec5SDimitry Andric# endif 179*0b57cec5SDimitry Andric# define __cpp_lib_is_invocable 201703L 180*0b57cec5SDimitry Andric# define __cpp_lib_is_swappable 201603L 181*0b57cec5SDimitry Andric# define __cpp_lib_launder 201606L 182*0b57cec5SDimitry Andric# define __cpp_lib_logical_traits 201510L 183*0b57cec5SDimitry Andric# define __cpp_lib_make_from_tuple 201606L 184*0b57cec5SDimitry Andric# define __cpp_lib_map_try_emplace 201411L 185*0b57cec5SDimitry Andric// # define __cpp_lib_math_special_functions 201603L 186*0b57cec5SDimitry Andric// # define __cpp_lib_memory_resource 201603L 187*0b57cec5SDimitry Andric# define __cpp_lib_node_extract 201606L 188*0b57cec5SDimitry Andric# define __cpp_lib_nonmember_container_access 201411L 189*0b57cec5SDimitry Andric# define __cpp_lib_not_fn 201603L 190*0b57cec5SDimitry Andric# define __cpp_lib_optional 201606L 191*0b57cec5SDimitry Andric// # define __cpp_lib_parallel_algorithm 201603L 192*0b57cec5SDimitry Andric# define __cpp_lib_raw_memory_algorithms 201606L 193*0b57cec5SDimitry Andric# define __cpp_lib_sample 201603L 194*0b57cec5SDimitry Andric# define __cpp_lib_scoped_lock 201703L 195*0b57cec5SDimitry Andric# if !defined(_LIBCPP_HAS_NO_THREADS) 196*0b57cec5SDimitry Andric# define __cpp_lib_shared_mutex 201505L 197*0b57cec5SDimitry Andric# endif 198*0b57cec5SDimitry Andric// # define __cpp_lib_shared_ptr_arrays 201611L 199*0b57cec5SDimitry Andric# define __cpp_lib_shared_ptr_weak_type 201606L 200*0b57cec5SDimitry Andric# define __cpp_lib_string_view 201606L 201*0b57cec5SDimitry Andric// # define __cpp_lib_to_chars 201611L 202*0b57cec5SDimitry Andric# undef __cpp_lib_transparent_operators 203*0b57cec5SDimitry Andric# define __cpp_lib_transparent_operators 201510L 204*0b57cec5SDimitry Andric# define __cpp_lib_type_trait_variable_templates 201510L 205*0b57cec5SDimitry Andric# define __cpp_lib_uncaught_exceptions 201411L 206*0b57cec5SDimitry Andric# define __cpp_lib_unordered_map_try_emplace 201411L 207*0b57cec5SDimitry Andric# define __cpp_lib_variant 201606L 208*0b57cec5SDimitry Andric# define __cpp_lib_void_t 201411L 209*0b57cec5SDimitry Andric#endif 210*0b57cec5SDimitry Andric 211*0b57cec5SDimitry Andric#if _LIBCPP_STD_VER > 17 212*0b57cec5SDimitry Andric# if !defined(_LIBCPP_HAS_NO_THREADS) 213*0b57cec5SDimitry Andric// # define __cpp_lib_atomic_ref 201806L 214*0b57cec5SDimitry Andric# endif 215*0b57cec5SDimitry Andric// # define __cpp_lib_bind_front 201811L 216*0b57cec5SDimitry Andric// # define __cpp_lib_bit_cast 201806L 217*0b57cec5SDimitry Andric# if !defined(_LIBCPP_NO_HAS_CHAR8_T) 218*0b57cec5SDimitry Andric# define __cpp_lib_char8_t 201811L 219*0b57cec5SDimitry Andric# endif 220*0b57cec5SDimitry Andric// # define __cpp_lib_concepts 201806L 221*0b57cec5SDimitry Andric// # define __cpp_lib_constexpr_misc 201811L 222*0b57cec5SDimitry Andric// # define __cpp_lib_constexpr_swap_algorithms 201806L 223*0b57cec5SDimitry Andric# if _LIBCPP_STD_VER > 17 && defined(__cpp_impl_destroying_delete) && __cpp_impl_destroying_delete >= 201806L 224*0b57cec5SDimitry Andric# define __cpp_lib_destroying_delete 201806L 225*0b57cec5SDimitry Andric# endif 226*0b57cec5SDimitry Andric# define __cpp_lib_erase_if 201811L 227*0b57cec5SDimitry Andric// # define __cpp_lib_generic_unordered_lookup 201811L 228*0b57cec5SDimitry Andric# define __cpp_lib_interpolate 201902L 229*0b57cec5SDimitry Andric# if !defined(_LIBCPP_HAS_NO_BUILTIN_IS_CONSTANT_EVALUATED) 230*0b57cec5SDimitry Andric# define __cpp_lib_is_constant_evaluated 201811L 231*0b57cec5SDimitry Andric# endif 232*0b57cec5SDimitry Andric// # define __cpp_lib_list_remove_return_type 201806L 233*0b57cec5SDimitry Andric// # define __cpp_lib_ranges 201811L 234*0b57cec5SDimitry Andric// # define __cpp_lib_three_way_comparison 201711L 235*0b57cec5SDimitry Andric#endif 236*0b57cec5SDimitry Andric 237*0b57cec5SDimitry Andric#endif // _LIBCPP_VERSIONH 238