1 // -*- C++ -*- Libstdc++ version details header. 2 3 // Copyright (C) 2018-2022 Free Software Foundation, Inc. 4 // 5 // This file is part of the GNU ISO C++ Library. This library is free 6 // software; you can redistribute it and/or modify it under the 7 // terms of the GNU General Public License as published by the 8 // Free Software Foundation; either version 3, or (at your option) 9 // any later version. 10 11 // This library is distributed in the hope that it will be useful, 12 // but WITHOUT ANY WARRANTY; without even the implied warranty of 13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 // GNU General Public License for more details. 15 16 // Under Section 7 of GPL version 3, you are granted additional 17 // permissions described in the GCC Runtime Library Exception, version 18 // 3.1, as published by the Free Software Foundation. 19 20 // You should have received a copy of the GNU General Public License and 21 // a copy of the GCC Runtime Library Exception along with this program; 22 // see the files COPYING3 and COPYING.RUNTIME respectively. If not, see 23 // <http://www.gnu.org/licenses/>. 24 25 /** @file version 26 * This is a Standard C++ Library file. You should @c \#include this file 27 * in your programs, rather than any of the @a *.h implementation files. 28 */ 29 30 #ifndef _GLIBCXX_VERSION_INCLUDED 31 #define _GLIBCXX_VERSION_INCLUDED 32 33 #pragma GCC system_header 34 35 #include <bits/c++config.h> 36 37 // c++03 38 #if _GLIBCXX_HOSTED 39 # define __cpp_lib_incomplete_container_elements 201505L 40 #endif 41 42 #if !defined(__STRICT_ANSI__) 43 // gnu++03 44 # define __cpp_lib_uncaught_exceptions 201411L 45 #endif 46 47 #if __cplusplus >= 201103L 48 // c++11 49 #define __cpp_lib_is_null_pointer 201309L 50 #define __cpp_lib_result_of_sfinae 201210L 51 52 #if _GLIBCXX_HOSTED 53 # define __cpp_lib_allocator_traits_is_always_equal 201411L 54 #if __cplusplus <= 201703L // N.B. updated value in C++20 55 # define __cpp_lib_shared_ptr_arrays 201611L 56 #endif 57 #endif 58 59 #if !defined(__STRICT_ANSI__) 60 // gnu++11 61 # define __cpp_lib_is_swappable 201603L 62 # define __cpp_lib_void_t 201411L 63 # if _GLIBCXX_HOSTED 64 # define __cpp_lib_enable_shared_from_this 201603L 65 # endif 66 #endif 67 68 // For C++11 and later we support ISO/IEC 29124 Mathematical Special Functions 69 #define __STDCPP_MATH_SPEC_FUNCS__ 201003L 70 71 #if __cplusplus >= 201402L 72 // c++14 73 #if __cpp_impl_coroutine 74 # define __cpp_lib_coroutine 201902L 75 #endif 76 #define __cpp_lib_integral_constant_callable 201304L 77 #define __cpp_lib_is_final 201402L 78 #define __cpp_lib_transformation_trait_aliases 201304L 79 80 #if _GLIBCXX_HOSTED 81 # define __cpp_lib_chrono_udls 201304L 82 # define __cpp_lib_complex_udls 201309L 83 # define __cpp_lib_exchange_function 201304L 84 # define __cpp_lib_generic_associative_lookup 201304L 85 # define __cpp_lib_integer_sequence 201304L 86 # define __cpp_lib_make_reverse_iterator 201402L 87 # define __cpp_lib_make_unique 201304L 88 # ifndef _GLIBCXX_DEBUG // PR libstdc++/70303 89 # define __cpp_lib_null_iterators 201304L 90 # endif 91 # define __cpp_lib_quoted_string_io 201304L 92 # define __cpp_lib_robust_nonmodifying_seq_ops 201304L 93 # ifdef _GLIBCXX_HAS_GTHREADS 94 # define __cpp_lib_shared_timed_mutex 201402L 95 # endif 96 # define __cpp_lib_string_udls 201304L 97 # define __cpp_lib_transparent_operators 201510L 98 # define __cpp_lib_tuple_element_t 201402L 99 # define __cpp_lib_tuples_by_type 201304L 100 #endif 101 102 #if __cplusplus >= 201703L 103 // c++17 104 #define __cpp_lib_addressof_constexpr 201603L 105 #define __cpp_lib_atomic_is_always_lock_free 201603L 106 #define __cpp_lib_bool_constant 201505L 107 #define __cpp_lib_byte 201603L 108 #ifdef _GLIBCXX_HAVE_BUILTIN_HAS_UNIQ_OBJ_REP 109 # define __cpp_lib_has_unique_object_representations 201606L 110 #endif 111 #ifdef __GCC_DESTRUCTIVE_SIZE 112 # define __cpp_lib_hardware_interference_size 201703L 113 #endif 114 #ifdef _GLIBCXX_HAVE_BUILTIN_IS_AGGREGATE 115 # define __cpp_lib_is_aggregate 201703L 116 #endif 117 #define __cpp_lib_is_invocable 201703L 118 #define __cpp_lib_is_swappable 201603L 119 #ifdef _GLIBCXX_HAVE_BUILTIN_LAUNDER 120 # define __cpp_lib_launder 201606L 121 #endif 122 #define __cpp_lib_logical_traits 201510L 123 #define __cpp_lib_type_trait_variable_templates 201510L 124 #define __cpp_lib_uncaught_exceptions 201411L 125 #define __cpp_lib_void_t 201411L 126 127 #if _GLIBCXX_HOSTED 128 #define __cpp_lib_any 201606L 129 #define __cpp_lib_apply 201603L 130 #if __cplusplus == 201703L // N.B. updated value in C++20 131 # define __cpp_lib_array_constexpr 201803L 132 #endif 133 #define __cpp_lib_as_const 201510L 134 #define __cpp_lib_boyer_moore_searcher 201603L 135 #define __cpp_lib_chrono 201611L 136 #define __cpp_lib_clamp 201603L 137 #if __cplusplus == 201703L // N.B. updated value in C++20 138 # if _GLIBCXX_HAVE_IS_CONSTANT_EVALUATED 139 # define __cpp_lib_constexpr_char_traits 201611L 140 # define __cpp_lib_constexpr_string 201611L 141 # endif 142 #endif 143 #define __cpp_lib_enable_shared_from_this 201603L 144 #define __cpp_lib_execution 201902L // FIXME: should be 201603L 145 #define __cpp_lib_filesystem 201703L 146 #define __cpp_lib_gcd 201606L 147 #define __cpp_lib_gcd_lcm 201606L 148 #define __cpp_lib_hypot 201603L 149 #define __cpp_lib_invoke 201411L 150 #define __cpp_lib_lcm 201606L 151 #define __cpp_lib_make_from_tuple 201606L 152 #define __cpp_lib_map_try_emplace 201411L 153 #define __cpp_lib_math_special_functions 201603L 154 #ifdef _GLIBCXX_HAS_GTHREADS 155 # define __cpp_lib_memory_resource 201603L 156 #else 157 # define __cpp_lib_memory_resource 1 158 #endif 159 #define __cpp_lib_node_extract 201606L 160 #define __cpp_lib_nonmember_container_access 201411L 161 #define __cpp_lib_not_fn 201603L 162 #if __cplusplus == 201703L // N.B. updated value in C++20 163 # define __cpp_lib_optional 201606L 164 #endif 165 #define __cpp_lib_parallel_algorithm 201603L 166 #define __cpp_lib_raw_memory_algorithms 201606L 167 #define __cpp_lib_sample 201603L 168 #ifdef _GLIBCXX_HAS_GTHREADS 169 # define __cpp_lib_scoped_lock 201703L 170 # define __cpp_lib_shared_mutex 201505L 171 #endif 172 #define __cpp_lib_shared_ptr_weak_type 201606L 173 #define __cpp_lib_string_view 201803L 174 #if _GLIBCXX_FLOAT_IS_IEEE_BINARY32 && _GLIBCXX_DOUBLE_IS_IEEE_BINARY64 \ 175 && __SIZE_WIDTH__ >= 32 176 # define __cpp_lib_to_chars 201611L 177 #endif 178 #define __cpp_lib_unordered_map_try_emplace 201411L 179 #if !(__cpp_concepts >= 202002L && __cpp_constexpr >= 201811L) 180 // N.B. updated value in C++20 181 # define __cpp_lib_variant 202102L 182 #endif 183 #endif 184 185 #if __cplusplus >= 202002L 186 // c++20 187 #define __cpp_lib_atomic_flag_test 201907L 188 #define __cpp_lib_atomic_float 201711L 189 #define __cpp_lib_atomic_ref 201806L 190 #define __cpp_lib_atomic_value_initialization 201911L 191 #if __has_builtin(__builtin_bit_cast) 192 # define __cpp_lib_bit_cast 201806L 193 #endif 194 #define __cpp_lib_bitops 201907L 195 #define __cpp_lib_bounded_array_traits 201902L 196 // __cpp_lib_char8_t is defined in <bits/c++config.h> 197 #if __cpp_concepts >= 201907L 198 # define __cpp_lib_concepts 202002L 199 #endif 200 #if __cpp_impl_destroying_delete 201 # define __cpp_lib_destroying_delete 201806L 202 #endif 203 #define __cpp_lib_endian 201907L 204 #define __cpp_lib_int_pow2 202002L 205 #ifdef _GLIBCXX_HAVE_IS_CONSTANT_EVALUATED 206 # define __cpp_lib_is_constant_evaluated 201811L 207 #endif 208 #if __has_builtin(__is_layout_compatible) \ 209 && __has_builtin(__builtin_is_corresponding_member) 210 # define __cpp_lib_is_layout_compatible 201907L 211 #endif 212 #define __cpp_lib_is_nothrow_convertible 201806L 213 #if __has_builtin(__is_pointer_interconvertible_base_of) \ 214 && __has_builtin(__builtin_is_pointer_interconvertible_with_class) 215 # define __cpp_lib_is_pointer_interconvertible 201907L 216 #endif 217 #define __cpp_lib_remove_cvref 201711L 218 #if __has_builtin(__builtin_source_location) 219 # define __cpp_lib_source_location 201907L 220 #endif 221 #if __cpp_impl_three_way_comparison >= 201907L && __cpp_lib_concepts 222 # define __cpp_lib_three_way_comparison 201907L 223 #endif 224 #define __cpp_lib_type_identity 201806L 225 #define __cpp_lib_unwrap_ref 201811L 226 227 #if _GLIBCXX_HOSTED 228 #define __cpp_lib_array_constexpr 201811L 229 #define __cpp_lib_assume_aligned 201811L 230 #define __cpp_lib_atomic_shared_ptr 201711L 231 #if defined _GLIBCXX_HAS_GTHREADS || defined _GLIBCXX_HAVE_LINUX_FUTEX 232 # define __cpp_lib_atomic_wait 201907L 233 # if __cpp_aligned_new 234 # define __cpp_lib_barrier 201907L 235 # endif 236 #endif 237 #define __cpp_lib_bind_front 201907L 238 // FIXME: #define __cpp_lib_execution 201902L 239 #define __cpp_lib_integer_comparison_functions 202002L 240 #define __cpp_lib_constexpr_algorithms 201806L 241 #ifdef __cpp_lib_is_constant_evaluated 242 # define __cpp_lib_constexpr_char_traits 201811L 243 #endif 244 #define __cpp_lib_constexpr_complex 201711L 245 #define __cpp_lib_constexpr_dynamic_alloc 201907L 246 #define __cpp_lib_constexpr_functional 201907L 247 #define __cpp_lib_constexpr_iterator 201811L 248 #define __cpp_lib_constexpr_memory 201811L 249 #define __cpp_lib_constexpr_numeric 201911L 250 #ifdef __cpp_lib_is_constant_evaluated 251 # if _GLIBCXX_USE_CXX11_ABI 252 # define __cpp_lib_constexpr_string 201907L 253 # else 254 # define __cpp_lib_constexpr_string 201811L 255 # endif 256 #endif 257 #define __cpp_lib_constexpr_string_view 201811L 258 #define __cpp_lib_constexpr_tuple 201811L 259 #define __cpp_lib_constexpr_utility 201811L 260 #define __cpp_lib_constexpr_vector 201907L 261 #define __cpp_lib_erase_if 202002L 262 #define __cpp_lib_generic_unordered_lookup 201811L 263 #define __cpp_lib_interpolate 201902L 264 #ifdef _GLIBCXX_HAS_GTHREADS 265 # define __cpp_lib_jthread 201911L 266 #endif 267 #if __cpp_lib_atomic_wait 268 # define __cpp_lib_latch 201907L 269 #endif 270 #define __cpp_lib_list_remove_return_type 201806L 271 #if __cpp_lib_concepts 272 # define __cpp_lib_make_obj_using_allocator 201811L 273 #endif 274 #define __cpp_lib_math_constants 201907L 275 #define __cpp_lib_optional 202106L 276 #define __cpp_lib_polymorphic_allocator 201902L 277 #if __cpp_lib_concepts 278 # define __cpp_lib_ranges 202110L 279 # define __cpp_lib_move_iterator_concept 202207L 280 #endif 281 #if __cpp_lib_atomic_wait || _GLIBCXX_HAVE_POSIX_SEMAPHORE 282 # define __cpp_lib_semaphore 201907L 283 #endif 284 #define __cpp_lib_shared_ptr_arrays 201707L 285 #define __cpp_lib_shift 201806L 286 #define __cpp_lib_smart_ptr_for_overwrite 202002L 287 #if __cpp_lib_concepts 288 # define __cpp_lib_span 202002L 289 #endif 290 #define __cpp_lib_ssize 201902L 291 #define __cpp_lib_starts_ends_with 201711L 292 # if _GLIBCXX_USE_CXX11_ABI 293 // Only supported with cxx11-abi 294 # define __cpp_lib_syncbuf 201803L 295 # endif 296 #define __cpp_lib_to_address 201711L 297 #define __cpp_lib_to_array 201907L 298 #if __cpp_concepts >= 202002L && __cpp_constexpr >= 201811L 299 # define __cpp_lib_variant 202106L 300 #endif 301 #endif 302 303 #if __cplusplus > 202002L 304 // c++2b 305 #define __cpp_lib_byteswap 202110L 306 #define __cpp_lib_constexpr_typeinfo 202106L 307 #define __cpp_lib_is_scoped_enum 202011L 308 309 #if _GLIBCXX_HOSTED 310 #define __cpp_lib_adaptor_iterator_pair_constructor 202106L 311 #if __cpp_constexpr_dynamic_alloc 312 # undef __cpp_lib_constexpr_memory 313 # define __cpp_lib_constexpr_memory 202202L 314 #endif 315 #if __cpp_concepts >= 202002L 316 # define __cpp_lib_expected 202202L 317 #endif 318 #define __cpp_lib_invoke_r 202106L 319 #define __cpp_lib_ios_noreplace 202207L 320 #if __cpp_lib_concepts 321 # undef __cpp_lib_optional 322 # define __cpp_lib_optional 202110L 323 #endif 324 #define __cpp_lib_move_only_function 202110L 325 #if __cpp_lib_span 326 # define __cpp_lib_spanstream 202106L 327 #endif 328 #if _GLIBCXX_HAVE_STACKTRACE 329 # define __cpp_lib_stacktrace 202011L 330 #endif 331 #define __cpp_lib_stdatomic_h 202011L 332 #define __cpp_lib_string_contains 202011L 333 #if _GLIBCXX_USE_CXX11_ABI // Only supported with cxx11-abi 334 # define __cpp_lib_string_resize_and_overwrite 202110L 335 #endif 336 #define __cpp_lib_to_underlying 202102L 337 #define __cpp_lib_unreachable 202202L 338 #endif 339 #endif // C++2b 340 #endif // C++20 341 #endif // C++17 342 #endif // C++14 343 #endif // C++11 344 345 #endif // _GLIBCXX_VERSION_INCLUDED 346