├── .clang-format ├── .editorconfig ├── .gitignore ├── CMakeLists.txt ├── LICENSE ├── cpp_feature_tester.cpp └── readme.md /.clang-format: -------------------------------------------------------------------------------- 1 | AccessModifierOffset: -2 2 | AlignAfterOpenBracket: "true" 3 | AlignEscapedNewlines: Left 4 | AlignOperands: "true" 5 | AlignTrailingComments: true 6 | AllowAllParametersOfDeclarationOnNextLine: true 7 | AllowShortBlocksOnASingleLine: Always 8 | AllowShortCaseLabelsOnASingleLine: false 9 | AllowShortFunctionsOnASingleLine: Empty 10 | AllowShortIfStatementsOnASingleLine: "false" 11 | AllowShortLoopsOnASingleLine: false 12 | AlwaysBreakAfterDefinitionReturnType: None 13 | AlwaysBreakBeforeMultilineStrings: true 14 | AlwaysBreakTemplateDeclarations: Yes 15 | BasedOnStyle: LLVM 16 | BinPackArguments: true 17 | BinPackParameters: true 18 | BreakBeforeBinaryOperators: None 19 | BreakBeforeBraces: Attach 20 | BreakBeforeTernaryOperators: true 21 | BreakConstructorInitializersBeforeComma: true 22 | ColumnLimit: 80 23 | CommentPragmas: '^ IWYU pragma:' 24 | ConstructorInitializerAllOnOneLineOrOnePerLine: false 25 | ConstructorInitializerIndentWidth: 2 26 | ContinuationIndentWidth: 2 27 | Cpp11BracedListStyle: true 28 | DerivePointerAlignment: false 29 | DisableFormat: false 30 | ExperimentalAutoDetectBinPacking: false 31 | IndentCaseLabels: false 32 | IndentWidth: 2 33 | IndentWrappedFunctionNames: false 34 | KeepEmptyLinesAtTheStartOfBlocks: true 35 | Language: Cpp 36 | MaxEmptyLinesToKeep: 1 37 | NamespaceIndentation: All 38 | ObjCBlockIndentWidth: 2 39 | ObjCSpaceAfterProperty: false 40 | ObjCSpaceBeforeProtocolList: true 41 | PenaltyBreakBeforeFirstCallParameter: 19 42 | PenaltyBreakComment: 300 43 | PenaltyBreakFirstLessLess: 80 44 | PenaltyBreakString: 1000 45 | PenaltyExcessCharacter: 1000000 46 | PenaltyReturnTypeOnItsOwnLine: 60 47 | PointerAlignment: Right 48 | SpaceAfterCStyleCast: false 49 | SpaceAfterTemplateKeyword: false 50 | SpaceBeforeAssignmentOperators: true 51 | SpaceBeforeParens: Never 52 | SpaceInEmptyParentheses: true 53 | SpacesBeforeTrailingComments: 1 54 | SpacesInAngles: false 55 | SpacesInCStyleCastParentheses: false 56 | SpacesInContainerLiterals: true 57 | SpacesInParentheses: true 58 | SpacesInSquareBrackets: false 59 | Standard: c++17 60 | TabWidth: 2 61 | UseTab: ForIndentation 62 | AllowShortLambdasOnASingleLine: Empty 63 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root=true 2 | 3 | [*] 4 | charset = utf-8 5 | indent_style = tab 6 | indent_size = 2 7 | trim_trailing_whitespace = true 8 | max_line_length = 80 9 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | #ignore thumbnails created by windows 2 | Thumbs.db 3 | #Ignore files build by Visual Studio 4 | *.obj 5 | *.exe 6 | *.pdb 7 | *.user 8 | *.aps 9 | *.pch 10 | *.vspscc 11 | *_i.c 12 | *_p.c 13 | *.ncb 14 | *.suo 15 | *.tlb 16 | *.tlh 17 | *.bak 18 | *.cache 19 | *.ilk 20 | *.log 21 | [Bb]in 22 | [Dd]ebug*/ 23 | *.lib 24 | *.sbr 25 | obj/ 26 | .vs/ 27 | [Rr]elease*/ 28 | _ReSharper*/ 29 | [Tt]est[Rr]esult* 30 | .idea/ 31 | *.opensdf 32 | ## Ignore Visual Studio temporary files, build results, and 33 | ## files generated by popular Visual Studio add-ons. 34 | # User-specific files 35 | *.suo 36 | *.user 37 | *.userosscache 38 | *.sln.docstates 39 | # User-specific folders 40 | *.sln.ide/ 41 | # Build results 42 | [Dd]ebug/ 43 | [Dd]ebugPublic/ 44 | [Rr]elease/ 45 | [Rr]eleases/ 46 | x64/ 47 | x86/ 48 | build/ 49 | bld/ 50 | [Bb]in/ 51 | [Oo]bj/ 52 | # Roslyn cache directories 53 | *.ide/ 54 | # MSTest test Results 55 | [Tt]est[Rr]esult*/ 56 | [Bb]uild[Ll]og.* 57 | #NUNIT 58 | *.VisualState.xml 59 | TestResult.xml 60 | # Build Results of an ATL Project 61 | [Dd]ebugPS/ 62 | [Rr]eleasePS/ 63 | dlldata.c 64 | *_i.c 65 | *_p.c 66 | *_i.h 67 | *.ilk 68 | *.meta 69 | *.obj 70 | *.pch 71 | *.pdb 72 | *.pgc 73 | *.pgd 74 | *.rsp 75 | *.sbr 76 | *.tlb 77 | *.tli 78 | *.tlh 79 | *.tmp 80 | *.tmp_proj 81 | *.log 82 | *.vspscc 83 | *.vssscc 84 | .builds 85 | *.pidb 86 | *.svclog 87 | *.scc 88 | # Chutzpah Test files 89 | _Chutzpah* 90 | # Visual C++ cache files 91 | ipch/ 92 | *.aps 93 | *.ncb 94 | *.opensdf 95 | *.sdf 96 | *.cachefile 97 | # Visual Studio profiler 98 | *.psess 99 | *.vsp 100 | *.vspx 101 | # TFS 2012 Local Workspace 102 | $tf/ 103 | # Guidance Automation Toolkit 104 | *.gpState 105 | # ReSharper is a .NET coding add-in 106 | _ReSharper*/ 107 | *.[Rr]e[Ss]harper 108 | *.DotSettings.user 109 | # JustCode is a .NET coding addin-in 110 | .JustCode 111 | # TeamCity is a build add-in 112 | _TeamCity* 113 | # DotCover is a Code Coverage Tool 114 | *.dotCover 115 | # NCrunch 116 | _NCrunch_* 117 | .*crunch*.local.xml 118 | # MightyMoose 119 | *.mm.* 120 | AutoTest.Net/ 121 | # Web workbench (sass) 122 | .sass-cache/ 123 | # Installshield output folder 124 | [Ee]xpress/ 125 | # DocProject is a documentation generator add-in 126 | DocProject/buildhelp/ 127 | DocProject/Help/*.HxT 128 | DocProject/Help/*.HxC 129 | DocProject/Help/*.hhc 130 | DocProject/Help/*.hhk 131 | DocProject/Help/*.hhp 132 | DocProject/Help/Html2 133 | DocProject/Help/html 134 | # Click-Once directory 135 | publish/ 136 | # Publish Web Output 137 | *.[Pp]ublish.xml 138 | *.azurePubxml 139 | # TODO: Comment the next line if you want to checkin your web deploy settings 140 | # but database connection strings (with potential passwords) will be unencrypted 141 | *.pubxml 142 | *.publishproj 143 | # NuGet Packages 144 | *.nupkg 145 | # The packages folder can be ignored because of Package Restore 146 | **/packages/* 147 | # except build/, which is used as an MSBuild target. 148 | !**/packages/build/ 149 | # If using the old MSBuild-Integrated Package Restore, uncomment this: 150 | #!**/packages/repositories.config 151 | # Windows Azure Build Output 152 | csx/ 153 | *.build.csdef 154 | # Windows Store app package directory 155 | AppPackages/ 156 | # Others 157 | sql/ 158 | *.Cache 159 | ClientBin/ 160 | [Ss]tyle[Cc]op.* 161 | ~$* 162 | *~ 163 | *.dbmdl 164 | *.dbproj.schemaview 165 | *.pfx 166 | *.publishsettings 167 | node_modules/ 168 | bower_components/ 169 | # RIA/Silverlight projects 170 | Generated_Code/ 171 | # Backup & report files from converting an old project file 172 | # to a newer Visual Studio version. Backup files are not needed, 173 | # because we have git ;-) 174 | _UpgradeReport_Files/ 175 | Backup*/ 176 | UpgradeLog*.XML 177 | UpgradeLog*.htm 178 | # SQL Server files 179 | *.mdf 180 | *.ldf 181 | # Business Intelligence projects 182 | *.rdl.data 183 | *.bim.layout 184 | *.bim_*.settings 185 | # Microsoft Fakes 186 | FakesAssemblies/ 187 | *.suo 188 | *.vcxproj.filters 189 | *.npp 190 | CMakeFiles/* 191 | nbproject/* 192 | *.cd 193 | *.cd 194 | a.out 195 | cmake-build-*/* 196 | -------------------------------------------------------------------------------- /CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | project(cpp_feature_tester) 3 | 4 | add_executable(cpp_feature_tester cpp_feature_tester.cpp) 5 | 6 | set_property(TARGET cpp_feature_tester PROPERTY CXX_STANDARD 20) 7 | set_property(TARGET cpp_feature_tester PROPERTY CXX_STANDARD_REQUIRED ON) 8 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 Darrell Wright 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /cpp_feature_tester.cpp: -------------------------------------------------------------------------------- 1 | // The MIT License (MIT 2 | // 3 | // Copyright (c); 2019 Darrell Wright 4 | // 5 | // Permission is hereby granted, free of charge, to any person obtaining a copy 6 | // of this software and associated documentation files( the "Software" );, to 7 | // deal in the Software without restriction, including without limitation the 8 | // rights to use, copy, modify, merge, publish, distribute, sublicense, and / or 9 | // sell copies of the Software, and to permit persons to whom the Software is 10 | // furnished to do so, subject to the following conditions: 11 | // 12 | // The above copyright notice and this permission notice shall be included in 13 | // all copies or substantial portions of the Software. 14 | // 15 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE 18 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | // SOFTWARE. 22 | 23 | #ifndef __has_include 24 | #error Cannot continue, __has_include is not defined 25 | #endif 26 | 27 | #if __has_include( ) 28 | #include 29 | #endif 30 | #if __has_include( ) 31 | #include 32 | #endif 33 | #if __has_include( ) 34 | #include 35 | #endif 36 | #if __has_include( ) 37 | #include 38 | #endif 39 | #if __has_include( ) 40 | #include 41 | #endif 42 | #if __has_include( ) 43 | #include 44 | #endif 45 | #if __has_include( ) 46 | #include 47 | #endif 48 | #if __has_include( ) 49 | #include 50 | #endif 51 | #if __has_include( ) 52 | #include 53 | #endif 54 | #if __has_include( ) 55 | #include 56 | #endif 57 | #if __has_include( ) 58 | #include 59 | #endif 60 | #if __has_include( ) 61 | #include 62 | #endif 63 | #if __has_include( ) 64 | #include 65 | #endif 66 | #if __has_include( ) 67 | #include 68 | #endif 69 | #if __has_include( ) 70 | #include 71 | #endif 72 | #if __has_include( ) 73 | #include 74 | #endif 75 | #if __has_include( ) 76 | #include 77 | #endif 78 | #if __has_include( ) 79 | #include 80 | #endif 81 | #if __has_include( ) 82 | #include 83 | #endif 84 | #if __has_include( ) 85 | #include 86 | #endif 87 | #if __has_include( ) 88 | #include 89 | #endif 90 | #if __has_include( ) 91 | #include 92 | #endif 93 | #if __has_include( ) 94 | #include 95 | #endif 96 | #if __has_include( ) 97 | #include 98 | #endif 99 | #if __has_include( ) 100 | #include 101 | #endif 102 | #if __has_include( ) 103 | #include 104 | #endif 105 | #if __has_include( ) 106 | #include 107 | #endif 108 | #if __has_include( ) 109 | #include 110 | #endif 111 | #if __has_include( ) 112 | #include 113 | #endif 114 | #if __has_include( ) 115 | #include 116 | #endif 117 | #if __has_include( ) 118 | #include 119 | #endif 120 | #if __has_include( ) 121 | #include 122 | #endif 123 | #if __has_include( ) 124 | #include 125 | #endif 126 | #if __has_include( ) 127 | #include 128 | #endif 129 | #if __has_include( ) 130 | #include 131 | #endif 132 | #if __has_include( ) 133 | #include 134 | #endif 135 | #if __has_include( ) 136 | #include 137 | #endif 138 | #if __has_include( ) 139 | #include 140 | #endif 141 | #if __has_include( ) 142 | #include 143 | #endif 144 | #if __has_include( ) 145 | #include 146 | #endif 147 | #if __has_include( ) 148 | #include 149 | #endif 150 | #if __has_include( ) 151 | #include 152 | #endif 153 | #if __has_include( ) 154 | #include 155 | #endif 156 | #if __has_include( ) 157 | #include 158 | #endif 159 | #if __has_include( ) 160 | #include 161 | #endif 162 | #if __has_include( ) 163 | #include 164 | #endif 165 | #if __has_include( ) 166 | #include 167 | #endif 168 | #if __has_include( ) 169 | #include 170 | #endif 171 | #if __has_include( ) 172 | #include 173 | #endif 174 | #if __has_include( ) 175 | #include 176 | #endif 177 | #if __has_include( ) 178 | #include 179 | #endif 180 | #if __has_include( ) 181 | #include 182 | #endif 183 | #if __has_include( ) 184 | #include 185 | #endif 186 | #if __has_include( ) 187 | #include 188 | #endif 189 | #if __has_include( ) 190 | #include 191 | #endif 192 | #if __has_include( ) 193 | #include 194 | #endif 195 | #if __has_include( ) 196 | #include 197 | #endif 198 | #if __has_include( ) 199 | #include 200 | #endif 201 | #if __has_include( ) 202 | #include 203 | #endif 204 | #if __has_include( ) 205 | #include 206 | #endif 207 | #if __has_include( ) 208 | #include 209 | #endif 210 | #if __has_include( ) 211 | #include 212 | #endif 213 | #if __has_include( ) 214 | #include 215 | #endif 216 | #if __has_include( ) 217 | #include 218 | #endif 219 | #if __has_include( ) 220 | #include 221 | #endif 222 | #if __has_include( ) 223 | #include 224 | #endif 225 | 226 | template 227 | void report( int cpp_ver, CharT const ( ¯o_name )[N], bool is_supported ) { 228 | std::cout << "C++" << cpp_ver << ", " << macro_name << ", " 229 | << ( is_supported ? "yes\n" : "no\n" ); 230 | } 231 | 232 | #define report_local( cpp_ver, name, is_supported ) \ 233 | bool const support #name #cpp_ver = is_supported 234 | 235 | int main( ) { 236 | // Language 237 | #if __cpp_constexpr >= 202211L 238 | report( 2023, "__cpp_constexpr", true ); 239 | #elif __cpp_constexpr >= 202207L 240 | report( 2023, "__cpp_constexpr (202207)", true ); 241 | #elif __cpp_constexpr >= 202110L 242 | report( 2023, "__cpp_constexpr (202110)", true ); 243 | #else 244 | report( 2023, "__cpp_constexpr", false ); 245 | #endif 246 | #if __cpp_explicit_this_parameter >= 202110L 247 | report( 2023, "__cpp_explicit_this_parameter", true ); 248 | #else 249 | report( 2023, "__cpp_explicit_this_parameter", false ); 250 | #endif 251 | #if __cpp_if_consteval >= 202106L 252 | report( 2023, "__cpp_if_consteval", true ); 253 | #else 254 | report( 2023, "__cpp_if_consteval", false ); 255 | #endif 256 | #if __cpp_implicit_move >= 202207L 257 | report( 2023, "__cpp_implicit_move", true ); 258 | #else 259 | report( 2023, "__cpp_implicit_move", false ); 260 | #endif 261 | #if __cpp_multidimensional_subscript >= 202211L 262 | report( 2023, "__cpp_multidimensional_subscript", true ); 263 | #elif __cpp_multidimensional_subscript >= 202110L 264 | report( 2023, "__cpp_multidimensional_subscript (202110)", true ); 265 | #else 266 | report( 2023, "__cpp_multidimensional_subscript", false ); 267 | #endif 268 | #if __cpp_named_character_escapes >= 202207L 269 | report( 2023, "__cpp_named_character_escapes", true ); 270 | #else 271 | report( 2023, "__cpp_named_character_escapes", false ); 272 | #endif 273 | #if __cpp_size_t_suffix >= 202011L 274 | report( 2023, "__cpp_size_t_suffix", true ); 275 | #else 276 | report( 2023, "__cpp_size_t_suffix", false ); 277 | #endif 278 | #if __cpp_range_based_for >= 202211L 279 | report( 2023, "__cpp_range_based_for", true ); 280 | #else 281 | report( 2023, "__cpp_range_based_for", false ); 282 | #endif 283 | #if __cpp_static_call_operator >= 202207L 284 | report( 2023, "__cpp_static_call_operator", true ); 285 | #else 286 | report( 2023, "__cpp_static_call_operator", false ); 287 | #endif 288 | #if __cpp_aggregate_paren_init >= 201902L 289 | report( 2020, "__cpp_aggregate_paren_init", true ); 290 | #else 291 | report( 2020, "__cpp_aggregate_paren_init", false ); 292 | #endif 293 | #if __cpp_char8_t >= 201811L 294 | report( 2020, "__cpp_char8_t", true ); 295 | #else 296 | report( 2020, "__cpp_char8_t", false ); 297 | #endif 298 | #if __cpp_concepts >= 201907L 299 | report( 2020, "__cpp_concepts", true ); 300 | #else 301 | report( 2020, "__cpp_concepts", false ); 302 | #endif 303 | #if __cpp_conditional_explicit >= 201806L 304 | report( 2020, "__cpp_conditional_explicit", true ); 305 | #else 306 | report( 2020, "__cpp_conditional_explicit", false ); 307 | #endif 308 | #if __cpp_consteval >= 201811L 309 | report( 2020, "__cpp_consteval", true ); 310 | #else 311 | report( 2020, "__cpp_consteval", false ); 312 | #endif 313 | #if __cpp_constexpr >= 201907L 314 | report( 2020, "__cpp_constexpr", true ); 315 | #else 316 | report( 2020, "__cpp_constexpr", false ); 317 | #endif 318 | #if __cpp_constexpr_dynamic_alloc >= 201907L 319 | report( 2020, "__cpp_constexpr_dynamic_alloc", true ); 320 | #else 321 | report( 2020, "__cpp_constexpr_dynamic_alloc", false ); 322 | #endif 323 | #if __cpp_constexpr_in_decltype >= 201711L 324 | report( 2020, "__cpp_constexpr_in_decltype", true ); 325 | #else 326 | report( 2020, "__cpp_constexpr_in_decltype", false ); 327 | #endif 328 | #if __cpp_constinit >= 201907L 329 | report( 2020, "__cpp_constinit", true ); 330 | #else 331 | report( 2020, "__cpp_constinit", false ); 332 | #endif 333 | #if __cpp_deduction_guides >= 201907L 334 | report( 2020, "__cpp_deduction_guides", true ); 335 | #else 336 | report( 2020, "__cpp_deduction_guides", false ); 337 | #endif 338 | #if __cpp_designated_initializers >= 201707L 339 | report( 2020, "__cpp_designated_initializers", true ); 340 | #else 341 | report( 2020, "__cpp_designated_initializers", false ); 342 | #endif 343 | #if __cpp_generic_lambdas >= 201707L 344 | report( 2020, "__cpp_generic_lambdas", true ); 345 | #else 346 | report( 2020, "__cpp_generic_lambdas", false ); 347 | #endif 348 | #if __cpp_impl_coroutine >= 201902L 349 | report( 2020, "__cpp_impl_coroutine", true ); 350 | #else 351 | report( 2020, "__cpp_impl_coroutine", false ); 352 | #endif 353 | #if __cpp_impl_destroying_delete >= 201806L 354 | report( 2020, "__cpp_impl_destroying_delete", true ); 355 | #else 356 | report( 2020, "__cpp_impl_destroying_delete", false ); 357 | #endif 358 | #if __cpp_impl_three_way_comparison >= 201907L 359 | report( 2020, "__cpp_impl_three_way_comparison", true ); 360 | #else 361 | report( 2020, "__cpp_impl_three_way_comparison", false ); 362 | #endif 363 | #if __cpp_init_captures >= 201803L 364 | report( 2020, "__cpp_init_captures", true ); 365 | #else 366 | report( 2020, "__cpp_init_captures", false ); 367 | #endif 368 | #if __cpp_modules >= 201907L 369 | report( 2020, "__cpp_modules", true ); 370 | #else 371 | report( 2020, "__cpp_modules", false ); 372 | #endif 373 | #if __cpp_nontype_template_args >= 201911L 374 | report( 2020, "__cpp_nontype_template_args", true ); 375 | #else 376 | report( 2020, "__cpp_nontype_template_args", false ); 377 | #endif 378 | #if __cpp_using_enum >= 201907L 379 | report( 2020, "__cpp_using_enum", true ); 380 | #else 381 | report( 2020, "__cpp_using_enum", false ); 382 | #endif 383 | #if __cpp_aggregate_bases >= 201603L 384 | report( 2017, "__cpp_aggregate_bases", true ); 385 | #else 386 | report( 2017, "__cpp_aggregate_bases", false ); 387 | #endif 388 | #if __cpp_aligned_new >= 201606L 389 | report( 2017, "__cpp_aligned_new", true ); 390 | #else 391 | report( 2017, "__cpp_aligned_new", false ); 392 | #endif 393 | #if __cpp_capture_star_this >= 201603L 394 | report( 2017, "__cpp_capture_star_this", true ); 395 | #else 396 | report( 2017, "__cpp_capture_star_this", false ); 397 | #endif 398 | #if __cpp_constexpr >= 201603L 399 | report( 2017, "__cpp_constexpr", true ); 400 | #else 401 | report( 2017, "__cpp_constexpr", false ); 402 | #endif 403 | #if __cpp_deduction_guides >= 201703L 404 | report( 2017, "__cpp_deduction_guides", true ); 405 | #else 406 | report( 2017, "__cpp_deduction_guides", false ); 407 | #endif 408 | #if __cpp_enumerator_attributes >= 201411L 409 | report( 2017, "__cpp_enumerator_attributes", true ); 410 | #else 411 | report( 2017, "__cpp_enumerator_attributes", false ); 412 | #endif 413 | #if __cpp_fold_expressions >= 201603L 414 | report( 2017, "__cpp_fold_expressions", true ); 415 | #else 416 | report( 2017, "__cpp_fold_expressions", false ); 417 | #endif 418 | #if __cpp_guaranteed_copy_elision >= 201606L 419 | report( 2017, "__cpp_guaranteed_copy_elision", true ); 420 | #else 421 | report( 2017, "__cpp_guaranteed_copy_elision", false ); 422 | #endif 423 | #if __cpp_hex_float >= 201603L 424 | report( 2017, "__cpp_hex_float", true ); 425 | #else 426 | report( 2017, "__cpp_hex_float", false ); 427 | #endif 428 | #if __cpp_if_constexpr >= 201606L 429 | report( 2017, "__cpp_if_constexpr", true ); 430 | #else 431 | report( 2017, "__cpp_if_constexpr", false ); 432 | #endif 433 | #if __cpp_inheriting_constructors >= 201511L 434 | report( 2017, "__cpp_inheriting_constructors", true ); 435 | #else 436 | report( 2017, "__cpp_inheriting_constructors", false ); 437 | #endif 438 | #if __cpp_inline_variables >= 201606L 439 | report( 2017, "__cpp_inline_variables", true ); 440 | #else 441 | report( 2017, "__cpp_inline_variables", false ); 442 | #endif 443 | #if __cpp_namespace_attributes >= 201411L 444 | report( 2017, "__cpp_namespace_attributes", true ); 445 | #else 446 | report( 2017, "__cpp_namespace_attributes", false ); 447 | #endif 448 | #if __cpp_noexcept_function_type >= 201510L 449 | report( 2017, "__cpp_noexcept_function_type", true ); 450 | #else 451 | report( 2017, "__cpp_noexcept_function_type", false ); 452 | #endif 453 | #if __cpp_nontype_template_args >= 201411L 454 | report( 2017, "__cpp_nontype_template_args", true ); 455 | #else 456 | report( 2017, "__cpp_nontype_template_args", false ); 457 | #endif 458 | #if __cpp_nontype_template_parameter_auto >= 201606L 459 | report( 2017, "__cpp_nontype_template_parameter_auto", true ); 460 | #else 461 | report( 2017, "__cpp_nontype_template_parameter_auto", false ); 462 | #endif 463 | #if __cpp_range_based_for >= 201603L 464 | report( 2017, "__cpp_range_based_for", true ); 465 | #else 466 | report( 2017, "__cpp_range_based_for", false ); 467 | #endif 468 | #if __cpp_static_assert >= 201411L 469 | report( 2017, "__cpp_static_assert", true ); 470 | #else 471 | report( 2017, "__cpp_static_assert", false ); 472 | #endif 473 | #if __cpp_structured_bindings >= 201606L 474 | report( 2017, "__cpp_structured_bindings", true ); 475 | #else 476 | report( 2017, "__cpp_structured_bindings", false ); 477 | #endif 478 | #if __cpp_template_template_args >= 201611L 479 | report( 2017, "__cpp_template_template_args", true ); 480 | #else 481 | report( 2017, "__cpp_template_template_args", false ); 482 | #endif 483 | #if __cpp_variadic_using >= 201611L 484 | report( 2017, "__cpp_variadic_using", true ); 485 | #else 486 | report( 2017, "__cpp_variadic_using", false ); 487 | #endif 488 | #if __cpp_aggregate_nsdmi >= 201304L 489 | report( 2014, "__cpp_aggregate_nsdmi", true ); 490 | #else 491 | report( 2014, "__cpp_aggregate_nsdmi", false ); 492 | #endif 493 | #if __cpp_binary_literals >= 201304L 494 | report( 2014, "__cpp_binary_literals", true ); 495 | #else 496 | report( 2014, "__cpp_binary_literals", false ); 497 | #endif 498 | #if __cpp_constexpr >= 201304L 499 | report( 2014, "__cpp_constexpr", true ); 500 | #else 501 | report( 2014, "__cpp_constexpr", false ); 502 | #endif 503 | #if __cpp_decltype_auto >= 201304L 504 | report( 2014, "__cpp_decltype_auto", true ); 505 | #else 506 | report( 2014, "__cpp_decltype_auto", false ); 507 | #endif 508 | #if __cpp_generic_lambdas >= 201304L 509 | report( 2014, "__cpp_generic_lambdas", true ); 510 | #else 511 | report( 2014, "__cpp_generic_lambdas", false ); 512 | #endif 513 | #if __cpp_init_captures >= 201304L 514 | report( 2014, "__cpp_init_captures", true ); 515 | #else 516 | report( 2014, "__cpp_init_captures", false ); 517 | #endif 518 | #if __cpp_return_type_deduction >= 201304L 519 | report( 2014, "__cpp_return_type_deduction", true ); 520 | #else 521 | report( 2014, "__cpp_return_type_deduction", false ); 522 | #endif 523 | #if __cpp_sized_deallocation >= 201309L 524 | report( 2014, "__cpp_sized_deallocation", true ); 525 | #else 526 | report( 2014, "__cpp_sized_deallocation", false ); 527 | #endif 528 | #if __cpp_variable_templates >= 201304L 529 | report( 2014, "__cpp_variable_templates", true ); 530 | #else 531 | report( 2014, "__cpp_variable_templates", false ); 532 | #endif 533 | #if __cpp_alias_templates >= 200704L 534 | report( 2011, "__cpp_alias_templates", true ); 535 | #else 536 | report( 2011, "__cpp_alias_templates", false ); 537 | #endif 538 | #if __cpp_attributes >= 200809L 539 | report( 2011, "__cpp_attributes", true ); 540 | #else 541 | report( 2011, "__cpp_attributes", false ); 542 | #endif 543 | #if __cpp_constexpr >= 200704L 544 | report( 2011, "__cpp_constexpr", true ); 545 | #else 546 | report( 2011, "__cpp_constexpr", false ); 547 | #endif 548 | #if __cpp_decltype >= 200707L 549 | report( 2011, "__cpp_decltype", true ); 550 | #else 551 | report( 2011, "__cpp_decltype", false ); 552 | #endif 553 | #if __cpp_delegating_constructors >= 200604L 554 | report( 2011, "__cpp_delegating_constructors", true ); 555 | #else 556 | report( 2011, "__cpp_delegating_constructors", false ); 557 | #endif 558 | #if __cpp_inheriting_constructors >= 200802L 559 | report( 2011, "__cpp_inheriting_constructors", true ); 560 | #else 561 | report( 2011, "__cpp_inheriting_constructors", false ); 562 | #endif 563 | #if __cpp_initializer_lists >= 200806L 564 | report( 2011, "__cpp_initializer_lists", true ); 565 | #else 566 | report( 2011, "__cpp_initializer_lists", false ); 567 | #endif 568 | #if __cpp_lambdas >= 200907L 569 | report( 2011, "__cpp_lambdas", true ); 570 | #else 571 | report( 2011, "__cpp_lambdas", false ); 572 | #endif 573 | #if __cpp_nsdmi >= 200809L 574 | report( 2011, "__cpp_nsdmi", true ); 575 | #else 576 | report( 2011, "__cpp_nsdmi", false ); 577 | #endif 578 | #if __cpp_range_based_for >= 200907L 579 | report( 2011, "__cpp_range_based_for", true ); 580 | #else 581 | report( 2011, "__cpp_range_based_for", false ); 582 | #endif 583 | #if __cpp_raw_strings >= 200710L 584 | report( 2011, "__cpp_raw_strings", true ); 585 | #else 586 | report( 2011, "__cpp_raw_strings", false ); 587 | #endif 588 | #if __cpp_ref_qualifiers >= 200710L 589 | report( 2011, "__cpp_ref_qualifiers", true ); 590 | #else 591 | report( 2011, "__cpp_ref_qualifiers", false ); 592 | #endif 593 | #if __cpp_rvalue_references >= 200610L 594 | report( 2011, "__cpp_rvalue_references", true ); 595 | #else 596 | report( 2011, "__cpp_rvalue_references", false ); 597 | #endif 598 | #if __cpp_static_assert >= 200410L 599 | report( 2011, "__cpp_static_assert", true ); 600 | #else 601 | report( 2011, "__cpp_static_assert", false ); 602 | #endif 603 | #if __cpp_threadsafe_static_init >= 200806L 604 | report( 2011, "__cpp_threadsafe_static_init", true ); 605 | #else 606 | report( 2011, "__cpp_threadsafe_static_init", false ); 607 | #endif 608 | #if __cpp_unicode_characters >= 200704L 609 | report( 2011, "__cpp_unicode_characters", true ); 610 | #else 611 | report( 2011, "__cpp_unicode_characters", false ); 612 | #endif 613 | #if __cpp_unicode_literals >= 200710L 614 | report( 2011, "__cpp_unicode_literals", true ); 615 | #else 616 | report( 2011, "__cpp_unicode_literals", false ); 617 | #endif 618 | #if __cpp_user_defined_literals >= 200809L 619 | report( 2011, "__cpp_user_defined_literals", true ); 620 | #else 621 | report( 2011, "__cpp_user_defined_literals", false ); 622 | #endif 623 | #if __cpp_variadic_templates >= 200704L 624 | report( 2011, "__cpp_variadic_templates", true ); 625 | #else 626 | report( 2011, "__cpp_variadic_templates", false ); 627 | #endif 628 | // Library 629 | #if __cpp_lib_adaptor_iterator_pair_constructor >= 202106L 630 | report( 2023, "__cpp_lib_adaptor_iterator_pair_constructor", true ); 631 | #else 632 | report( 2023, "__cpp_lib_adaptor_iterator_pair_constructor", false ); 633 | #endif 634 | #if __cpp_lib_addressof_constexpr >= 201603L 635 | report( 2017, "__cpp_lib_addressof_constexpr", true ); 636 | #else 637 | report( 2017, "__cpp_lib_addressof_constexpr", false ); 638 | #endif 639 | #if __cpp_lib_allocate_at_least >= 202106L 640 | report( 2023, "__cpp_lib_allocate_at_least", true ); 641 | #else 642 | report( 2023, "__cpp_lib_allocate_at_least", false ); 643 | #endif 644 | #if __cpp_lib_allocator_traits_is_always_equal >= 201411L 645 | report( 2017, "__cpp_lib_allocator_traits_is_always_equal", true ); 646 | #else 647 | report( 2017, "__cpp_lib_allocator_traits_is_always_equal", false ); 648 | #endif 649 | #if __cpp_lib_any >= 201606L 650 | report( 2017, "__cpp_lib_any", true ); 651 | #else 652 | report( 2017, "__cpp_lib_any", false ); 653 | #endif 654 | #if __cpp_lib_apply >= 201603L 655 | report( 2017, "__cpp_lib_apply", true ); 656 | #else 657 | report( 2017, "__cpp_lib_apply", false ); 658 | #endif 659 | #if __cpp_lib_array_constexpr >= 201603L 660 | report( 2017, "__cpp_lib_array_constexpr", true ); 661 | #else 662 | report( 2017, "__cpp_lib_array_constexpr", false ); 663 | #endif 664 | #if __cpp_lib_as_const >= 201510L 665 | report( 2017, "__cpp_lib_as_const", true ); 666 | #else 667 | report( 2017, "__cpp_lib_as_const", false ); 668 | #endif 669 | #if __cpp_lib_assume_aligned >= 201811L 670 | report( 2020, "__cpp_lib_assume_aligned", true ); 671 | #else 672 | report( 2020, "__cpp_lib_assume_aligned", false ); 673 | #endif 674 | #if __cpp_lib_atomic_flag_test >= 201907L 675 | report( 2020, "__cpp_lib_atomic_flag_test", true ); 676 | #else 677 | report( 2020, "__cpp_lib_atomic_flag_test", false ); 678 | #endif 679 | #if __cpp_lib_atomic_float >= 201711L 680 | report( 2020, "__cpp_lib_atomic_float", true ); 681 | #else 682 | report( 2020, "__cpp_lib_atomic_float", false ); 683 | #endif 684 | #if __cpp_lib_atomic_is_always_lock_free >= 201603L 685 | report( 2017, "__cpp_lib_atomic_is_always_lock_free", true ); 686 | #else 687 | report( 2017, "__cpp_lib_atomic_is_always_lock_free", false ); 688 | #endif 689 | #if __cpp_lib_atomic_lock_free_type_aliases >= 201907L 690 | report( 2020, "__cpp_lib_atomic_lock_free_type_aliases", true ); 691 | #else 692 | report( 2020, "__cpp_lib_atomic_lock_free_type_aliases", false ); 693 | #endif 694 | #if __cpp_lib_atomic_ref >= 201806L 695 | report( 2020, "__cpp_lib_atomic_ref", true ); 696 | #else 697 | report( 2020, "__cpp_lib_atomic_ref", false ); 698 | #endif 699 | #if __cpp_lib_atomic_shared_ptr >= 201711L 700 | report( 2020, "__cpp_lib_atomic_shared_ptr", true ); 701 | #else 702 | report( 2020, "__cpp_lib_atomic_shared_ptr", false ); 703 | #endif 704 | #if __cpp_lib_atomic_value_initialization >= 201911L 705 | report( 2020, "__cpp_lib_atomic_value_initialization", true ); 706 | #else 707 | report( 2020, "__cpp_lib_atomic_value_initialization", false ); 708 | #endif 709 | #if __cpp_lib_atomic_wait >= 201907L 710 | report( 2020, "__cpp_lib_atomic_wait", true ); 711 | #else 712 | report( 2020, "__cpp_lib_atomic_wait", false ); 713 | #endif 714 | #if __cpp_lib_barrier >= 201907L 715 | report( 2020, "__cpp_lib_barrier", true ); 716 | #else 717 | report( 2020, "__cpp_lib_barrier", false ); 718 | #endif 719 | #if __cpp_lib_bind_front >= 201907L 720 | report( 2020, "__cpp_lib_bind_front", true ); 721 | #else 722 | report( 2020, "__cpp_lib_bind_front", false ); 723 | #endif 724 | #if __cpp_lib_bit_cast >= 201806L 725 | report( 2020, "__cpp_lib_bit_cast", true ); 726 | #else 727 | report( 2020, "__cpp_lib_bit_cast", false ); 728 | #endif 729 | #if __cpp_lib_bitops >= 201907L 730 | report( 2020, "__cpp_lib_bitops", true ); 731 | #else 732 | report( 2020, "__cpp_lib_bitops", false ); 733 | #endif 734 | #if __cpp_lib_bool_constant >= 201505L 735 | report( 2017, "__cpp_lib_bool_constant", true ); 736 | #else 737 | report( 2017, "__cpp_lib_bool_constant", false ); 738 | #endif 739 | #if __cpp_lib_bounded_array_traits >= 201902L 740 | report( 2020, "__cpp_lib_bounded_array_traits", true ); 741 | #else 742 | report( 2020, "__cpp_lib_bounded_array_traits", false ); 743 | #endif 744 | #if __cpp_lib_boyer_moore_searcher >= 201603L 745 | report( 2017, "__cpp_lib_boyer_moore_searcher", true ); 746 | #else 747 | report( 2017, "__cpp_lib_boyer_moore_searcher", false ); 748 | #endif 749 | #if __cpp_lib_byte >= 201603L 750 | report( 2017, "__cpp_lib_byte", true ); 751 | #else 752 | report( 2017, "__cpp_lib_byte", false ); 753 | #endif 754 | #if __cpp_lib_char8_t >= 201907L 755 | report( 2020, "__cpp_lib_char8_t", true ); 756 | #else 757 | report( 2020, "__cpp_lib_char8_t", false ); 758 | #endif 759 | #if __cpp_lib_chrono >= 201510L 760 | report( 2017, "__cpp_lib_chrono", true ); 761 | #else 762 | report( 2017, "__cpp_lib_chrono", false ); 763 | #endif 764 | #if __cpp_lib_chrono_udls >= 201304L 765 | report( 2014, "__cpp_lib_chrono_udls", true ); 766 | #else 767 | report( 2014, "__cpp_lib_chrono_udls", false ); 768 | #endif 769 | #if __cpp_lib_clamp >= 201603L 770 | report( 2017, "__cpp_lib_clamp", true ); 771 | #else 772 | report( 2017, "__cpp_lib_clamp", false ); 773 | #endif 774 | #if __cpp_lib_complex_udls >= 201309L 775 | report( 2014, "__cpp_lib_complex_udls", true ); 776 | #else 777 | report( 2014, "__cpp_lib_complex_udls", false ); 778 | #endif 779 | #if __cpp_lib_concepts >= 202002L 780 | report( 2020, "__cpp_lib_concepts", true ); 781 | #else 782 | report( 2020, "__cpp_lib_concepts", false ); 783 | #endif 784 | #if __cpp_lib_constexpr_algorithms >= 201806L 785 | report( 2020, "__cpp_lib_constexpr_algorithms", true ); 786 | #else 787 | report( 2020, "__cpp_lib_constexpr_algorithms", false ); 788 | #endif 789 | #if __cpp_lib_constexpr_complex >= 201711L 790 | report( 2020, "__cpp_lib_constexpr_complex", true ); 791 | #else 792 | report( 2020, "__cpp_lib_constexpr_complex", false ); 793 | #endif 794 | #if __cpp_lib_constexpr_dynamic_alloc >= 201907L 795 | report( 2020, "__cpp_lib_constexpr_dynamic_alloc", true ); 796 | #else 797 | report( 2020, "__cpp_lib_constexpr_dynamic_alloc", false ); 798 | #endif 799 | #if __cpp_lib_constexpr_functional >= 201907L 800 | report( 2020, "__cpp_lib_constexpr_functional", true ); 801 | #else 802 | report( 2020, "__cpp_lib_constexpr_functional", false ); 803 | #endif 804 | #if __cpp_lib_constexpr_iterator >= 201811L 805 | report( 2020, "__cpp_lib_constexpr_iterator", true ); 806 | #else 807 | report( 2020, "__cpp_lib_constexpr_iterator", false ); 808 | #endif 809 | #if __cpp_lib_constexpr_memory >= 201811L 810 | report( 2020, "__cpp_lib_constexpr_memory", true ); 811 | #else 812 | report( 2020, "__cpp_lib_constexpr_memory", false ); 813 | #endif 814 | #if __cpp_lib_constexpr_numeric >= 201911L 815 | report( 2020, "__cpp_lib_constexpr_numeric", true ); 816 | #else 817 | report( 2020, "__cpp_lib_constexpr_numeric", false ); 818 | #endif 819 | #if __cpp_lib_constexpr_string >= 201907L 820 | report( 2020, "__cpp_lib_constexpr_string", true ); 821 | #else 822 | report( 2020, "__cpp_lib_constexpr_string", false ); 823 | #endif 824 | #if __cpp_lib_constexpr_string_view >= 201811L 825 | report( 2020, "__cpp_lib_constexpr_string_view", true ); 826 | #else 827 | report( 2020, "__cpp_lib_constexpr_string_view", false ); 828 | #endif 829 | #if __cpp_lib_constexpr_tuple >= 201811L 830 | report( 2020, "__cpp_lib_constexpr_tuple", true ); 831 | #else 832 | report( 2020, "__cpp_lib_constexpr_tuple", false ); 833 | #endif 834 | #if __cpp_lib_constexpr_utility >= 201811L 835 | report( 2020, "__cpp_lib_constexpr_utility", true ); 836 | #else 837 | report( 2020, "__cpp_lib_constexpr_utility", false ); 838 | #endif 839 | #if __cpp_lib_constexpr_vector >= 201907L 840 | report( 2020, "__cpp_lib_constexpr_vector", true ); 841 | #else 842 | report( 2020, "__cpp_lib_constexpr_vector", false ); 843 | #endif 844 | #if __cpp_lib_coroutine >= 201902L 845 | report( 2020, "__cpp_lib_coroutine", true ); 846 | #else 847 | report( 2020, "__cpp_lib_coroutine", false ); 848 | #endif 849 | #if __cpp_lib_destroying_delete >= 201806L 850 | report( 2020, "__cpp_lib_destroying_delete", true ); 851 | #else 852 | report( 2020, "__cpp_lib_destroying_delete", false ); 853 | #endif 854 | #if __cpp_lib_enable_shared_from_this >= 201603L 855 | report( 2017, "__cpp_lib_enable_shared_from_this", true ); 856 | #else 857 | report( 2017, "__cpp_lib_enable_shared_from_this", false ); 858 | #endif 859 | #if __cpp_lib_endian >= 201907L 860 | report( 2020, "__cpp_lib_endian", true ); 861 | #else 862 | report( 2020, "__cpp_lib_endian", false ); 863 | #endif 864 | #if __cpp_lib_erase_if >= 202002L 865 | report( 2020, "__cpp_lib_erase_if", true ); 866 | #else 867 | report( 2020, "__cpp_lib_erase_if", false ); 868 | #endif 869 | #if __cpp_lib_exchange_function >= 201304L 870 | report( 2014, "__cpp_lib_exchange_function", true ); 871 | #else 872 | report( 2014, "__cpp_lib_exchange_function", false ); 873 | #endif 874 | #if __cpp_lib_execution >= 201603L 875 | report( 2017, "__cpp_lib_execution", true ); 876 | #else 877 | report( 2017, "__cpp_lib_execution", false ); 878 | #endif 879 | #if __cpp_lib_filesystem >= 201703L 880 | report( 2017, "__cpp_lib_filesystem", true ); 881 | #else 882 | report( 2017, "__cpp_lib_filesystem", false ); 883 | #endif 884 | #if __cpp_lib_format >= 201907L 885 | report( 2020, "__cpp_lib_format", true ); 886 | #else 887 | report( 2020, "__cpp_lib_format", false ); 888 | #endif 889 | #if __cpp_lib_gcd_lcm >= 201606L 890 | report( 2017, "__cpp_lib_gcd_lcm", true ); 891 | #else 892 | report( 2017, "__cpp_lib_gcd_lcm", false ); 893 | #endif 894 | #if __cpp_lib_generic_associative_lookup >= 201304L 895 | report( 2014, "__cpp_lib_generic_associative_lookup", true ); 896 | #else 897 | report( 2014, "__cpp_lib_generic_associative_lookup", false ); 898 | #endif 899 | #if __cpp_lib_generic_unordered_lookup >= 201811L 900 | report( 2020, "__cpp_lib_generic_unordered_lookup", true ); 901 | #else 902 | report( 2020, "__cpp_lib_generic_unordered_lookup", false ); 903 | #endif 904 | #if __cpp_lib_hardware_interference_size >= 201703L 905 | report( 2017, "__cpp_lib_hardware_interference_size", true ); 906 | #else 907 | report( 2017, "__cpp_lib_hardware_interference_size", false ); 908 | #endif 909 | #if __cpp_lib_has_unique_object_representations >= 201606L 910 | report( 2017, "__cpp_lib_has_unique_object_representations", true ); 911 | #else 912 | report( 2017, "__cpp_lib_has_unique_object_representations", false ); 913 | #endif 914 | #if __cpp_lib_hypot >= 201603L 915 | report( 2017, "__cpp_lib_hypot", true ); 916 | #else 917 | report( 2017, "__cpp_lib_hypot", false ); 918 | #endif 919 | #if __cpp_lib_incomplete_container_elements >= 201505L 920 | report( 2017, "__cpp_lib_incomplete_container_elements", true ); 921 | #else 922 | report( 2017, "__cpp_lib_incomplete_container_elements", false ); 923 | #endif 924 | #if __cpp_lib_int_pow2 >= 202002L 925 | report( 2020, "__cpp_lib_int_pow2", true ); 926 | #else 927 | report( 2020, "__cpp_lib_int_pow2", false ); 928 | #endif 929 | #if __cpp_lib_integer_comparison_functions >= 202002L 930 | report( 2020, "__cpp_lib_integer_comparison_functions", true ); 931 | #else 932 | report( 2020, "__cpp_lib_integer_comparison_functions", false ); 933 | #endif 934 | #if __cpp_lib_integer_sequence >= 201304L 935 | report( 2014, "__cpp_lib_integer_sequence", true ); 936 | #else 937 | report( 2014, "__cpp_lib_integer_sequence", false ); 938 | #endif 939 | #if __cpp_lib_integral_constant_callable >= 201304L 940 | report( 2014, "__cpp_lib_integral_constant_callable", true ); 941 | #else 942 | report( 2014, "__cpp_lib_integral_constant_callable", false ); 943 | #endif 944 | #if __cpp_lib_interpolate >= 201902L 945 | report( 2020, "__cpp_lib_interpolate", true ); 946 | #else 947 | report( 2020, "__cpp_lib_interpolate", false ); 948 | #endif 949 | #if __cpp_lib_invoke >= 201411L 950 | report( 2017, "__cpp_lib_invoke", true ); 951 | #else 952 | report( 2017, "__cpp_lib_invoke", false ); 953 | #endif 954 | #if __cpp_lib_invoke_r >= 202106L 955 | report( 2023, "__cpp_lib_invoke_r", true ); 956 | #else 957 | report( 2023, "__cpp_lib_invoke_r", false ); 958 | #endif 959 | #if __cpp_lib_is_aggregate >= 201703L 960 | report( 2017, "__cpp_lib_is_aggregate", true ); 961 | #else 962 | report( 2017, "__cpp_lib_is_aggregate", false ); 963 | #endif 964 | #if __cpp_lib_is_constant_evaluated >= 201811L 965 | report( 2020, "__cpp_lib_is_constant_evaluated", true ); 966 | #else 967 | report( 2020, "__cpp_lib_is_constant_evaluated", false ); 968 | #endif 969 | #if __cpp_lib_is_final >= 201402L 970 | report( 2014, "__cpp_lib_is_final", true ); 971 | #else 972 | report( 2014, "__cpp_lib_is_final", false ); 973 | #endif 974 | #if __cpp_lib_is_invocable >= 201703L 975 | report( 2017, "__cpp_lib_is_invocable", true ); 976 | #else 977 | report( 2017, "__cpp_lib_is_invocable", false ); 978 | #endif 979 | #if __cpp_lib_is_layout_compatible >= 201907L 980 | report( 2020, "__cpp_lib_is_layout_compatible", true ); 981 | #else 982 | report( 2020, "__cpp_lib_is_layout_compatible", false ); 983 | #endif 984 | #if __cpp_lib_is_nothrow_convertible >= 201806L 985 | report( 2020, "__cpp_lib_is_nothrow_convertible", true ); 986 | #else 987 | report( 2020, "__cpp_lib_is_nothrow_convertible", false ); 988 | #endif 989 | #if __cpp_lib_is_null_pointer >= 201309L 990 | report( 2014, "__cpp_lib_is_null_pointer", true ); 991 | #else 992 | report( 2014, "__cpp_lib_is_null_pointer", false ); 993 | #endif 994 | #if __cpp_lib_is_pointer_interconvertible >= 201907L 995 | report( 2020, "__cpp_lib_is_pointer_interconvertible", true ); 996 | #else 997 | report( 2020, "__cpp_lib_is_pointer_interconvertible", false ); 998 | #endif 999 | #if __cpp_lib_is_scoped_enum >= 202011L 1000 | report( 2023, "__cpp_lib_is_scoped_enum", true ); 1001 | #else 1002 | report( 2023, "__cpp_lib_is_scoped_enum", false ); 1003 | #endif 1004 | #if __cpp_lib_is_swappable >= 201603L 1005 | report( 2017, "__cpp_lib_is_swappable", true ); 1006 | #else 1007 | report( 2017, "__cpp_lib_is_swappable", false ); 1008 | #endif 1009 | #if __cpp_lib_jthread >= 201911L 1010 | report( 2020, "__cpp_lib_jthread", true ); 1011 | #else 1012 | report( 2020, "__cpp_lib_jthread", false ); 1013 | #endif 1014 | #if __cpp_lib_latch >= 201907L 1015 | report( 2020, "__cpp_lib_latch", true ); 1016 | #else 1017 | report( 2020, "__cpp_lib_latch", false ); 1018 | #endif 1019 | #if __cpp_lib_launder >= 201606L 1020 | report( 2017, "__cpp_lib_launder", true ); 1021 | #else 1022 | report( 2017, "__cpp_lib_launder", false ); 1023 | #endif 1024 | #if __cpp_lib_list_remove_return_type >= 201806L 1025 | report( 2020, "__cpp_lib_list_remove_return_type", true ); 1026 | #else 1027 | report( 2020, "__cpp_lib_list_remove_return_type", false ); 1028 | #endif 1029 | #if __cpp_lib_logical_traits >= 201510L 1030 | report( 2017, "__cpp_lib_logical_traits", true ); 1031 | #else 1032 | report( 2017, "__cpp_lib_logical_traits", false ); 1033 | #endif 1034 | #if __cpp_lib_make_from_tuple >= 201606L 1035 | report( 2017, "__cpp_lib_make_from_tuple", true ); 1036 | #else 1037 | report( 2017, "__cpp_lib_make_from_tuple", false ); 1038 | #endif 1039 | #if __cpp_lib_make_reverse_iterator >= 201402L 1040 | report( 2014, "__cpp_lib_make_reverse_iterator", true ); 1041 | #else 1042 | report( 2014, "__cpp_lib_make_reverse_iterator", false ); 1043 | #endif 1044 | #if __cpp_lib_make_unique >= 201304L 1045 | report( 2014, "__cpp_lib_make_unique", true ); 1046 | #else 1047 | report( 2014, "__cpp_lib_make_unique", false ); 1048 | #endif 1049 | #if __cpp_lib_map_try_emplace >= 201411L 1050 | report( 2017, "__cpp_lib_map_try_emplace", true ); 1051 | #else 1052 | report( 2017, "__cpp_lib_map_try_emplace", false ); 1053 | #endif 1054 | #if __cpp_lib_math_constants >= 201907L 1055 | report( 2020, "__cpp_lib_math_constants", true ); 1056 | #else 1057 | report( 2020, "__cpp_lib_math_constants", false ); 1058 | #endif 1059 | #if __cpp_lib_math_special_functions >= 201603L 1060 | report( 2017, "__cpp_lib_math_special_functions", true ); 1061 | #else 1062 | report( 2017, "__cpp_lib_math_special_functions", false ); 1063 | #endif 1064 | #if __cpp_lib_memory_resource >= 201603L 1065 | report( 2017, "__cpp_lib_memory_resource", true ); 1066 | #else 1067 | report( 2017, "__cpp_lib_memory_resource", false ); 1068 | #endif 1069 | #if __cpp_lib_monadic_optional >= 202110L 1070 | report( 2023, "__cpp_lib_monadic_optional", true ); 1071 | #else 1072 | report( 2023, "__cpp_lib_monadic_optional", false ); 1073 | #endif 1074 | #if __cpp_lib_move_only_function >= 202110L 1075 | report( 2023, "__cpp_lib_move_only_function", true ); 1076 | #else 1077 | report( 2023, "__cpp_lib_move_only_function", false ); 1078 | #endif 1079 | #if __cpp_lib_node_extract >= 201606L 1080 | report( 2017, "__cpp_lib_node_extract", true ); 1081 | #else 1082 | report( 2017, "__cpp_lib_node_extract", false ); 1083 | #endif 1084 | #if __cpp_lib_nonmember_container_access >= 201411L 1085 | report( 2017, "__cpp_lib_nonmember_container_access", true ); 1086 | #else 1087 | report( 2017, "__cpp_lib_nonmember_container_access", false ); 1088 | #endif 1089 | #if __cpp_lib_not_fn >= 201603L 1090 | report( 2017, "__cpp_lib_not_fn", true ); 1091 | #else 1092 | report( 2017, "__cpp_lib_not_fn", false ); 1093 | #endif 1094 | #if __cpp_lib_null_iterators >= 201304L 1095 | report( 2014, "__cpp_lib_null_iterators", true ); 1096 | #else 1097 | report( 2014, "__cpp_lib_null_iterators", false ); 1098 | #endif 1099 | #if __cpp_lib_optional >= 201606L 1100 | report( 2017, "__cpp_lib_optional", true ); 1101 | #else 1102 | report( 2017, "__cpp_lib_optional", false ); 1103 | #endif 1104 | #if __cpp_lib_out_ptr >= 202106L 1105 | report( 2023, "__cpp_lib_out_ptr", true ); 1106 | #else 1107 | report( 2023, "__cpp_lib_out_ptr", false ); 1108 | #endif 1109 | #if __cpp_lib_parallel_algorithm >= 201603L 1110 | report( 2017, "__cpp_lib_parallel_algorithm", true ); 1111 | #else 1112 | report( 2017, "__cpp_lib_parallel_algorithm", false ); 1113 | #endif 1114 | #if __cpp_lib_polymorphic_allocator >= 201902L 1115 | report( 2020, "__cpp_lib_polymorphic_allocator", true ); 1116 | #else 1117 | report( 2020, "__cpp_lib_polymorphic_allocator", false ); 1118 | #endif 1119 | #if __cpp_lib_quoted_string_io >= 201304L 1120 | report( 2014, "__cpp_lib_quoted_string_io", true ); 1121 | #else 1122 | report( 2014, "__cpp_lib_quoted_string_io", false ); 1123 | #endif 1124 | #if __cpp_lib_ranges >= 201911L 1125 | report( 2020, "__cpp_lib_ranges", true ); 1126 | #else 1127 | report( 2020, "__cpp_lib_ranges", false ); 1128 | #endif 1129 | #if __cpp_lib_ranges_starts_ends_with >= 202106L 1130 | report( 2023, "__cpp_lib_ranges_starts_ends_with", true ); 1131 | #else 1132 | report( 2023, "__cpp_lib_ranges_starts_ends_with", false ); 1133 | #endif 1134 | #if __cpp_lib_ranges_zip >= 202110L 1135 | report( 2023, "__cpp_lib_ranges_zip", true ); 1136 | #else 1137 | report( 2023, "__cpp_lib_ranges_zip", false ); 1138 | #endif 1139 | #if __cpp_lib_raw_memory_algorithms >= 201606L 1140 | report( 2017, "__cpp_lib_raw_memory_algorithms", true ); 1141 | #else 1142 | report( 2017, "__cpp_lib_raw_memory_algorithms", false ); 1143 | #endif 1144 | #if __cpp_lib_remove_cvref >= 201711L 1145 | report( 2020, "__cpp_lib_remove_cvref", true ); 1146 | #else 1147 | report( 2020, "__cpp_lib_remove_cvref", false ); 1148 | #endif 1149 | #if __cpp_lib_result_of_sfinae >= 201210L 1150 | report( 2014, "__cpp_lib_result_of_sfinae", true ); 1151 | #else 1152 | report( 2014, "__cpp_lib_result_of_sfinae", false ); 1153 | #endif 1154 | #if __cpp_lib_robust_nonmodifying_seq_ops >= 201304L 1155 | report( 2014, "__cpp_lib_robust_nonmodifying_seq_ops", true ); 1156 | #else 1157 | report( 2014, "__cpp_lib_robust_nonmodifying_seq_ops", false ); 1158 | #endif 1159 | #if __cpp_lib_sample >= 201603L 1160 | report( 2017, "__cpp_lib_sample", true ); 1161 | #else 1162 | report( 2017, "__cpp_lib_sample", false ); 1163 | #endif 1164 | #if __cpp_lib_scoped_lock >= 201703L 1165 | report( 2017, "__cpp_lib_scoped_lock", true ); 1166 | #else 1167 | report( 2017, "__cpp_lib_scoped_lock", false ); 1168 | #endif 1169 | #if __cpp_lib_semaphore >= 201907L 1170 | report( 2020, "__cpp_lib_semaphore", true ); 1171 | #else 1172 | report( 2020, "__cpp_lib_semaphore", false ); 1173 | #endif 1174 | #if __cpp_lib_shared_mutex >= 201505L 1175 | report( 2017, "__cpp_lib_shared_mutex", true ); 1176 | #else 1177 | report( 2017, "__cpp_lib_shared_mutex", false ); 1178 | #endif 1179 | #if __cpp_lib_shared_ptr_arrays >= 201611L 1180 | report( 2017, "__cpp_lib_shared_ptr_arrays", true ); 1181 | #else 1182 | report( 2017, "__cpp_lib_shared_ptr_arrays", false ); 1183 | #endif 1184 | #if __cpp_lib_shared_ptr_weak_type >= 201606L 1185 | report( 2017, "__cpp_lib_shared_ptr_weak_type", true ); 1186 | #else 1187 | report( 2017, "__cpp_lib_shared_ptr_weak_type", false ); 1188 | #endif 1189 | #if __cpp_lib_shared_timed_mutex >= 201402L 1190 | report( 2014, "__cpp_lib_shared_timed_mutex", true ); 1191 | #else 1192 | report( 2014, "__cpp_lib_shared_timed_mutex", false ); 1193 | #endif 1194 | #if __cpp_lib_shift >= 201806L 1195 | report( 2020, "__cpp_lib_shift", true ); 1196 | #else 1197 | report( 2020, "__cpp_lib_shift", false ); 1198 | #endif 1199 | #if __cpp_lib_smart_ptr_for_overwrite >= 202002L 1200 | report( 2020, "__cpp_lib_smart_ptr_for_overwrite", true ); 1201 | #else 1202 | report( 2020, "__cpp_lib_smart_ptr_for_overwrite", false ); 1203 | #endif 1204 | #if __cpp_lib_source_location >= 201907L 1205 | report( 2020, "__cpp_lib_source_location", true ); 1206 | #else 1207 | report( 2020, "__cpp_lib_source_location", false ); 1208 | #endif 1209 | #if __cpp_lib_span >= 202002L 1210 | report( 2020, "__cpp_lib_span", true ); 1211 | #else 1212 | report( 2020, "__cpp_lib_span", false ); 1213 | #endif 1214 | #if __cpp_lib_spanstream >= 202106L 1215 | report( 2023, "__cpp_lib_spanstream", true ); 1216 | #else 1217 | report( 2023, "__cpp_lib_spanstream", false ); 1218 | #endif 1219 | #if __cpp_lib_ssize >= 201902L 1220 | report( 2020, "__cpp_lib_ssize", true ); 1221 | #else 1222 | report( 2020, "__cpp_lib_ssize", false ); 1223 | #endif 1224 | #if __cpp_lib_starts_ends_with >= 201711L 1225 | report( 2020, "__cpp_lib_starts_ends_with", true ); 1226 | #else 1227 | report( 2020, "__cpp_lib_starts_ends_with", false ); 1228 | #endif 1229 | #if __cpp_lib_string_udls >= 201304L 1230 | report( 2014, "__cpp_lib_string_udls", true ); 1231 | #else 1232 | report( 2014, "__cpp_lib_string_udls", false ); 1233 | #endif 1234 | #if __cpp_lib_string_view >= 201606L 1235 | report( 2017, "__cpp_lib_string_view", true ); 1236 | #else 1237 | report( 2017, "__cpp_lib_string_view", false ); 1238 | #endif 1239 | #if __cpp_lib_syncbuf >= 201803L 1240 | report( 2020, "__cpp_lib_syncbuf", true ); 1241 | #else 1242 | report( 2020, "__cpp_lib_syncbuf", false ); 1243 | #endif 1244 | #if __cpp_lib_three_way_comparison >= 201907L 1245 | report( 2020, "__cpp_lib_three_way_comparison", true ); 1246 | #else 1247 | report( 2020, "__cpp_lib_three_way_comparison", false ); 1248 | #endif 1249 | #if __cpp_lib_to_address >= 201711L 1250 | report( 2020, "__cpp_lib_to_address", true ); 1251 | #else 1252 | report( 2020, "__cpp_lib_to_address", false ); 1253 | #endif 1254 | #if __cpp_lib_to_array >= 201907L 1255 | report( 2020, "__cpp_lib_to_array", true ); 1256 | #else 1257 | report( 2020, "__cpp_lib_to_array", false ); 1258 | #endif 1259 | #if __cpp_lib_to_chars >= 201611L 1260 | report( 2017, "__cpp_lib_to_chars", true ); 1261 | #else 1262 | report( 2017, "__cpp_lib_to_chars", false ); 1263 | #endif 1264 | #if __cpp_lib_transformation_trait_aliases >= 201304L 1265 | report( 2014, "__cpp_lib_transformation_trait_aliases", true ); 1266 | #else 1267 | report( 2014, "__cpp_lib_transformation_trait_aliases", false ); 1268 | #endif 1269 | #if __cpp_lib_transparent_operators >= 201210L 1270 | report( 2014, "__cpp_lib_transparent_operators", true ); 1271 | #else 1272 | report( 2014, "__cpp_lib_transparent_operators", false ); 1273 | #endif 1274 | #if __cpp_lib_tuple_element_t >= 201402L 1275 | report( 2014, "__cpp_lib_tuple_element_t", true ); 1276 | #else 1277 | report( 2014, "__cpp_lib_tuple_element_t", false ); 1278 | #endif 1279 | #if __cpp_lib_tuples_by_type >= 201304L 1280 | report( 2014, "__cpp_lib_tuples_by_type", true ); 1281 | #else 1282 | report( 2014, "__cpp_lib_tuples_by_type", false ); 1283 | #endif 1284 | #if __cpp_lib_type_identity >= 201806L 1285 | report( 2020, "__cpp_lib_type_identity", true ); 1286 | #else 1287 | report( 2020, "__cpp_lib_type_identity", false ); 1288 | #endif 1289 | #if __cpp_lib_type_trait_variable_templates >= 201510L 1290 | report( 2017, "__cpp_lib_type_trait_variable_templates", true ); 1291 | #else 1292 | report( 2017, "__cpp_lib_type_trait_variable_templates", false ); 1293 | #endif 1294 | #if __cpp_lib_uncaught_exceptions >= 201411L 1295 | report( 2017, "__cpp_lib_uncaught_exceptions", true ); 1296 | #else 1297 | report( 2017, "__cpp_lib_uncaught_exceptions", false ); 1298 | #endif 1299 | #if __cpp_lib_unordered_map_try_emplace >= 201411L 1300 | report( 2017, "__cpp_lib_unordered_map_try_emplace", true ); 1301 | #else 1302 | report( 2017, "__cpp_lib_unordered_map_try_emplace", false ); 1303 | #endif 1304 | #if __cpp_lib_unwrap_ref >= 201811L 1305 | report( 2020, "__cpp_lib_unwrap_ref", true ); 1306 | #else 1307 | report( 2020, "__cpp_lib_unwrap_ref", false ); 1308 | #endif 1309 | #if __cpp_lib_variant >= 201606L 1310 | report( 2017, "__cpp_lib_variant", true ); 1311 | #else 1312 | report( 2017, "__cpp_lib_variant", false ); 1313 | #endif 1314 | #if __cpp_lib_void_t >= 201411L 1315 | report( 2017, "__cpp_lib_void_t", true ); 1316 | #else 1317 | report( 2017, "__cpp_lib_void_t", false ); 1318 | #endif 1319 | #if __cpp_named_character_escape >= 202207L 1320 | report( 2023, "__cpp_named_character_escape", true ); 1321 | #else 1322 | report( 2023, "__cpp_named_character_escape", false ); 1323 | #endif 1324 | #if __cpp_auto_cast >= 202110L 1325 | report( 2023, "__cpp_auto_cast", true ); 1326 | #else 1327 | report( 2023, "__cpp_auto_cast", false ); 1328 | #endif 1329 | #if __cpp_lib_adaptor_iterator_pair_constructor >= 202106L 1330 | report( 2023, "__cpp_lib_adaptor_iterator_pair_constructor", true ); 1331 | #else 1332 | report( 2023, "__cpp_lib_adaptor_iterator_pair_constructor", false ); 1333 | #endif 1334 | 1335 | #if __cpp_lib_adaptor_iterator_pair_constructor >= 202106L 1336 | report( 2023, "__cpp_lib_adaptor_iterator_pair_constructor", true ); 1337 | #else 1338 | report( 2023, "__cpp_lib_adaptor_iterator_pair_constructor", false ); 1339 | #endif 1340 | #if __cpp_lib_algorithm_iterator_requirements >= 202207L 1341 | report( 2023, "__cpp_lib_algorithm_iterator_requirements", true ); 1342 | #else 1343 | report( 2023, "__cpp_lib_algorithm_iterator_requirements", false ); 1344 | #endif 1345 | #if __cpp_lib_allocate_at_least >= 202302L 1346 | report( 2023, "__cpp_lib_allocate_at_least", true ); 1347 | #else 1348 | report( 2023, "__cpp_lib_allocate_at_least", false ); 1349 | #endif 1350 | #if __cpp_lib_associative_heterogeneous_erasure >= 202110L 1351 | report( 2023, "__cpp_lib_associative_heterogeneous_erasure", true ); 1352 | #else 1353 | report( 2023, "__cpp_lib_associative_heterogeneous_erasure", false ); 1354 | #endif 1355 | #if __cpp_lib_barrier >= 202302L 1356 | report( 2023, "__cpp_lib_barrier", true ); 1357 | #else 1358 | report( 2023, "__cpp_lib_barrier", false ); 1359 | #endif 1360 | #if __cpp_lib_bind_back >= 202202L 1361 | report( 2023, "__cpp_lib_bind_back", true ); 1362 | #else 1363 | report( 2023, "__cpp_lib_bind_back", false ); 1364 | #endif 1365 | #if __cpp_lib_byteswap >= 202110L 1366 | report( 2023, "__cpp_lib_byteswap", true ); 1367 | #else 1368 | report( 2023, "__cpp_lib_byteswap", false ); 1369 | #endif 1370 | #if __cpp_lib_common_reference >= 202302L 1371 | report( 2023, "__cpp_lib_common_reference", true ); 1372 | #else 1373 | report( 2023, "__cpp_lib_common_reference", false ); 1374 | #endif 1375 | #if __cpp_lib_common_reference_wrapper >= 202302L 1376 | report( 2023, "__cpp_lib_common_reference_wrapper", true ); 1377 | #else 1378 | report( 2023, "__cpp_lib_common_reference_wrapper", false ); 1379 | #endif 1380 | #if __cpp_lib_concepts >= 202207L 1381 | report( 2023, "__cpp_lib_concepts", true ); 1382 | #else 1383 | report( 2023, "__cpp_lib_concepts", false ); 1384 | #endif 1385 | #if __cpp_lib_constexpr_bitset >= 202207L 1386 | report( 2023, "__cpp_lib_constexpr_bitset", true ); 1387 | #else 1388 | report( 2023, "__cpp_lib_constexpr_bitset", false ); 1389 | #endif 1390 | #if __cpp_lib_constexpr_charconv >= 202207L 1391 | report( 2023, "__cpp_lib_constexpr_charconv", true ); 1392 | #else 1393 | report( 2023, "__cpp_lib_constexpr_charconv", false ); 1394 | #endif 1395 | #if __cpp_lib_constexpr_cmath >= 202202L 1396 | report( 2023, "__cpp_lib_constexpr_cmath", true ); 1397 | #else 1398 | report( 2023, "__cpp_lib_constexpr_cmath", false ); 1399 | #endif 1400 | #if __cpp_lib_constexpr_memory >= 202202L 1401 | report( 2023, "__cpp_lib_constexpr_memory", true ); 1402 | #else 1403 | report( 2023, "__cpp_lib_constexpr_memory", false ); 1404 | #endif 1405 | #if __cpp_lib_constexpr_typeinfo >= 202106L 1406 | report( 2023, "__cpp_lib_constexpr_typeinfo", true ); 1407 | #else 1408 | report( 2023, "__cpp_lib_constexpr_typeinfo", false ); 1409 | #endif 1410 | #if __cpp_lib_containers_ranges >= 202202L 1411 | report( 2023, "__cpp_lib_containers_ranges", true ); 1412 | #else 1413 | report( 2023, "__cpp_lib_containers_ranges", false ); 1414 | #endif 1415 | #if __cpp_lib_expected >= 202211L 1416 | report( 2023, "__cpp_lib_expected", true ); 1417 | #else 1418 | report( 2023, "__cpp_lib_expected", false ); 1419 | #endif 1420 | #if __cpp_lib_flat_map >= 202207L 1421 | report( 2023, "__cpp_lib_flat_map", true ); 1422 | #else 1423 | report( 2023, "__cpp_lib_flat_map", false ); 1424 | #endif 1425 | #if __cpp_lib_flat_set >= 202207L 1426 | report( 2023, "__cpp_lib_flat_set", true ); 1427 | #else 1428 | report( 2023, "__cpp_lib_flat_set", false ); 1429 | #endif 1430 | #if __cpp_lib_format >= 202207L 1431 | report( 2023, "__cpp_lib_format", true ); 1432 | #else 1433 | report( 2023, "__cpp_lib_format", false ); 1434 | #endif 1435 | #if __cpp_lib_format_ranges >= 202207L 1436 | report( 2023, "__cpp_lib_format_ranges", true ); 1437 | #else 1438 | report( 2023, "__cpp_lib_format_ranges", false ); 1439 | #endif 1440 | #if __cpp_lib_formatters >= 202302L 1441 | report( 2023, "__cpp_lib_formatters", true ); 1442 | #else 1443 | report( 2023, "__cpp_lib_formatters", false ); 1444 | #endif 1445 | #if __cpp_lib_forward_like >= 202207L 1446 | report( 2023, "__cpp_lib_forward_like", true ); 1447 | #else 1448 | report( 2023, "__cpp_lib_forward_like", false ); 1449 | #endif 1450 | #if __cpp_lib_generator >= 202207L 1451 | report( 2023, "__cpp_lib_generator", true ); 1452 | #else 1453 | report( 2023, "__cpp_lib_generator", false ); 1454 | #endif 1455 | #if __cpp_lib_ios_noreplace >= 202207L 1456 | report( 2023, "__cpp_lib_ios_noreplace", true ); 1457 | #else 1458 | report( 2023, "__cpp_lib_ios_noreplace", false ); 1459 | #endif 1460 | #if __cpp_lib_is_implicit_lifetime >= 202302L 1461 | report( 2023, "__cpp_lib_is_implicit_lifetime", true ); 1462 | #else 1463 | report( 2023, "__cpp_lib_is_implicit_lifetime", false ); 1464 | #endif 1465 | #if __cpp_lib_mdspan >= 202207L 1466 | report( 2023, "__cpp_lib_mdspan", true ); 1467 | #else 1468 | report( 2023, "__cpp_lib_mdspan", false ); 1469 | #endif 1470 | #if __cpp_lib_modules >= 202207L 1471 | report( 2023, "__cpp_lib_modules", true ); 1472 | #else 1473 | report( 2023, "__cpp_lib_modules", false ); 1474 | #endif 1475 | #if __cpp_lib_move_iterator_concept >= 202207L 1476 | report( 2023, "__cpp_lib_move_iterator_concept", true ); 1477 | #else 1478 | report( 2023, "__cpp_lib_move_iterator_concept", false ); 1479 | #endif 1480 | #if __cpp_lib_optional >= 202110L 1481 | report( 2023, "__cpp_lib_optional", true ); 1482 | #else 1483 | report( 2023, "__cpp_lib_optional", false ); 1484 | #endif 1485 | #if __cpp_lib_print >= 202207L 1486 | report( 2023, "__cpp_lib_print", true ); 1487 | #else 1488 | report( 2023, "__cpp_lib_print", false ); 1489 | #endif 1490 | #if __cpp_lib_ranges >= 202202L 1491 | report( 2023, "__cpp_lib_ranges", true ); 1492 | #else 1493 | report( 2023, "__cpp_lib_ranges", false ); 1494 | #endif 1495 | #if __cpp_lib_ranges >= 202207L 1496 | report( 2023, "__cpp_lib_ranges", true ); 1497 | #else 1498 | report( 2023, "__cpp_lib_ranges", false ); 1499 | #endif 1500 | #if __cpp_lib_ranges >= 202211L 1501 | report( 2023, "__cpp_lib_ranges", true ); 1502 | #else 1503 | report( 2023, "__cpp_lib_ranges", false ); 1504 | #endif 1505 | #if __cpp_lib_ranges >= 202302L 1506 | report( 2023, "__cpp_lib_ranges", true ); 1507 | #else 1508 | report( 2023, "__cpp_lib_ranges", false ); 1509 | #endif 1510 | #if __cpp_lib_ranges_as_const >= 202207L 1511 | report( 2023, "__cpp_lib_ranges_as_const", true ); 1512 | #else 1513 | report( 2023, "__cpp_lib_ranges_as_const", false ); 1514 | #endif 1515 | #if __cpp_lib_ranges_as_rvalue >= 202207L 1516 | report( 2023, "__cpp_lib_ranges_as_rvalue", true ); 1517 | #else 1518 | report( 2023, "__cpp_lib_ranges_as_rvalue", false ); 1519 | #endif 1520 | #if __cpp_lib_ranges_cartesian_product >= 202207L 1521 | report( 2023, "__cpp_lib_ranges_cartesian_product", true ); 1522 | #else 1523 | report( 2023, "__cpp_lib_ranges_cartesian_product", false ); 1524 | #endif 1525 | #if __cpp_lib_ranges_chunk >= 202202L 1526 | report( 2023, "__cpp_lib_ranges_chunk", true ); 1527 | #else 1528 | report( 2023, "__cpp_lib_ranges_chunk", false ); 1529 | #endif 1530 | #if __cpp_lib_ranges_chunk_by >= 202202L 1531 | report( 2023, "__cpp_lib_ranges_chunk_by", true ); 1532 | #else 1533 | report( 2023, "__cpp_lib_ranges_chunk_by", false ); 1534 | #endif 1535 | #if __cpp_lib_ranges_contains >= 202207L 1536 | report( 2023, "__cpp_lib_ranges_contains", true ); 1537 | #else 1538 | report( 2023, "__cpp_lib_ranges_contains", false ); 1539 | #endif 1540 | #if __cpp_lib_ranges_enumerate >= 202302L 1541 | report( 2023, "__cpp_lib_ranges_enumerate", true ); 1542 | #else 1543 | report( 2023, "__cpp_lib_ranges_enumerate", false ); 1544 | #endif 1545 | #if __cpp_lib_ranges_find_last >= 202207L 1546 | report( 2023, "__cpp_lib_ranges_find_last", true ); 1547 | #else 1548 | report( 2023, "__cpp_lib_ranges_find_last", false ); 1549 | #endif 1550 | #if __cpp_lib_ranges_fold >= 202207L 1551 | report( 2023, "__cpp_lib_ranges_fold", true ); 1552 | #else 1553 | report( 2023, "__cpp_lib_ranges_fold", false ); 1554 | #endif 1555 | #if __cpp_lib_ranges_iota >= 202202L 1556 | report( 2023, "__cpp_lib_ranges_iota", true ); 1557 | #else 1558 | report( 2023, "__cpp_lib_ranges_iota", false ); 1559 | #endif 1560 | #if __cpp_lib_ranges_join_with >= 202202L 1561 | report( 2023, "__cpp_lib_ranges_join_with", true ); 1562 | #else 1563 | report( 2023, "__cpp_lib_ranges_join_with", false ); 1564 | #endif 1565 | #if __cpp_lib_ranges_repeat >= 202207L 1566 | report( 2023, "__cpp_lib_ranges_repeat", true ); 1567 | #else 1568 | report( 2023, "__cpp_lib_ranges_repeat", false ); 1569 | #endif 1570 | #if __cpp_lib_ranges_slide >= 202202L 1571 | report( 2023, "__cpp_lib_ranges_slide", true ); 1572 | #else 1573 | report( 2023, "__cpp_lib_ranges_slide", false ); 1574 | #endif 1575 | #if __cpp_lib_ranges_stride >= 202207L 1576 | report( 2023, "__cpp_lib_ranges_stride", true ); 1577 | #else 1578 | report( 2023, "__cpp_lib_ranges_stride", false ); 1579 | #endif 1580 | #if __cpp_lib_ranges_to_container >= 202202L 1581 | report( 2023, "__cpp_lib_ranges_to_container", true ); 1582 | #else 1583 | report( 2023, "__cpp_lib_ranges_to_container", false ); 1584 | #endif 1585 | #if __cpp_lib_reference_from_temporary >= 202202L 1586 | report( 2023, "__cpp_lib_reference_from_temporary", true ); 1587 | #else 1588 | report( 2023, "__cpp_lib_reference_from_temporary", false ); 1589 | #endif 1590 | #if __cpp_lib_shift >= 202202L 1591 | report( 2023, "__cpp_lib_shift", true ); 1592 | #else 1593 | report( 2023, "__cpp_lib_shift", false ); 1594 | #endif 1595 | #if __cpp_lib_stacktrace >= 202011L 1596 | report( 2023, "__cpp_lib_stacktrace", true ); 1597 | #else 1598 | report( 2023, "__cpp_lib_stacktrace", false ); 1599 | #endif 1600 | #if __cpp_lib_start_lifetime_as >= 202207L 1601 | report( 2023, "__cpp_lib_start_lifetime_as", true ); 1602 | #else 1603 | report( 2023, "__cpp_lib_start_lifetime_as", false ); 1604 | #endif 1605 | #if __cpp_lib_stdatomic_h >= 202011L 1606 | report( 2023, "__cpp_lib_stdatomic_h", true ); 1607 | #else 1608 | report( 2023, "__cpp_lib_stdatomic_h", false ); 1609 | #endif 1610 | #if __cpp_lib_string_contains >= 202011L 1611 | report( 2023, "__cpp_lib_string_contains", true ); 1612 | #else 1613 | report( 2023, "__cpp_lib_string_contains", false ); 1614 | #endif 1615 | #if __cpp_lib_string_resize_and_overwrite >= 202110L 1616 | report( 2023, "__cpp_lib_string_resize_and_overwrite", true ); 1617 | #else 1618 | report( 2023, "__cpp_lib_string_resize_and_overwrite", false ); 1619 | #endif 1620 | #if __cpp_lib_to_underlying >= 202102L 1621 | report( 2023, "__cpp_lib_to_underlying", true ); 1622 | #else 1623 | report( 2023, "__cpp_lib_to_underlying", false ); 1624 | #endif 1625 | #if __cpp_lib_tuple_like >= 202207L 1626 | report( 2023, "__cpp_lib_tuple_like", true ); 1627 | #else 1628 | report( 2023, "__cpp_lib_tuple_like", false ); 1629 | #endif 1630 | #if __cpp_lib_unreachable >= 202202L 1631 | report( 2023, "__cpp_lib_unreachable", true ); 1632 | #else 1633 | report( 2023, "__cpp_lib_unreachable", false ); 1634 | #endif 1635 | } 1636 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | To compile, either use cmake(may not know that a compiler supports the latest standards) or type something like 2 | 3 | ```g++ -std=c++2b cpp_feature_tester.cpp``` 4 | --------------------------------------------------------------------------------