File indexing completed on 2026-05-03 08:13:26
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010 #ifndef _LIBCPP___CXX03___CONFIGURATION_AVAILABILITY_H
0011 #define _LIBCPP___CXX03___CONFIGURATION_AVAILABILITY_H
0012
0013 #include <__cxx03/__configuration/compiler.h>
0014 #include <__cxx03/__configuration/language.h>
0015
0016 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
0017 # pragma GCC system_header
0018 #endif
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048
0049
0050
0051
0052
0053
0054
0055
0056
0057
0058
0059
0060
0061
0062
0063
0064
0065
0066
0067
0068
0069
0070
0071
0072 #if defined(_LIBCPP_DISABLE_AVAILABILITY)
0073 # if !defined(_LIBCPP_HAS_NO_VENDOR_AVAILABILITY_ANNOTATIONS)
0074 # define _LIBCPP_HAS_NO_VENDOR_AVAILABILITY_ANNOTATIONS
0075 # endif
0076 #endif
0077
0078
0079
0080 #if defined(_LIBCPP_BUILDING_LIBRARY) || defined(_LIBCXXABI_BUILDING_LIBRARY) || !defined(_LIBCPP_COMPILER_CLANG_BASED)
0081 # if !defined(_LIBCPP_HAS_NO_VENDOR_AVAILABILITY_ANNOTATIONS)
0082 # define _LIBCPP_HAS_NO_VENDOR_AVAILABILITY_ANNOTATIONS
0083 # endif
0084 #endif
0085
0086
0087
0088 #if defined(_LIBCPP_HAS_NO_VENDOR_AVAILABILITY_ANNOTATIONS)
0089
0090 # define _LIBCPP_INTRODUCED_IN_LLVM_19 1
0091 # define _LIBCPP_INTRODUCED_IN_LLVM_19_ATTRIBUTE
0092
0093 # define _LIBCPP_INTRODUCED_IN_LLVM_18 1
0094 # define _LIBCPP_INTRODUCED_IN_LLVM_18_ATTRIBUTE
0095
0096 # define _LIBCPP_INTRODUCED_IN_LLVM_17 1
0097 # define _LIBCPP_INTRODUCED_IN_LLVM_17_ATTRIBUTE
0098
0099 # define _LIBCPP_INTRODUCED_IN_LLVM_16 1
0100 # define _LIBCPP_INTRODUCED_IN_LLVM_16_ATTRIBUTE
0101
0102 # define _LIBCPP_INTRODUCED_IN_LLVM_15 1
0103 # define _LIBCPP_INTRODUCED_IN_LLVM_15_ATTRIBUTE
0104
0105 # define _LIBCPP_INTRODUCED_IN_LLVM_14 1
0106 # define _LIBCPP_INTRODUCED_IN_LLVM_14_ATTRIBUTE
0107
0108 # define _LIBCPP_INTRODUCED_IN_LLVM_13 1
0109 # define _LIBCPP_INTRODUCED_IN_LLVM_13_ATTRIBUTE
0110
0111 # define _LIBCPP_INTRODUCED_IN_LLVM_12 1
0112 # define _LIBCPP_INTRODUCED_IN_LLVM_12_ATTRIBUTE
0113
0114 # define _LIBCPP_INTRODUCED_IN_LLVM_11 1
0115 # define _LIBCPP_INTRODUCED_IN_LLVM_11_ATTRIBUTE
0116
0117 # define _LIBCPP_INTRODUCED_IN_LLVM_10 1
0118 # define _LIBCPP_INTRODUCED_IN_LLVM_10_ATTRIBUTE
0119
0120 # define _LIBCPP_INTRODUCED_IN_LLVM_9 1
0121 # define _LIBCPP_INTRODUCED_IN_LLVM_9_ATTRIBUTE
0122 # define _LIBCPP_INTRODUCED_IN_LLVM_9_ATTRIBUTE_PUSH
0123 # define _LIBCPP_INTRODUCED_IN_LLVM_9_ATTRIBUTE_POP
0124
0125 # define _LIBCPP_INTRODUCED_IN_LLVM_8 1
0126 # define _LIBCPP_INTRODUCED_IN_LLVM_8_ATTRIBUTE
0127
0128 # define _LIBCPP_INTRODUCED_IN_LLVM_4 1
0129 # define _LIBCPP_INTRODUCED_IN_LLVM_4_ATTRIBUTE
0130
0131 #elif defined(__APPLE__)
0132
0133
0134
0135
0136
0137 # define _LIBCPP_INTRODUCED_IN_LLVM_19 0
0138 # define _LIBCPP_INTRODUCED_IN_LLVM_19_ATTRIBUTE __attribute__((unavailable))
0139
0140
0141
0142 # define _LIBCPP_INTRODUCED_IN_LLVM_18 0
0143 # define _LIBCPP_INTRODUCED_IN_LLVM_18_ATTRIBUTE __attribute__((unavailable))
0144
0145
0146 # if (defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 140400) || \
0147 (defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ < 170400) || \
0148 (defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__ < 170400) || \
0149 (defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__ < 100400)
0150 # define _LIBCPP_INTRODUCED_IN_LLVM_17 0
0151 # else
0152 # define _LIBCPP_INTRODUCED_IN_LLVM_17 1
0153 # endif
0154 # define _LIBCPP_INTRODUCED_IN_LLVM_17_ATTRIBUTE \
0155 __attribute__((availability(macos, strict, introduced = 14.4))) \
0156 __attribute__((availability(ios, strict, introduced = 17.4))) \
0157 __attribute__((availability(tvos, strict, introduced = 17.4))) \
0158 __attribute__((availability(watchos, strict, introduced = 10.4)))
0159
0160
0161 # if (defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 140000) || \
0162 (defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ < 170000) || \
0163 (defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__ < 170000) || \
0164 (defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__ < 100000)
0165 # define _LIBCPP_INTRODUCED_IN_LLVM_16 0
0166 # else
0167 # define _LIBCPP_INTRODUCED_IN_LLVM_16 1
0168 # endif
0169 # define _LIBCPP_INTRODUCED_IN_LLVM_16_ATTRIBUTE \
0170 __attribute__((availability(macos, strict, introduced = 14.0))) \
0171 __attribute__((availability(ios, strict, introduced = 17.0))) \
0172 __attribute__((availability(tvos, strict, introduced = 17.0))) \
0173 __attribute__((availability(watchos, strict, introduced = 10.0)))
0174
0175
0176 # if (defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 130400) || \
0177 (defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ < 160500) || \
0178 (defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__ < 160500) || \
0179 (defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__ < 90500)
0180 # define _LIBCPP_INTRODUCED_IN_LLVM_15 0
0181 # else
0182 # define _LIBCPP_INTRODUCED_IN_LLVM_15 1
0183 # endif
0184 # define _LIBCPP_INTRODUCED_IN_LLVM_15_ATTRIBUTE \
0185 __attribute__((availability(macos, strict, introduced = 13.4))) \
0186 __attribute__((availability(ios, strict, introduced = 16.5))) \
0187 __attribute__((availability(tvos, strict, introduced = 16.5))) \
0188 __attribute__((availability(watchos, strict, introduced = 9.5)))
0189
0190
0191 # define _LIBCPP_INTRODUCED_IN_LLVM_14 _LIBCPP_INTRODUCED_IN_LLVM_15
0192 # define _LIBCPP_INTRODUCED_IN_LLVM_14_ATTRIBUTE _LIBCPP_INTRODUCED_IN_LLVM_15_ATTRIBUTE
0193
0194
0195 # if (defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 130000) || \
0196 (defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ < 160000) || \
0197 (defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__ < 160000) || \
0198 (defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__ < 90000)
0199 # define _LIBCPP_INTRODUCED_IN_LLVM_13 0
0200 # else
0201 # define _LIBCPP_INTRODUCED_IN_LLVM_13 1
0202 # endif
0203 # define _LIBCPP_INTRODUCED_IN_LLVM_13_ATTRIBUTE \
0204 __attribute__((availability(macos, strict, introduced = 13.0))) \
0205 __attribute__((availability(ios, strict, introduced = 16.0))) \
0206 __attribute__((availability(tvos, strict, introduced = 16.0))) \
0207 __attribute__((availability(watchos, strict, introduced = 9.0)))
0208
0209
0210 # if (defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 120300) || \
0211 (defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ < 150300) || \
0212 (defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__ < 150300) || \
0213 (defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__ < 80300)
0214 # define _LIBCPP_INTRODUCED_IN_LLVM_12 0
0215 # else
0216 # define _LIBCPP_INTRODUCED_IN_LLVM_12 1
0217 # endif
0218 # define _LIBCPP_INTRODUCED_IN_LLVM_12_ATTRIBUTE \
0219 __attribute__((availability(macos, strict, introduced = 12.3))) \
0220 __attribute__((availability(ios, strict, introduced = 15.3))) \
0221 __attribute__((availability(tvos, strict, introduced = 15.3))) \
0222 __attribute__((availability(watchos, strict, introduced = 8.3)))
0223
0224
0225 # if (defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 110000) || \
0226 (defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ < 140000) || \
0227 (defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__ < 140000) || \
0228 (defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__ < 70000)
0229 # define _LIBCPP_INTRODUCED_IN_LLVM_11 0
0230 # else
0231 # define _LIBCPP_INTRODUCED_IN_LLVM_11 1
0232 # endif
0233 # define _LIBCPP_INTRODUCED_IN_LLVM_11_ATTRIBUTE \
0234 __attribute__((availability(macos, strict, introduced = 11.0))) \
0235 __attribute__((availability(ios, strict, introduced = 14.0))) \
0236 __attribute__((availability(tvos, strict, introduced = 14.0))) \
0237 __attribute__((availability(watchos, strict, introduced = 7.0)))
0238
0239
0240 # define _LIBCPP_INTRODUCED_IN_LLVM_10 _LIBCPP_INTRODUCED_IN_LLVM_11
0241 # define _LIBCPP_INTRODUCED_IN_LLVM_10_ATTRIBUTE _LIBCPP_INTRODUCED_IN_LLVM_11_ATTRIBUTE
0242
0243
0244 # if (defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 101500) || \
0245 (defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ < 130000) || \
0246 (defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__ < 130000) || \
0247 (defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__ < 60000)
0248 # define _LIBCPP_INTRODUCED_IN_LLVM_9 0
0249 # else
0250 # define _LIBCPP_INTRODUCED_IN_LLVM_9 1
0251 # endif
0252 # define _LIBCPP_INTRODUCED_IN_LLVM_9_ATTRIBUTE \
0253 __attribute__((availability(macos, strict, introduced = 10.15))) \
0254 __attribute__((availability(ios, strict, introduced = 13.0))) \
0255 __attribute__((availability(tvos, strict, introduced = 13.0))) \
0256 __attribute__((availability(watchos, strict, introduced = 6.0)))
0257 # define _LIBCPP_INTRODUCED_IN_LLVM_9_ATTRIBUTE_PUSH \
0258 _Pragma("clang attribute push(__attribute__((availability(macos,strict,introduced=10.15))), apply_to=any(function,record))") \
0259 _Pragma("clang attribute push(__attribute__((availability(ios,strict,introduced=13.0))), apply_to=any(function,record))") \
0260 _Pragma("clang attribute push(__attribute__((availability(tvos,strict,introduced=13.0))), apply_to=any(function,record))") \
0261 _Pragma("clang attribute push(__attribute__((availability(watchos,strict,introduced=6.0))), apply_to=any(function,record))")
0262 # define _LIBCPP_INTRODUCED_IN_LLVM_9_ATTRIBUTE_POP \
0263 _Pragma("clang attribute pop") \
0264 _Pragma("clang attribute pop") \
0265 _Pragma("clang attribute pop") \
0266 _Pragma("clang attribute pop")
0267
0268
0269 # if defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__ < 50000
0270 # define _LIBCPP_INTRODUCED_IN_LLVM_4 0
0271 # else
0272 # define _LIBCPP_INTRODUCED_IN_LLVM_4 1
0273 # endif
0274 # define _LIBCPP_INTRODUCED_IN_LLVM_4_ATTRIBUTE __attribute__((availability(watchos, strict, introduced = 5.0)))
0275
0276
0277
0278 #else
0279
0280
0281
0282 # error \
0283 "It looks like you're trying to enable vendor availability markup, but you haven't defined the corresponding macros yet!"
0284
0285 #endif
0286
0287
0288
0289
0290
0291
0292
0293
0294
0295 #define _LIBCPP_AVAILABILITY_HAS_BAD_OPTIONAL_ACCESS _LIBCPP_INTRODUCED_IN_LLVM_4
0296 #define _LIBCPP_AVAILABILITY_BAD_OPTIONAL_ACCESS _LIBCPP_INTRODUCED_IN_LLVM_4_ATTRIBUTE
0297
0298 #define _LIBCPP_AVAILABILITY_HAS_BAD_VARIANT_ACCESS _LIBCPP_INTRODUCED_IN_LLVM_4
0299 #define _LIBCPP_AVAILABILITY_BAD_VARIANT_ACCESS _LIBCPP_INTRODUCED_IN_LLVM_4_ATTRIBUTE
0300
0301 #define _LIBCPP_AVAILABILITY_HAS_BAD_ANY_CAST _LIBCPP_INTRODUCED_IN_LLVM_4
0302 #define _LIBCPP_AVAILABILITY_BAD_ANY_CAST _LIBCPP_INTRODUCED_IN_LLVM_4_ATTRIBUTE
0303
0304
0305
0306 #define _LIBCPP_AVAILABILITY_HAS_FILESYSTEM_LIBRARY _LIBCPP_INTRODUCED_IN_LLVM_9
0307 #define _LIBCPP_AVAILABILITY_FILESYSTEM_LIBRARY _LIBCPP_INTRODUCED_IN_LLVM_9_ATTRIBUTE
0308 #define _LIBCPP_AVAILABILITY_FILESYSTEM_LIBRARY_PUSH _LIBCPP_INTRODUCED_IN_LLVM_9_ATTRIBUTE_PUSH
0309 #define _LIBCPP_AVAILABILITY_FILESYSTEM_LIBRARY_POP _LIBCPP_INTRODUCED_IN_LLVM_9_ATTRIBUTE_POP
0310
0311
0312
0313
0314
0315 #define _LIBCPP_AVAILABILITY_HAS_SYNC _LIBCPP_INTRODUCED_IN_LLVM_11
0316 #define _LIBCPP_AVAILABILITY_SYNC _LIBCPP_INTRODUCED_IN_LLVM_11_ATTRIBUTE
0317
0318
0319
0320
0321
0322
0323
0324
0325 #if !defined(_LIBCPP_COMPILER_GCC) && !defined(_WIN32)
0326 # define _LIBCPP_AVAILABILITY_HAS_ADDITIONAL_IOSTREAM_EXPLICIT_INSTANTIATIONS_1 _LIBCPP_INTRODUCED_IN_LLVM_12
0327 #else
0328 # define _LIBCPP_AVAILABILITY_HAS_ADDITIONAL_IOSTREAM_EXPLICIT_INSTANTIATIONS_1 0
0329 #endif
0330
0331
0332
0333 #define _LIBCPP_AVAILABILITY_HAS_TO_CHARS_FLOATING_POINT _LIBCPP_INTRODUCED_IN_LLVM_14
0334 #define _LIBCPP_AVAILABILITY_TO_CHARS_FLOATING_POINT _LIBCPP_INTRODUCED_IN_LLVM_14_ATTRIBUTE
0335
0336
0337
0338
0339 #define _LIBCPP_AVAILABILITY_HAS_VERBOSE_ABORT _LIBCPP_INTRODUCED_IN_LLVM_15
0340 #define _LIBCPP_AVAILABILITY_VERBOSE_ABORT _LIBCPP_INTRODUCED_IN_LLVM_15_ATTRIBUTE
0341
0342
0343
0344
0345
0346
0347
0348
0349 #define _LIBCPP_AVAILABILITY_HAS_PMR _LIBCPP_INTRODUCED_IN_LLVM_16
0350 #define _LIBCPP_AVAILABILITY_PMR
0351
0352
0353
0354
0355 #define _LIBCPP_AVAILABILITY_HAS_INIT_PRIMARY_EXCEPTION _LIBCPP_INTRODUCED_IN_LLVM_18
0356 #define _LIBCPP_AVAILABILITY_INIT_PRIMARY_EXCEPTION _LIBCPP_INTRODUCED_IN_LLVM_18_ATTRIBUTE
0357
0358
0359
0360
0361 #define _LIBCPP_AVAILABILITY_HAS_PRINT _LIBCPP_INTRODUCED_IN_LLVM_18
0362 #define _LIBCPP_AVAILABILITY_PRINT _LIBCPP_INTRODUCED_IN_LLVM_18_ATTRIBUTE
0363
0364
0365
0366 #define _LIBCPP_AVAILABILITY_HAS_TZDB _LIBCPP_INTRODUCED_IN_LLVM_19
0367 #define _LIBCPP_AVAILABILITY_TZDB _LIBCPP_INTRODUCED_IN_LLVM_19_ATTRIBUTE
0368
0369
0370
0371
0372
0373 #define _LIBCPP_AVAILABILITY_HAS_BAD_FUNCTION_CALL_KEY_FUNCTION _LIBCPP_INTRODUCED_IN_LLVM_19
0374 #define _LIBCPP_AVAILABILITY_BAD_FUNCTION_CALL_KEY_FUNCTION _LIBCPP_INTRODUCED_IN_LLVM_19_ATTRIBUTE
0375 #define _LIBCPP_AVAILABILITY_HAS_BAD_EXPECTED_ACCESS_KEY_FUNCTION _LIBCPP_INTRODUCED_IN_LLVM_19
0376 #define _LIBCPP_AVAILABILITY_BAD_EXPECTED_ACCESS_KEY_FUNCTION _LIBCPP_INTRODUCED_IN_LLVM_19_ATTRIBUTE
0377
0378
0379
0380
0381 #if defined(_LIBCPP_HAS_NO_EXCEPTIONS)
0382 # define _LIBCPP_AVAILABILITY_THROW_BAD_ANY_CAST
0383 # define _LIBCPP_AVAILABILITY_THROW_BAD_OPTIONAL_ACCESS
0384 # define _LIBCPP_AVAILABILITY_THROW_BAD_VARIANT_ACCESS
0385 #else
0386 # define _LIBCPP_AVAILABILITY_THROW_BAD_ANY_CAST _LIBCPP_AVAILABILITY_BAD_ANY_CAST
0387 # define _LIBCPP_AVAILABILITY_THROW_BAD_OPTIONAL_ACCESS _LIBCPP_AVAILABILITY_BAD_OPTIONAL_ACCESS
0388 # define _LIBCPP_AVAILABILITY_THROW_BAD_VARIANT_ACCESS _LIBCPP_AVAILABILITY_BAD_VARIANT_ACCESS
0389 #endif
0390
0391
0392
0393 #if defined(_LIBCPP_HAS_NO_EXCEPTIONS) || defined(_LIBCPP_HAS_NO_RTTI)
0394 # undef _LIBCPP_AVAILABILITY_HAS_INIT_PRIMARY_EXCEPTION
0395 # undef _LIBCPP_AVAILABILITY_INIT_PRIMARY_EXCEPTION
0396 # define _LIBCPP_AVAILABILITY_HAS_INIT_PRIMARY_EXCEPTION 0
0397 # define _LIBCPP_AVAILABILITY_INIT_PRIMARY_EXCEPTION
0398 #endif
0399
0400 #endif