File indexing completed on 2025-09-17 08:53:27
0001
0002
0003
0004
0005
0006
0007
0008 #ifndef CATCH_COMPILER_CAPABILITIES_HPP_INCLUDED
0009 #define CATCH_COMPILER_CAPABILITIES_HPP_INCLUDED
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027 #include <catch2/internal/catch_platform.hpp>
0028 #include <catch2/catch_user_config.hpp>
0029
0030 #ifdef __cplusplus
0031
0032 # if (__cplusplus >= 201703L) || (defined(_MSVC_LANG) && _MSVC_LANG >= 201703L)
0033 # define CATCH_CPP17_OR_GREATER
0034 # endif
0035
0036 # if (__cplusplus >= 202002L) || (defined(_MSVC_LANG) && _MSVC_LANG >= 202002L)
0037 # define CATCH_CPP20_OR_GREATER
0038 # endif
0039
0040 #endif
0041
0042
0043
0044 #if defined(__GNUC__) && !defined(__clang__) && !defined(__ICC) && !defined(__CUDACC__) && !defined(__LCC__) && !defined(__NVCOMPILER)
0045 # define CATCH_INTERNAL_START_WARNINGS_SUPPRESSION _Pragma( "GCC diagnostic push" )
0046 # define CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION _Pragma( "GCC diagnostic pop" )
0047
0048
0049
0050 # define CATCH_INTERNAL_SUPPRESS_PARENTHESES_WARNINGS \
0051 _Pragma( "GCC diagnostic ignored \"-Wparentheses\"" )
0052
0053 # define CATCH_INTERNAL_SUPPRESS_UNUSED_RESULT \
0054 _Pragma( "GCC diagnostic ignored \"-Wunused-result\"" )
0055
0056 # define CATCH_INTERNAL_SUPPRESS_UNUSED_VARIABLE_WARNINGS \
0057 _Pragma( "GCC diagnostic ignored \"-Wunused-variable\"" )
0058
0059 # define CATCH_INTERNAL_SUPPRESS_USELESS_CAST_WARNINGS \
0060 _Pragma( "GCC diagnostic ignored \"-Wuseless-cast\"" )
0061
0062 # define CATCH_INTERNAL_SUPPRESS_SHADOW_WARNINGS \
0063 _Pragma( "GCC diagnostic ignored \"-Wshadow\"" )
0064
0065 # define CATCH_INTERNAL_CONFIG_USE_BUILTIN_CONSTANT_P
0066
0067 #endif
0068
0069 #if defined(__NVCOMPILER)
0070 # define CATCH_INTERNAL_START_WARNINGS_SUPPRESSION _Pragma( "diag push" )
0071 # define CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION _Pragma( "diag pop" )
0072 # define CATCH_INTERNAL_SUPPRESS_UNUSED_VARIABLE_WARNINGS _Pragma( "diag_suppress declared_but_not_referenced" )
0073 #endif
0074
0075 #if defined(__CUDACC__) && !defined(__clang__)
0076 # ifdef __NVCC_DIAG_PRAGMA_SUPPORT__
0077
0078 # define CATCH_INTERNAL_START_WARNINGS_SUPPRESSION _Pragma( "nv_diagnostic push" )
0079 # define CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION _Pragma( "nv_diagnostic pop" )
0080 # define CATCH_INTERNAL_SUPPRESS_UNUSED_VARIABLE_WARNINGS _Pragma( "nv_diag_suppress 177" )
0081 # else
0082 # define CATCH_INTERNAL_SUPPRESS_UNUSED_VARIABLE_WARNINGS _Pragma( "diag_suppress 177" )
0083 # endif
0084 #endif
0085
0086
0087
0088 #if defined(__clang__) && !defined(_MSC_VER)
0089 # define CATCH_INTERNAL_CONFIG_USE_BUILTIN_CONSTANT_P
0090 # define CATCH_INTERNAL_START_WARNINGS_SUPPRESSION _Pragma( "clang diagnostic push" )
0091 # define CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION _Pragma( "clang diagnostic pop" )
0092 #endif
0093
0094 #if defined(__clang__)
0095
0096 # define CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \
0097 _Pragma( "clang diagnostic ignored \"-Wexit-time-destructors\"" ) \
0098 _Pragma( "clang diagnostic ignored \"-Wglobal-constructors\"")
0099
0100 # define CATCH_INTERNAL_SUPPRESS_PARENTHESES_WARNINGS \
0101 _Pragma( "clang diagnostic ignored \"-Wparentheses\"" )
0102
0103 # define CATCH_INTERNAL_SUPPRESS_UNUSED_VARIABLE_WARNINGS \
0104 _Pragma( "clang diagnostic ignored \"-Wunused-variable\"" )
0105
0106 # define CATCH_INTERNAL_SUPPRESS_ZERO_VARIADIC_WARNINGS \
0107 _Pragma( "clang diagnostic ignored \"-Wgnu-zero-variadic-macro-arguments\"" )
0108
0109 # define CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS \
0110 _Pragma( "clang diagnostic ignored \"-Wunused-template\"" )
0111
0112 # define CATCH_INTERNAL_SUPPRESS_COMMA_WARNINGS \
0113 _Pragma( "clang diagnostic ignored \"-Wcomma\"" )
0114
0115 # define CATCH_INTERNAL_SUPPRESS_SHADOW_WARNINGS \
0116 _Pragma( "clang diagnostic ignored \"-Wshadow\"" )
0117
0118 #endif
0119
0120
0121
0122
0123
0124
0125
0126
0127
0128
0129
0130
0131
0132
0133
0134
0135
0136 #if defined( __ibmxl__ ) || defined( __CUDACC__ ) || defined( __NVCOMPILER )
0137 # define CATCH_INTERNAL_CONFIG_NO_USE_BUILTIN_CONSTANT_P
0138 #endif
0139
0140
0141
0142
0143
0144 #if defined( CATCH_PLATFORM_WINDOWS ) || \
0145 defined( CATCH_PLATFORM_PLAYSTATION ) || \
0146 defined( __CYGWIN__ ) || \
0147 defined( __QNX__ ) || \
0148 defined( __EMSCRIPTEN__ ) || \
0149 defined( __DJGPP__ ) || \
0150 defined( __OS400__ )
0151 # define CATCH_INTERNAL_CONFIG_NO_POSIX_SIGNALS
0152 #else
0153 # define CATCH_INTERNAL_CONFIG_POSIX_SIGNALS
0154 #endif
0155
0156
0157
0158 #if defined( CATCH_PLATFORM_WINDOWS_UWP ) || \
0159 defined( CATCH_PLATFORM_PLAYSTATION ) || \
0160 defined( _GAMING_XBOX )
0161 # define CATCH_INTERNAL_CONFIG_NO_GETENV
0162 #else
0163 # define CATCH_INTERNAL_CONFIG_GETENV
0164 #endif
0165
0166
0167
0168 #if defined(__ANDROID__)
0169 # define CATCH_INTERNAL_CONFIG_NO_CPP11_TO_STRING
0170 #endif
0171
0172
0173
0174 #if defined(__MINGW32__)
0175 # define CATCH_INTERNAL_CONFIG_NO_WINDOWS_SEH
0176 #endif
0177
0178
0179
0180 #if defined(__ORBIS__)
0181 # define CATCH_INTERNAL_CONFIG_NO_NEW_CAPTURE
0182 #endif
0183
0184
0185
0186 #ifdef __CYGWIN__
0187
0188
0189
0190 # define _BSD_SOURCE
0191
0192
0193 # if !((__cplusplus >= 201103L) && defined(_GLIBCXX_USE_C99) \
0194 && !defined(_GLIBCXX_HAVE_BROKEN_VSWPRINTF))
0195
0196 # define CATCH_INTERNAL_CONFIG_NO_CPP11_TO_STRING
0197
0198 # endif
0199 #endif
0200
0201
0202
0203 #if defined(_MSC_VER)
0204
0205
0206
0207 # if !defined( __CUDACC__ )
0208 # define CATCH_INTERNAL_START_WARNINGS_SUPPRESSION \
0209 __pragma( warning( push ) )
0210 # define CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION \
0211 __pragma( warning( pop ) )
0212 # endif
0213
0214
0215
0216 # if defined(CATCH_PLATFORM_WINDOWS_UWP)
0217 # define CATCH_INTERNAL_CONFIG_NO_COLOUR_WIN32
0218 # else
0219 # define CATCH_INTERNAL_CONFIG_WINDOWS_SEH
0220 # endif
0221
0222
0223
0224
0225 # if !defined(__clang__)
0226 # if !defined(_MSVC_TRADITIONAL) || (defined(_MSVC_TRADITIONAL) && _MSVC_TRADITIONAL)
0227 # define CATCH_INTERNAL_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR
0228 # endif
0229 # endif
0230
0231 #endif
0232
0233 #if defined(_REENTRANT) || defined(_MSC_VER)
0234
0235 # define CATCH_INTERNAL_CONFIG_USE_ASYNC
0236 #endif
0237
0238
0239
0240 #if defined(__EXCEPTIONS) || defined(__cpp_exceptions) || defined(_CPPUNWIND)
0241 # define CATCH_INTERNAL_CONFIG_EXCEPTIONS_ENABLED
0242 #endif
0243
0244
0245
0246
0247 #if defined(__BORLANDC__)
0248 #define CATCH_INTERNAL_CONFIG_POLYFILL_ISNAN
0249 #endif
0250
0251
0252
0253
0254
0255
0256 #if defined(UNDER_RTSS) || defined(RTX64_BUILD)
0257 #define CATCH_INTERNAL_CONFIG_NO_WINDOWS_SEH
0258 #define CATCH_INTERNAL_CONFIG_NO_ASYNC
0259 #define CATCH_INTERNAL_CONFIG_NO_COLOUR_WIN32
0260 #endif
0261
0262 #if !defined(_GLIBCXX_USE_C99_MATH_TR1)
0263 #define CATCH_INTERNAL_CONFIG_GLOBAL_NEXTAFTER
0264 #endif
0265
0266
0267 #if defined(__has_include)
0268
0269 #if __has_include(<string_view>) && defined(CATCH_CPP17_OR_GREATER)
0270 # define CATCH_INTERNAL_CONFIG_CPP17_STRING_VIEW
0271 #endif
0272
0273
0274 # if __has_include(<optional>) && defined(CATCH_CPP17_OR_GREATER)
0275 # define CATCH_INTERNAL_CONFIG_CPP17_OPTIONAL
0276 # endif
0277
0278
0279 # if __has_include(<cstddef>) && defined(CATCH_CPP17_OR_GREATER)
0280 # include <cstddef>
0281 # if defined(__cpp_lib_byte) && (__cpp_lib_byte > 0)
0282 # define CATCH_INTERNAL_CONFIG_CPP17_BYTE
0283 # endif
0284 # endif
0285
0286
0287 # if __has_include(<variant>) && defined(CATCH_CPP17_OR_GREATER)
0288 # if defined(__clang__) && (__clang_major__ < 8)
0289
0290
0291 # include <ciso646>
0292 # if defined(__GLIBCXX__) && defined(_GLIBCXX_RELEASE) && (_GLIBCXX_RELEASE < 9)
0293 # define CATCH_CONFIG_NO_CPP17_VARIANT
0294 # else
0295 # define CATCH_INTERNAL_CONFIG_CPP17_VARIANT
0296 # endif
0297 # else
0298 # define CATCH_INTERNAL_CONFIG_CPP17_VARIANT
0299 # endif
0300 # endif
0301 #endif
0302
0303
0304 #if defined(CATCH_INTERNAL_CONFIG_WINDOWS_SEH) && !defined(CATCH_CONFIG_NO_WINDOWS_SEH) && !defined(CATCH_CONFIG_WINDOWS_SEH) && !defined(CATCH_INTERNAL_CONFIG_NO_WINDOWS_SEH)
0305 # define CATCH_CONFIG_WINDOWS_SEH
0306 #endif
0307
0308 #if defined(CATCH_INTERNAL_CONFIG_POSIX_SIGNALS) && !defined(CATCH_INTERNAL_CONFIG_NO_POSIX_SIGNALS) && !defined(CATCH_CONFIG_NO_POSIX_SIGNALS) && !defined(CATCH_CONFIG_POSIX_SIGNALS)
0309 # define CATCH_CONFIG_POSIX_SIGNALS
0310 #endif
0311
0312 #if defined(CATCH_INTERNAL_CONFIG_GETENV) && !defined(CATCH_INTERNAL_CONFIG_NO_GETENV) && !defined(CATCH_CONFIG_NO_GETENV) && !defined(CATCH_CONFIG_GETENV)
0313 # define CATCH_CONFIG_GETENV
0314 #endif
0315
0316 #if !defined(CATCH_INTERNAL_CONFIG_NO_CPP11_TO_STRING) && !defined(CATCH_CONFIG_NO_CPP11_TO_STRING) && !defined(CATCH_CONFIG_CPP11_TO_STRING)
0317 # define CATCH_CONFIG_CPP11_TO_STRING
0318 #endif
0319
0320 #if defined(CATCH_INTERNAL_CONFIG_CPP17_OPTIONAL) && !defined(CATCH_CONFIG_NO_CPP17_OPTIONAL) && !defined(CATCH_CONFIG_CPP17_OPTIONAL)
0321 # define CATCH_CONFIG_CPP17_OPTIONAL
0322 #endif
0323
0324 #if defined(CATCH_INTERNAL_CONFIG_CPP17_STRING_VIEW) && !defined(CATCH_CONFIG_NO_CPP17_STRING_VIEW) && !defined(CATCH_CONFIG_CPP17_STRING_VIEW)
0325 # define CATCH_CONFIG_CPP17_STRING_VIEW
0326 #endif
0327
0328 #if defined(CATCH_INTERNAL_CONFIG_CPP17_VARIANT) && !defined(CATCH_CONFIG_NO_CPP17_VARIANT) && !defined(CATCH_CONFIG_CPP17_VARIANT)
0329 # define CATCH_CONFIG_CPP17_VARIANT
0330 #endif
0331
0332 #if defined(CATCH_INTERNAL_CONFIG_CPP17_BYTE) && !defined(CATCH_CONFIG_NO_CPP17_BYTE) && !defined(CATCH_CONFIG_CPP17_BYTE)
0333 # define CATCH_CONFIG_CPP17_BYTE
0334 #endif
0335
0336
0337 #if defined(CATCH_CONFIG_EXPERIMENTAL_REDIRECT)
0338 # define CATCH_INTERNAL_CONFIG_NEW_CAPTURE
0339 #endif
0340
0341 #if defined(CATCH_INTERNAL_CONFIG_NEW_CAPTURE) && !defined(CATCH_INTERNAL_CONFIG_NO_NEW_CAPTURE) && !defined(CATCH_CONFIG_NO_NEW_CAPTURE) && !defined(CATCH_CONFIG_NEW_CAPTURE)
0342 # define CATCH_CONFIG_NEW_CAPTURE
0343 #endif
0344
0345 #if !defined( CATCH_INTERNAL_CONFIG_EXCEPTIONS_ENABLED ) && \
0346 !defined( CATCH_CONFIG_DISABLE_EXCEPTIONS ) && \
0347 !defined( CATCH_CONFIG_NO_DISABLE_EXCEPTIONS )
0348 # define CATCH_CONFIG_DISABLE_EXCEPTIONS
0349 #endif
0350
0351 #if defined(CATCH_INTERNAL_CONFIG_POLYFILL_ISNAN) && !defined(CATCH_CONFIG_NO_POLYFILL_ISNAN) && !defined(CATCH_CONFIG_POLYFILL_ISNAN)
0352 # define CATCH_CONFIG_POLYFILL_ISNAN
0353 #endif
0354
0355 #if defined(CATCH_INTERNAL_CONFIG_USE_ASYNC) && !defined(CATCH_INTERNAL_CONFIG_NO_ASYNC) && !defined(CATCH_CONFIG_NO_USE_ASYNC) && !defined(CATCH_CONFIG_USE_ASYNC)
0356 # define CATCH_CONFIG_USE_ASYNC
0357 #endif
0358
0359 #if defined(CATCH_INTERNAL_CONFIG_GLOBAL_NEXTAFTER) && !defined(CATCH_CONFIG_NO_GLOBAL_NEXTAFTER) && !defined(CATCH_CONFIG_GLOBAL_NEXTAFTER)
0360 # define CATCH_CONFIG_GLOBAL_NEXTAFTER
0361 #endif
0362
0363
0364
0365
0366 #if defined( CATCH_INTERNAL_CONFIG_USE_BUILTIN_CONSTANT_P ) && \
0367 !defined( CATCH_INTERNAL_CONFIG_NO_USE_BUILTIN_CONSTANT_P ) && !defined(CATCH_CONFIG_USE_BUILTIN_CONSTANT_P)
0368 #define CATCH_CONFIG_USE_BUILTIN_CONSTANT_P
0369 #endif
0370
0371 #if defined( CATCH_CONFIG_USE_BUILTIN_CONSTANT_P ) && \
0372 !defined( CATCH_CONFIG_NO_USE_BUILTIN_CONSTANT_P )
0373 # define CATCH_INTERNAL_IGNORE_BUT_WARN( ... ) \
0374 (void)__builtin_constant_p( __VA_ARGS__ )
0375
0376 #else
0377 # define CATCH_INTERNAL_IGNORE_BUT_WARN( ... )
0378 #endif
0379
0380
0381
0382 #if !defined(CATCH_INTERNAL_START_WARNINGS_SUPPRESSION)
0383 # define CATCH_INTERNAL_START_WARNINGS_SUPPRESSION
0384 #endif
0385 #if !defined(CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION)
0386 # define CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION
0387 #endif
0388 #if !defined(CATCH_INTERNAL_SUPPRESS_PARENTHESES_WARNINGS)
0389 # define CATCH_INTERNAL_SUPPRESS_PARENTHESES_WARNINGS
0390 #endif
0391 #if !defined(CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS)
0392 # define CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS
0393 #endif
0394 #if !defined(CATCH_INTERNAL_SUPPRESS_UNUSED_RESULT)
0395 # define CATCH_INTERNAL_SUPPRESS_UNUSED_RESULT
0396 #endif
0397 #if !defined(CATCH_INTERNAL_SUPPRESS_UNUSED_VARIABLE_WARNINGS)
0398 # define CATCH_INTERNAL_SUPPRESS_UNUSED_VARIABLE_WARNINGS
0399 #endif
0400 #if !defined(CATCH_INTERNAL_SUPPRESS_USELESS_CAST_WARNINGS)
0401 # define CATCH_INTERNAL_SUPPRESS_USELESS_CAST_WARNINGS
0402 #endif
0403 #if !defined(CATCH_INTERNAL_SUPPRESS_ZERO_VARIADIC_WARNINGS)
0404 # define CATCH_INTERNAL_SUPPRESS_ZERO_VARIADIC_WARNINGS
0405 #endif
0406 #if !defined( CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS )
0407 # define CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS
0408 #endif
0409 #if !defined( CATCH_INTERNAL_SUPPRESS_COMMA_WARNINGS )
0410 # define CATCH_INTERNAL_SUPPRESS_COMMA_WARNINGS
0411 #endif
0412 #if !defined( CATCH_INTERNAL_SUPPRESS_SHADOW_WARNINGS )
0413 # define CATCH_INTERNAL_SUPPRESS_SHADOW_WARNINGS
0414 #endif
0415
0416 #if defined(__APPLE__) && defined(__apple_build_version__) && (__clang_major__ < 10)
0417 # undef CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS
0418 #elif defined(__clang__) && (__clang_major__ < 5)
0419 # undef CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS
0420 #endif
0421
0422
0423 #if defined(CATCH_CONFIG_DISABLE_EXCEPTIONS)
0424 #define CATCH_TRY if ((true))
0425 #define CATCH_CATCH_ALL if ((false))
0426 #define CATCH_CATCH_ANON(type) if ((false))
0427 #else
0428 #define CATCH_TRY try
0429 #define CATCH_CATCH_ALL catch (...)
0430 #define CATCH_CATCH_ANON(type) catch (type)
0431 #endif
0432
0433 #if defined(CATCH_INTERNAL_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR) && !defined(CATCH_CONFIG_NO_TRADITIONAL_MSVC_PREPROCESSOR) && !defined(CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR)
0434 #define CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR
0435 #endif
0436
0437 #if defined( CATCH_PLATFORM_WINDOWS ) && \
0438 !defined( CATCH_CONFIG_COLOUR_WIN32 ) && \
0439 !defined( CATCH_CONFIG_NO_COLOUR_WIN32 ) && \
0440 !defined( CATCH_INTERNAL_CONFIG_NO_COLOUR_WIN32 )
0441 # define CATCH_CONFIG_COLOUR_WIN32
0442 #endif
0443
0444 #if defined( CATCH_CONFIG_SHARED_LIBRARY ) && defined( _MSC_VER ) && \
0445 !defined( CATCH_CONFIG_STATIC )
0446 # ifdef Catch2_EXPORTS
0447 # define CATCH_EXPORT
0448 # else
0449 # define CATCH_EXPORT __declspec( dllimport )
0450 # endif
0451 #else
0452 # define CATCH_EXPORT
0453 #endif
0454
0455 #endif