50 return static_cast<long>(
standard) >=
static_cast<long>(min_standard);
63 if (feature_name[0] ==
's' && feature_name[1] ==
't' && feature_name[2] ==
'r' &&
64 feature_name[3] ==
'u' && feature_name[4] ==
'c' && feature_name[5] ==
't') {
68 if (feature_name[0] ==
'i' && feature_name[1] ==
'f' && feature_name[2] ==
'_' &&
69 feature_name[3] ==
'c' && feature_name[4] ==
'o' && feature_name[5] ==
'n') {
73 if (feature_name[0] ==
'c' && feature_name[1] ==
'o' && feature_name[2] ==
'n' &&
74 feature_name[3] ==
'c' && feature_name[4] ==
'e' && feature_name[5] ==
'p') {
78 if (feature_name[0] ==
'c' && feature_name[1] ==
'o' && feature_name[2] ==
'r' &&
79 feature_name[3] ==
'o' && feature_name[4] ==
'u' && feature_name[5] ==
't') {
83 if (feature_name[0] ==
'm' && feature_name[1] ==
'o' && feature_name[2] ==
'd' &&
84 feature_name[3] ==
'u' && feature_name[4] ==
'l' && feature_name[5] ==
'e') {
88 if (feature_name[0] ==
'r' && feature_name[1] ==
'a' && feature_name[2] ==
'n' &&
89 feature_name[3] ==
'g' && feature_name[4] ==
'e' && feature_name[5] ==
's') {
106 #if defined(_MSVC_LANG)
107 constexpr
long cpp_version = _MSVC_LANG;
108 #elif defined(__cplusplus)
109 constexpr
long cpp_version = __cplusplus;
111 constexpr
long cpp_version = 0L;
114 if (cpp_version >= 202600L) {
116 }
else if (cpp_version >= 202302L) {
118 }
else if (cpp_version >= 202002L) {
120 }
else if (cpp_version >= 201703L) {
122 }
else if (cpp_version >= 201402L || cpp_version >= 201103L || cpp_version >= 199711L) {
134 #if defined(_MSVC_LANG)
136 #elif defined(__cplusplus)
200 #ifdef __cpp_structured_bindings
201 return __cpp_structured_bindings >= 201606L;
212 #ifdef __cpp_if_constexpr
213 return __cpp_if_constexpr >= 201606L;
224 #ifdef __cpp_concepts
225 return __cpp_concepts >= 201907L;
236 #ifdef __cpp_impl_coroutine
237 return __cpp_impl_coroutine >= 201902L;
238 #elif defined(__cpp_coroutines)
239 return __cpp_coroutines >= 201902L;
251 return __cpp_modules >= 201907L;
263 #ifdef __cpp_lib_ranges
264 return __cpp_lib_ranges >= 201911L;
275 #ifdef __cpp_fold_expressions
276 return __cpp_fold_expressions >= 201603L;
287 #ifdef __cpp_inline_variables
288 return __cpp_inline_variables >= 201606L;
299 #ifdef __cpp_consteval
300 return __cpp_consteval >= 201811L;
311 #ifdef __cpp_constinit
312 return __cpp_constinit >= 201907L;
323 #ifdef __cpp_designated_initializers
324 return __cpp_designated_initializers >= 201707L;
335 #ifdef __cpp_impl_three_way_comparison
336 return __cpp_impl_three_way_comparison >= 201907L;
396 #if defined(__cplusplus) && __cplusplus >= 201703L
402 #if defined(__cplusplus) && __cplusplus >= 202002L
408 #if defined(__cplusplus) && __cplusplus >= 202302L
414 #if defined(__cplusplus) && __cplusplus >= 202600L
422 #define TRLC_CPP_VERSION __cplusplus
424 #define TRLC_CPP_VERSION 0L
428 #ifdef __cpp_structured_bindings
429 #if __cpp_structured_bindings >= 201606L
430 #define TRLC_HAS_STRUCTURED_BINDINGS 1
432 #define TRLC_HAS_STRUCTURED_BINDINGS 0
435 #define TRLC_HAS_STRUCTURED_BINDINGS TRLC_CPP17
438 #ifdef __cpp_if_constexpr
439 #if __cpp_if_constexpr >= 201606L
440 #define TRLC_HAS_IF_CONSTEXPR 1
442 #define TRLC_HAS_IF_CONSTEXPR 0
445 #define TRLC_HAS_IF_CONSTEXPR TRLC_CPP17
448 #ifdef __cpp_concepts
449 #if __cpp_concepts >= 201907L
450 #define TRLC_HAS_CONCEPTS 1
452 #define TRLC_HAS_CONCEPTS 0
455 #define TRLC_HAS_CONCEPTS TRLC_CPP20
458 #ifdef __cpp_impl_coroutine
459 #if __cpp_impl_coroutine >= 201902L
460 #define TRLC_HAS_COROUTINES 1
462 #define TRLC_HAS_COROUTINES 0
464 #elif defined(__cpp_coroutines)
465 #if __cpp_coroutines >= 201902L
466 #define TRLC_HAS_COROUTINES 1
468 #define TRLC_HAS_COROUTINES 0
471 #define TRLC_HAS_COROUTINES TRLC_CPP20
475 #if __cpp_modules >= 201907L
476 #define TRLC_HAS_MODULES 1
478 #define TRLC_HAS_MODULES 0
481 #define TRLC_HAS_MODULES 0
484 #ifdef __cpp_lib_ranges
485 #if __cpp_lib_ranges >= 201911L
486 #define TRLC_HAS_RANGES 1
488 #define TRLC_HAS_RANGES 0
491 #define TRLC_HAS_RANGES TRLC_CPP20
494 #ifdef __cpp_fold_expressions
495 #if __cpp_fold_expressions >= 201603L
496 #define TRLC_HAS_FOLD_EXPRESSIONS 1
498 #define TRLC_HAS_FOLD_EXPRESSIONS 0
501 #define TRLC_HAS_FOLD_EXPRESSIONS TRLC_CPP17
504 #ifdef __cpp_consteval
505 #if __cpp_consteval >= 201811L
506 #define TRLC_HAS_CONSTEVAL 1
508 #define TRLC_HAS_CONSTEVAL 0
511 #define TRLC_HAS_CONSTEVAL TRLC_CPP20
516 #define TRLC_IF_CPP17(code) code
518 #define TRLC_IF_CPP17(code)
522 #define TRLC_IF_CPP20(code) code
524 #define TRLC_IF_CPP20(code)
528 #define TRLC_IF_CPP23(code) code
530 #define TRLC_IF_CPP23(code)
534 #if TRLC_HAS_IF_CONSTEXPR
535 #define TRLC_CONSTEXPR_IF(...) if constexpr (__VA_ARGS__)
537 #define TRLC_CONSTEXPR_IF(...) if (__VA_ARGS__)
541 #if TRLC_HAS_STRUCTURED_BINDINGS
542 #define TRLC_IF_STRUCTURED_BINDINGS(code) code
544 #define TRLC_IF_STRUCTURED_BINDINGS(code)
547 #if TRLC_HAS_CONCEPTS
548 #define TRLC_IF_CONCEPTS(code) code
550 #define TRLC_IF_CONCEPTS(code)
553 #if TRLC_HAS_COROUTINES
554 #define TRLC_IF_COROUTINES(code) code
556 #define TRLC_IF_COROUTINES(code)
560 #define TRLC_IF_RANGES(code) code
562 #define TRLC_IF_RANGES(code)
567 #define TRLC_HAS_STRING_VIEW 1
568 #define TRLC_HAS_OPTIONAL 1
569 #define TRLC_HAS_VARIANT 1
570 #define TRLC_HAS_ANY 1
571 #define TRLC_HAS_FILESYSTEM 1
573 #define TRLC_HAS_STRING_VIEW 0
574 #define TRLC_HAS_OPTIONAL 0
575 #define TRLC_HAS_VARIANT 0
576 #define TRLC_HAS_ANY 0
577 #define TRLC_HAS_FILESYSTEM 0
581 #define TRLC_HAS_SPAN 1
582 #define TRLC_HAS_FORMAT 1
583 #define TRLC_HAS_CONCEPTS_LIB 1
584 #define TRLC_HAS_CHRONO_CALENDAR 1
586 #define TRLC_HAS_SPAN 0
587 #define TRLC_HAS_FORMAT 0
588 #define TRLC_HAS_CONCEPTS_LIB 0
589 #define TRLC_HAS_CHRONO_CALENDAR 0