1 1.1 joerg .. _FeatureTestMacroTable: 2 1.1 joerg 3 1.1 joerg ========================== 4 1.1 joerg Feature Test Macro Support 5 1.1 joerg ========================== 6 1.1 joerg 7 1.1 joerg .. contents:: 8 1.1 joerg :local: 9 1.1 joerg 10 1.1 joerg Overview 11 1.1 joerg ======== 12 1.1 joerg 13 1.1 joerg This file documents the feature test macros currently supported by libc++. 14 1.1 joerg 15 1.1 joerg .. _feature-status: 16 1.1 joerg 17 1.1 joerg Status 18 1.1 joerg ====== 19 1.1 joerg 20 1.1 joerg .. table:: Current Status 21 1.1 joerg :name: feature-status-table 22 1.1 joerg :widths: auto 23 1.1 joerg 24 1.1 joerg ================================================= ================= 25 1.1 joerg Macro Name Value 26 1.1 joerg ================================================= ================= 27 1.1 joerg **C++ 14** 28 1.1 joerg ------------------------------------------------------------------- 29 1.1 joerg ``__cpp_lib_chrono_udls`` ``201304L`` 30 1.1 joerg ------------------------------------------------- ----------------- 31 1.1 joerg ``__cpp_lib_complex_udls`` ``201309L`` 32 1.1 joerg ------------------------------------------------- ----------------- 33 1.1 joerg ``__cpp_lib_exchange_function`` ``201304L`` 34 1.1 joerg ------------------------------------------------- ----------------- 35 1.1 joerg ``__cpp_lib_generic_associative_lookup`` ``201304L`` 36 1.1 joerg ------------------------------------------------- ----------------- 37 1.1 joerg ``__cpp_lib_integer_sequence`` ``201304L`` 38 1.1 joerg ------------------------------------------------- ----------------- 39 1.1 joerg ``__cpp_lib_integral_constant_callable`` ``201304L`` 40 1.1 joerg ------------------------------------------------- ----------------- 41 1.1 joerg ``__cpp_lib_is_final`` ``201402L`` 42 1.1 joerg ------------------------------------------------- ----------------- 43 1.1 joerg ``__cpp_lib_is_null_pointer`` ``201309L`` 44 1.1 joerg ------------------------------------------------- ----------------- 45 1.1 joerg ``__cpp_lib_make_reverse_iterator`` ``201402L`` 46 1.1 joerg ------------------------------------------------- ----------------- 47 1.1 joerg ``__cpp_lib_make_unique`` ``201304L`` 48 1.1 joerg ------------------------------------------------- ----------------- 49 1.1 joerg ``__cpp_lib_null_iterators`` ``201304L`` 50 1.1 joerg ------------------------------------------------- ----------------- 51 1.1 joerg ``__cpp_lib_quoted_string_io`` ``201304L`` 52 1.1 joerg ------------------------------------------------- ----------------- 53 1.1 joerg ``__cpp_lib_result_of_sfinae`` ``201210L`` 54 1.1 joerg ------------------------------------------------- ----------------- 55 1.1 joerg ``__cpp_lib_robust_nonmodifying_seq_ops`` ``201304L`` 56 1.1 joerg ------------------------------------------------- ----------------- 57 1.1 joerg ``__cpp_lib_shared_timed_mutex`` ``201402L`` 58 1.1 joerg ------------------------------------------------- ----------------- 59 1.1 joerg ``__cpp_lib_string_udls`` ``201304L`` 60 1.1 joerg ------------------------------------------------- ----------------- 61 1.1 joerg ``__cpp_lib_transformation_trait_aliases`` ``201304L`` 62 1.1 joerg ------------------------------------------------- ----------------- 63 1.1 joerg ``__cpp_lib_transparent_operators`` ``201210L`` 64 1.1 joerg ------------------------------------------------- ----------------- 65 1.1 joerg ``__cpp_lib_tuple_element_t`` ``201402L`` 66 1.1 joerg ------------------------------------------------- ----------------- 67 1.1 joerg ``__cpp_lib_tuples_by_type`` ``201304L`` 68 1.1 joerg ------------------------------------------------- ----------------- 69 1.1 joerg **C++ 17** 70 1.1 joerg ------------------------------------------------------------------- 71 1.1 joerg ``__cpp_lib_addressof_constexpr`` ``201603L`` 72 1.1 joerg ------------------------------------------------- ----------------- 73 1.1 joerg ``__cpp_lib_allocator_traits_is_always_equal`` ``201411L`` 74 1.1 joerg ------------------------------------------------- ----------------- 75 1.1 joerg ``__cpp_lib_any`` ``201606L`` 76 1.1 joerg ------------------------------------------------- ----------------- 77 1.1 joerg ``__cpp_lib_apply`` ``201603L`` 78 1.1 joerg ------------------------------------------------- ----------------- 79 1.1 joerg ``__cpp_lib_array_constexpr`` ``201603L`` 80 1.1 joerg ------------------------------------------------- ----------------- 81 1.1 joerg ``__cpp_lib_as_const`` ``201510L`` 82 1.1 joerg ------------------------------------------------- ----------------- 83 1.1 joerg ``__cpp_lib_atomic_is_always_lock_free`` ``201603L`` 84 1.1 joerg ------------------------------------------------- ----------------- 85 1.1 joerg ``__cpp_lib_bool_constant`` ``201505L`` 86 1.1 joerg ------------------------------------------------- ----------------- 87 1.1 joerg ``__cpp_lib_boyer_moore_searcher`` *unimplemented* 88 1.1 joerg ------------------------------------------------- ----------------- 89 1.1 joerg ``__cpp_lib_byte`` ``201603L`` 90 1.1 joerg ------------------------------------------------- ----------------- 91 1.1 joerg ``__cpp_lib_chrono`` ``201611L`` 92 1.1 joerg ------------------------------------------------- ----------------- 93 1.1 joerg ``__cpp_lib_clamp`` ``201603L`` 94 1.1 joerg ------------------------------------------------- ----------------- 95 1.1 joerg ``__cpp_lib_enable_shared_from_this`` ``201603L`` 96 1.1 joerg ------------------------------------------------- ----------------- 97 1.1 joerg ``__cpp_lib_execution`` *unimplemented* 98 1.1 joerg ------------------------------------------------- ----------------- 99 1.1 joerg ``__cpp_lib_filesystem`` ``201703L`` 100 1.1 joerg ------------------------------------------------- ----------------- 101 1.1 joerg ``__cpp_lib_gcd_lcm`` ``201606L`` 102 1.1 joerg ------------------------------------------------- ----------------- 103 1.1 joerg ``__cpp_lib_hardware_interference_size`` *unimplemented* 104 1.1 joerg ------------------------------------------------- ----------------- 105 1.1 joerg ``__cpp_lib_has_unique_object_representations`` ``201606L`` 106 1.1 joerg ------------------------------------------------- ----------------- 107 1.1 joerg ``__cpp_lib_hypot`` ``201603L`` 108 1.1 joerg ------------------------------------------------- ----------------- 109 1.1 joerg ``__cpp_lib_incomplete_container_elements`` ``201505L`` 110 1.1 joerg ------------------------------------------------- ----------------- 111 1.1 joerg ``__cpp_lib_invoke`` ``201411L`` 112 1.1 joerg ------------------------------------------------- ----------------- 113 1.1 joerg ``__cpp_lib_is_aggregate`` ``201703L`` 114 1.1 joerg ------------------------------------------------- ----------------- 115 1.1 joerg ``__cpp_lib_is_invocable`` ``201703L`` 116 1.1 joerg ------------------------------------------------- ----------------- 117 1.1 joerg ``__cpp_lib_is_swappable`` ``201603L`` 118 1.1 joerg ------------------------------------------------- ----------------- 119 1.1 joerg ``__cpp_lib_launder`` ``201606L`` 120 1.1 joerg ------------------------------------------------- ----------------- 121 1.1 joerg ``__cpp_lib_logical_traits`` ``201510L`` 122 1.1 joerg ------------------------------------------------- ----------------- 123 1.1 joerg ``__cpp_lib_make_from_tuple`` ``201606L`` 124 1.1 joerg ------------------------------------------------- ----------------- 125 1.1 joerg ``__cpp_lib_map_try_emplace`` ``201411L`` 126 1.1 joerg ------------------------------------------------- ----------------- 127 1.1 joerg ``__cpp_lib_math_special_functions`` *unimplemented* 128 1.1 joerg ------------------------------------------------- ----------------- 129 1.1 joerg ``__cpp_lib_memory_resource`` *unimplemented* 130 1.1 joerg ------------------------------------------------- ----------------- 131 1.1 joerg ``__cpp_lib_node_extract`` ``201606L`` 132 1.1 joerg ------------------------------------------------- ----------------- 133 1.1 joerg ``__cpp_lib_nonmember_container_access`` ``201411L`` 134 1.1 joerg ------------------------------------------------- ----------------- 135 1.1 joerg ``__cpp_lib_not_fn`` ``201603L`` 136 1.1 joerg ------------------------------------------------- ----------------- 137 1.1 joerg ``__cpp_lib_optional`` ``201606L`` 138 1.1 joerg ------------------------------------------------- ----------------- 139 1.1 joerg ``__cpp_lib_parallel_algorithm`` *unimplemented* 140 1.1 joerg ------------------------------------------------- ----------------- 141 1.1 joerg ``__cpp_lib_raw_memory_algorithms`` ``201606L`` 142 1.1 joerg ------------------------------------------------- ----------------- 143 1.1 joerg ``__cpp_lib_sample`` ``201603L`` 144 1.1 joerg ------------------------------------------------- ----------------- 145 1.1 joerg ``__cpp_lib_scoped_lock`` ``201703L`` 146 1.1 joerg ------------------------------------------------- ----------------- 147 1.1 joerg ``__cpp_lib_shared_mutex`` ``201505L`` 148 1.1 joerg ------------------------------------------------- ----------------- 149 1.1 joerg ``__cpp_lib_shared_ptr_arrays`` ``201611L`` 150 1.1 joerg ------------------------------------------------- ----------------- 151 1.1 joerg ``__cpp_lib_shared_ptr_weak_type`` ``201606L`` 152 1.1 joerg ------------------------------------------------- ----------------- 153 1.1 joerg ``__cpp_lib_string_view`` ``201606L`` 154 1.1 joerg ------------------------------------------------- ----------------- 155 1.1 joerg ``__cpp_lib_to_chars`` *unimplemented* 156 1.1 joerg ------------------------------------------------- ----------------- 157 1.1 joerg ``__cpp_lib_transparent_operators`` ``201510L`` 158 1.1 joerg ------------------------------------------------- ----------------- 159 1.1 joerg ``__cpp_lib_type_trait_variable_templates`` ``201510L`` 160 1.1 joerg ------------------------------------------------- ----------------- 161 1.1 joerg ``__cpp_lib_uncaught_exceptions`` ``201411L`` 162 1.1 joerg ------------------------------------------------- ----------------- 163 1.1 joerg ``__cpp_lib_unordered_map_try_emplace`` ``201411L`` 164 1.1 joerg ------------------------------------------------- ----------------- 165 1.1 joerg ``__cpp_lib_variant`` ``202102L`` 166 1.1 joerg ------------------------------------------------- ----------------- 167 1.1 joerg ``__cpp_lib_void_t`` ``201411L`` 168 1.1 joerg ------------------------------------------------- ----------------- 169 1.1 joerg **C++ 20** 170 1.1 joerg ------------------------------------------------------------------- 171 1.1 joerg ``__cpp_lib_array_constexpr`` ``201811L`` 172 1.1 joerg ------------------------------------------------- ----------------- 173 1.1 joerg ``__cpp_lib_assume_aligned`` *unimplemented* 174 1.1 joerg ------------------------------------------------- ----------------- 175 1.1 joerg ``__cpp_lib_atomic_flag_test`` ``201907L`` 176 1.1 joerg ------------------------------------------------- ----------------- 177 1.1 joerg ``__cpp_lib_atomic_float`` *unimplemented* 178 1.1 joerg ------------------------------------------------- ----------------- 179 1.1 joerg ``__cpp_lib_atomic_lock_free_type_aliases`` ``201907L`` 180 1.1 joerg ------------------------------------------------- ----------------- 181 1.1 joerg ``__cpp_lib_atomic_ref`` *unimplemented* 182 1.1 joerg ------------------------------------------------- ----------------- 183 1.1 joerg ``__cpp_lib_atomic_shared_ptr`` *unimplemented* 184 1.1 joerg ------------------------------------------------- ----------------- 185 1.1 joerg ``__cpp_lib_atomic_value_initialization`` *unimplemented* 186 1.1 joerg ------------------------------------------------- ----------------- 187 1.1 joerg ``__cpp_lib_atomic_wait`` ``201907L`` 188 1.1 joerg ------------------------------------------------- ----------------- 189 1.1 joerg ``__cpp_lib_barrier`` ``201907L`` 190 1.1 joerg ------------------------------------------------- ----------------- 191 1.1 joerg ``__cpp_lib_bind_front`` ``201907L`` 192 1.1 joerg ------------------------------------------------- ----------------- 193 1.1 joerg ``__cpp_lib_bit_cast`` *unimplemented* 194 1.1 joerg ------------------------------------------------- ----------------- 195 1.1 joerg ``__cpp_lib_bitops`` *unimplemented* 196 1.1 joerg ------------------------------------------------- ----------------- 197 1.1 joerg ``__cpp_lib_bounded_array_traits`` ``201902L`` 198 1.1 joerg ------------------------------------------------- ----------------- 199 1.1 joerg ``__cpp_lib_char8_t`` ``201811L`` 200 1.1 joerg ------------------------------------------------- ----------------- 201 1.1 joerg ``__cpp_lib_concepts`` ``202002L`` 202 1.1 joerg ------------------------------------------------- ----------------- 203 1.1 joerg ``__cpp_lib_constexpr_algorithms`` ``201806L`` 204 1.1 joerg ------------------------------------------------- ----------------- 205 1.1 joerg ``__cpp_lib_constexpr_complex`` *unimplemented* 206 1.1 joerg ------------------------------------------------- ----------------- 207 1.1 joerg ``__cpp_lib_constexpr_dynamic_alloc`` ``201907L`` 208 1.1 joerg ------------------------------------------------- ----------------- 209 1.1 joerg ``__cpp_lib_constexpr_functional`` ``201907L`` 210 1.1 joerg ------------------------------------------------- ----------------- 211 1.1 joerg ``__cpp_lib_constexpr_iterator`` ``201811L`` 212 1.1 joerg ------------------------------------------------- ----------------- 213 1.1 joerg ``__cpp_lib_constexpr_memory`` ``201811L`` 214 1.1 joerg ------------------------------------------------- ----------------- 215 1.1 joerg ``__cpp_lib_constexpr_numeric`` ``201911L`` 216 1.1 joerg ------------------------------------------------- ----------------- 217 1.1 joerg ``__cpp_lib_constexpr_string`` ``201811L`` 218 1.1 joerg ------------------------------------------------- ----------------- 219 1.1 joerg ``__cpp_lib_constexpr_string_view`` ``201811L`` 220 1.1 joerg ------------------------------------------------- ----------------- 221 1.1 joerg ``__cpp_lib_constexpr_tuple`` ``201811L`` 222 1.1 joerg ------------------------------------------------- ----------------- 223 1.1 joerg ``__cpp_lib_constexpr_utility`` ``201811L`` 224 1.1 joerg ------------------------------------------------- ----------------- 225 1.1 joerg ``__cpp_lib_constexpr_vector`` *unimplemented* 226 1.1 joerg ------------------------------------------------- ----------------- 227 1.1 joerg ``__cpp_lib_coroutine`` *unimplemented* 228 1.1 joerg ------------------------------------------------- ----------------- 229 1.1 joerg ``__cpp_lib_destroying_delete`` ``201806L`` 230 1.1 joerg ------------------------------------------------- ----------------- 231 1.1 joerg ``__cpp_lib_endian`` ``201907L`` 232 1.1 joerg ------------------------------------------------- ----------------- 233 1.1 joerg ``__cpp_lib_erase_if`` ``202002L`` 234 1.1 joerg ------------------------------------------------- ----------------- 235 1.1 joerg ``__cpp_lib_execution`` *unimplemented* 236 1.1 joerg ------------------------------------------------- ----------------- 237 1.1 joerg ``__cpp_lib_format`` *unimplemented* 238 1.1 joerg ------------------------------------------------- ----------------- 239 1.1 joerg ``__cpp_lib_generic_unordered_lookup`` ``201811L`` 240 1.1 joerg ------------------------------------------------- ----------------- 241 1.1 joerg ``__cpp_lib_int_pow2`` ``202002L`` 242 1.1 joerg ------------------------------------------------- ----------------- 243 1.1 joerg ``__cpp_lib_integer_comparison_functions`` ``202002L`` 244 1.1 joerg ------------------------------------------------- ----------------- 245 1.1 joerg ``__cpp_lib_interpolate`` ``201902L`` 246 1.1 joerg ------------------------------------------------- ----------------- 247 1.1 joerg ``__cpp_lib_is_constant_evaluated`` ``201811L`` 248 1.1 joerg ------------------------------------------------- ----------------- 249 1.1 joerg ``__cpp_lib_is_layout_compatible`` *unimplemented* 250 1.1 joerg ------------------------------------------------- ----------------- 251 1.1 joerg ``__cpp_lib_is_nothrow_convertible`` ``201806L`` 252 1.1 joerg ------------------------------------------------- ----------------- 253 1.1 joerg ``__cpp_lib_is_pointer_interconvertible`` *unimplemented* 254 1.1 joerg ------------------------------------------------- ----------------- 255 1.1 joerg ``__cpp_lib_jthread`` *unimplemented* 256 1.1 joerg ------------------------------------------------- ----------------- 257 1.1 joerg ``__cpp_lib_latch`` ``201907L`` 258 1.1 joerg ------------------------------------------------- ----------------- 259 1.1 joerg ``__cpp_lib_list_remove_return_type`` ``201806L`` 260 1.1 joerg ------------------------------------------------- ----------------- 261 1.1 joerg ``__cpp_lib_math_constants`` ``201907L`` 262 1.1 joerg ------------------------------------------------- ----------------- 263 1.1 joerg ``__cpp_lib_polymorphic_allocator`` *unimplemented* 264 1.1 joerg ------------------------------------------------- ----------------- 265 1.1 joerg ``__cpp_lib_ranges`` *unimplemented* 266 1.1 joerg ------------------------------------------------- ----------------- 267 1.1 joerg ``__cpp_lib_remove_cvref`` ``201711L`` 268 1.1 joerg ------------------------------------------------- ----------------- 269 1.1 joerg ``__cpp_lib_semaphore`` ``201907L`` 270 1.1 joerg ------------------------------------------------- ----------------- 271 1.1 joerg ``__cpp_lib_shift`` ``201806L`` 272 1.1 joerg ------------------------------------------------- ----------------- 273 1.1 joerg ``__cpp_lib_smart_ptr_for_overwrite`` *unimplemented* 274 1.1 joerg ------------------------------------------------- ----------------- 275 1.1 joerg ``__cpp_lib_source_location`` *unimplemented* 276 1.1 joerg ------------------------------------------------- ----------------- 277 1.1 joerg ``__cpp_lib_span`` ``202002L`` 278 1.1 joerg ------------------------------------------------- ----------------- 279 1.1 joerg ``__cpp_lib_ssize`` ``201902L`` 280 1.1 joerg ------------------------------------------------- ----------------- 281 1.1 joerg ``__cpp_lib_starts_ends_with`` ``201711L`` 282 1.1 joerg ------------------------------------------------- ----------------- 283 1.1 joerg ``__cpp_lib_string_view`` ``201803L`` 284 1.1 joerg ------------------------------------------------- ----------------- 285 1.1 joerg ``__cpp_lib_syncbuf`` *unimplemented* 286 1.1 joerg ------------------------------------------------- ----------------- 287 1.1 joerg ``__cpp_lib_three_way_comparison`` *unimplemented* 288 1.1 joerg ------------------------------------------------- ----------------- 289 1.1 joerg ``__cpp_lib_to_address`` ``201711L`` 290 1.1 joerg ------------------------------------------------- ----------------- 291 1.1 joerg ``__cpp_lib_to_array`` ``201907L`` 292 1.1 joerg ------------------------------------------------- ----------------- 293 1.1 joerg ``__cpp_lib_unwrap_ref`` ``201811L`` 294 1.1 joerg ------------------------------------------------- ----------------- 295 1.1 joerg **C++ 2b** 296 1.1 joerg ------------------------------------------------------------------- 297 1.1 joerg ``__cpp_lib_is_scoped_enum`` ``202011L`` 298 1.1 joerg ------------------------------------------------- ----------------- 299 1.1 joerg ``__cpp_lib_stacktrace`` *unimplemented* 300 1.1 joerg ------------------------------------------------- ----------------- 301 1.1 joerg ``__cpp_lib_stdatomic_h`` *unimplemented* 302 1.1 joerg ------------------------------------------------- ----------------- 303 1.1 joerg ``__cpp_lib_string_contains`` ``202011L`` 304 1.1 joerg ------------------------------------------------- ----------------- 305 1.1 joerg ``__cpp_lib_to_underlying`` ``202102L`` 306 1.1 joerg ================================================= ================= 307 1.1 joerg 308