libstdc++: Define std::ranges::to for C++23 (P1206R7) [PR111055]
[official-gcc.git] / libstdc++-v3 / include / bits / version.def
blob140777832ed870c6dff746fc6417972b8adfb74b
1 // Feature test macro definitions -*- C++ -*-
2 // Copyright (C) 2023 Free Software Foundation, Inc.
4 // This file is part of the GNU ISO C++ Library. This library is free
5 // software; you can redistribute it and/or modify it under the
6 // terms of the GNU General Public License as published by the
7 // Free Software Foundation; either version 3, or (at your option)
8 // any later version.
10 // This library is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 // GNU General Public License for more details.
15 // Under Section 7 of GPL version 3, you are granted additional
16 // permissions described in the GCC Runtime Library Exception, version
17 // 3.1, as published by the Free Software Foundation.
19 // You should have received a copy of the GNU General Public License and
20 // a copy of the GCC Runtime Library Exception along with this program;
21 // see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
22 // <http://www.gnu.org/licenses/>.
24 AutoGen Definitions version.tpl;
26 // The top level variable ftms is an array of feature test macros. Each entry
27 // consists of a structure like following:
29 // Schema:
30 // ftms = {
31 // name = FTM NAME;
32 // [stdname = FTM STANDARD MACRO NAME;]
33 // values = {
34 // v = VALUE FOR FTM IF MATCHING;
35 // [extra_cond = STRING;]
36 // [cxxmin = NUMBER;]
37 // [gnuxxmin = NUMBER;]
38 // [gthread = yes|no;]
39 // [hosted = yes|no;]
40 // [cxx11abi = yes|no;]
41 // }; ...
42 // };
44 // The elements in square brackets are optional. These are formulated into a
45 // logical expression like:
46 // ((strict && c++ >= cxxmin) || (!strict && c++ >= gnuxxmin))
47 // && (gthr <=> gthread)
48 // && (host <=> hosted)
49 // && (cxx11 <=> cxx11abi)
50 // && (extra_cond)
51 // Where gthr, cxx11 and host are _GLIBCXX_HAS_GTHREADS, _GLIBCXX_USE_CXX11_ABI
52 // and _GLIBCXX_HOSTED respectively. If any of these are omitted, their
53 // sub-expressions are equivalent to the identity. Specially, if gnuxxmin is
54 // omitted, it is taken to be the value of cxxmin, and so, only if both are
55 // omitted, the clause is omitted.
57 // stdname configures the name of the *standard* macro emitted, i.e. it
58 // replaces only the __cpp_lib_ macro in the emitted definition. Defaults to
59 // __cpp_lib_${name}
61 // N.B This list needs to be in topological sort order, as later entries in
62 // this list can and do use the earlier entries.
64 ftms = {
65 name = incomplete_container_elements;
66 values = {
67 v = 201505;
68 hosted = yes;
72 ftms = {
73 name = uncaught_exceptions;
74 values = {
75 v = 201411;
76 cxxmin = 17;
77 gnuxxmin = 03;
81 ftms = {
82 name = allocator_traits_is_always_equal;
83 values = {
84 v = 201411;
85 cxxmin = 11;
89 ftms = {
90 name = is_null_pointer;
91 values = {
92 v = 201309;
93 cxxmin = 11;
97 ftms = {
98 name = result_of_sfinae;
99 values = {
100 v = 201210;
101 cxxmin = 11;
105 ftms = {
106 name = shared_ptr_arrays;
107 values = {
108 v = 201707;
109 cxxmin = 20;
110 hosted = yes;
112 values = {
113 v = 201611;
114 cxxmin = 11;
115 hosted = yes;
119 ftms = {
120 name = is_swappable;
121 values = {
122 v = 201603;
123 cxxmin = 17;
124 gnuxxmin = 11;
128 ftms = {
129 name = void_t;
130 values = {
131 v = 201411;
132 cxxmin = 17;
133 gnuxxmin = 11;
137 ftms = {
138 name = enable_shared_from_this;
139 values = {
140 v = 201603;
141 cxxmin = 17;
142 gnuxxmin = 11;
143 hosted = yes;
147 ftms = {
148 name = math_spec_funcs;
149 stdname = "__STDCPP_MATH_SPEC_FUNCS__";
150 values = {
151 v = 201003;
152 cxxmin = 11;
156 ftms = {
157 name = coroutine;
158 values = {
159 v = 201902;
160 // It is very likely that earlier versions would work, but they are
161 // untested.
162 cxxmin = 14;
163 extra_cond = "__cpp_impl_coroutine";
167 ftms = {
168 name = exchange_function;
169 values = {
170 v = 201304;
171 cxxmin = 14;
175 ftms = {
176 name = integer_sequence;
177 values = {
178 v = 201304;
179 cxxmin = 14;
183 ftms = {
184 name = integral_constant_callable;
185 values = {
186 v = 201304;
187 cxxmin = 14;
191 ftms = {
192 name = is_final;
193 values = {
194 v = 201402;
195 cxxmin = 14;
199 ftms = {
200 name = make_reverse_iterator;
201 values = {
202 v = 201402;
203 cxxmin = 14;
207 ftms = {
208 name = null_iterators;
209 values = {
210 v = 201304;
211 cxxmin = 14;
212 extra_cond = "!defined(_GLIBCXX_DEBUG)";
216 ftms = {
217 name = transformation_trait_aliases;
218 values = {
219 v = 201304;
220 cxxmin = 14;
224 ftms = {
225 name = transparent_operators;
226 values = {
227 v = 201510;
228 cxxmin = 14;
232 ftms = {
233 name = tuple_element_t;
234 values = {
235 v = 201402;
236 cxxmin = 14;
240 ftms = {
241 name = tuples_by_type;
242 values = {
243 v = 201304;
244 cxxmin = 14;
248 ftms = {
249 name = robust_nonmodifying_seq_ops;
250 values = {
251 v = 201304;
252 cxxmin = 14;
256 ftms = {
257 name = to_chars;
258 values = {
259 v = 202306;
260 cxxmin = 26;
261 extra_cond = "_GLIBCXX_FLOAT_IS_IEEE_BINARY32 "
262 "&& _GLIBCXX_DOUBLE_IS_IEEE_BINARY64 "
263 "&& __SIZE_WIDTH__ >= 32";
265 values = {
266 v = 201611;
267 cxxmin = 14;
268 extra_cond = "_GLIBCXX_FLOAT_IS_IEEE_BINARY32 "
269 "&& _GLIBCXX_DOUBLE_IS_IEEE_BINARY64 "
270 "&& __SIZE_WIDTH__ >= 32";
274 ftms = {
275 name = chrono_udls;
276 values = {
277 v = 201304;
278 cxxmin = 14;
279 hosted = yes;
283 ftms = {
284 name = complex_udls;
285 values = {
286 v = 201309;
287 cxxmin = 14;
288 hosted = yes;
292 ftms = {
293 name = generic_associative_lookup;
294 values = {
295 v = 201304;
296 cxxmin = 14;
297 hosted = yes;
301 ftms = {
302 name = make_unique;
303 values = {
304 v = 201304;
305 cxxmin = 14;
306 hosted = yes;
310 ftms = {
311 name = quoted_string_io;
312 values = {
313 v = 201304;
314 cxxmin = 14;
315 hosted = yes;
319 ftms = {
320 name = shared_timed_mutex;
321 values = {
322 v = 201402;
323 cxxmin = 14;
324 hosted = yes;
325 gthread = yes;
329 ftms = {
330 name = string_udls;
331 values = {
332 v = 201304;
333 cxxmin = 14;
334 hosted = yes;
338 ftms = {
339 name = addressof_constexpr;
340 values = {
341 // _GLIBCXX_RESOLVE_LIB_DEFECTS
342 // 2296. std::addressof should be constexpr
343 v = 201603;
344 cxxmin = 17;
348 ftms = {
349 name = any;
350 values = {
351 v = 201606;
352 cxxmin = 17;
356 ftms = {
357 name = apply;
358 values = {
359 v = 201603;
360 cxxmin = 17;
364 ftms = {
365 name = as_const;
366 values = {
367 v = 201510;
368 cxxmin = 17;
372 ftms = {
373 name = atomic_is_always_lock_free;
374 values = {
375 v = 201603;
376 cxxmin = 17;
380 ftms = {
381 name = bool_constant;
382 values = {
383 v = 201505;
384 cxxmin = 17;
388 ftms = {
389 name = byte;
390 values = {
391 v = 201603;
392 cxxmin = 17;
396 ftms = {
397 name = has_unique_object_representations;
398 values = {
399 v = 201606;
400 cxxmin = 17;
401 extra_cond = "defined(_GLIBCXX_HAVE_BUILTIN_HAS_UNIQ_OBJ_REP)";
405 ftms = {
406 name = hardware_interference_size;
407 values = {
408 v = 201703;
409 cxxmin = 17;
410 extra_cond = "defined(__GCC_DESTRUCTIVE_SIZE)";
414 ftms = {
415 name = invoke;
416 values = {
417 v = 201411;
418 cxxmin = 17;
422 ftms = {
423 name = is_aggregate;
424 values = {
425 v = 201703;
426 cxxmin = 17;
427 extra_cond = "defined(_GLIBCXX_HAVE_BUILTIN_IS_AGGREGATE)";
431 ftms = {
432 name = is_invocable;
433 values = {
434 v = 201703;
435 cxxmin = 17;
439 ftms = {
440 name = launder;
441 values = {
442 v = 201606;
443 cxxmin = 17;
444 extra_cond = "defined(_GLIBCXX_HAVE_BUILTIN_LAUNDER)";
448 ftms = {
449 name = logical_traits;
450 values = {
451 v = 201510;
452 cxxmin = 17;
456 ftms = {
457 name = make_from_tuple;
458 values = {
459 v = 201606;
460 cxxmin = 17;
464 ftms = {
465 name = not_fn;
466 values = {
467 v = 201603;
468 cxxmin = 17;
472 ftms = {
473 name = type_trait_variable_templates;
474 values = {
475 v = 201510;
476 cxxmin = 17;
480 ftms = {
481 name = variant;
482 values = {
483 v = 202106;
484 cxxmin = 20;
485 extra_cond = "__cpp_concepts >= 202002L && __cpp_constexpr >= 201811L";
487 values = {
488 v = 202102;
489 cxxmin = 17;
493 ftms = {
494 // Used in earlier draft of SD6.
495 name = lcm;
496 values = {
497 v = 201606;
498 cxxmin = 17;
502 ftms = {
503 // Used in earlier draft of SD6.
504 name = gcd;
505 values = {
506 v = 201606;
507 cxxmin = 17;
511 ftms = {
512 name = gcd_lcm;
513 values = {
514 v = 201606;
515 cxxmin = 17;
519 ftms = {
520 name = raw_memory_algorithms;
521 values = {
522 v = 201606;
523 cxxmin = 17;
527 ftms = {
528 name = array_constexpr;
529 values = {
530 v = 201811;
531 cxxmin = 20;
533 values = {
534 v = 201803;
535 cxxmin = 17;
539 ftms = {
540 name = nonmember_container_access;
541 values = {
542 v = 201411;
543 cxxmin = 17;
547 ftms = {
548 name = clamp;
549 values = {
550 v = 201603;
551 cxxmin = 17;
555 ftms = {
556 name = sample;
557 values = {
558 v = 201603;
559 cxxmin = 17;
563 ftms = {
564 name = boyer_moore_searcher;
565 values = {
566 v = 201603;
567 cxxmin = 17;
568 hosted = yes;
572 ftms = {
573 name = chrono;
574 values = {
575 v = 201907;
576 cxxmin = 20;
577 hosted = yes;
579 values = {
580 v = 201611;
581 cxxmin = 17;
582 hosted = yes;
586 ftms = {
587 name = execution;
588 values = {
589 v = 201902; // FIXME: should be 201603L
590 cxxmin = 17;
591 hosted = yes;
595 ftms = {
596 name = filesystem;
597 values = {
598 v = 201703;
599 cxxmin = 17;
600 hosted = yes;
604 ftms = {
605 name = hypot;
606 values = {
607 v = 201603;
608 cxxmin = 17;
609 hosted = yes;
613 ftms = {
614 name = map_try_emplace;
615 values = {
616 v = 201411;
617 cxxmin = 17;
618 hosted = yes;
622 ftms = {
623 name = math_special_functions;
624 values = {
625 v = 201603;
626 cxxmin = 17;
627 hosted = yes;
631 ftms = {
632 name = memory_resource;
633 values = {
634 v = 201603;
635 cxxmin = 17;
636 hosted = yes;
637 gthread = yes;
639 values = {
640 v = 1;
641 /* For when there's no gthread. */
642 cxxmin = 17;
643 hosted = yes;
644 gthread = no;
648 ftms = {
649 name = node_extract;
650 values = {
651 v = 201606;
652 cxxmin = 17;
653 hosted = yes;
657 ftms = {
658 name = parallel_algorithm;
659 values = {
660 v = 201603;
661 cxxmin = 17;
662 hosted = yes;
666 ftms = {
667 name = scoped_lock;
668 values = {
669 v = 201703;
670 cxxmin = 17;
671 hosted = yes;
672 gthread = yes;
676 ftms = {
677 name = shared_mutex;
678 values = {
679 v = 201505;
680 cxxmin = 17;
681 hosted = yes;
682 gthread = yes;
686 ftms = {
687 name = shared_ptr_weak_type;
688 values = {
689 v = 201606;
690 cxxmin = 17;
691 hosted = yes;
695 ftms = {
696 name = string_view;
697 values = {
698 v = 201803;
699 cxxmin = 17;
700 hosted = yes;
704 ftms = {
705 name = unordered_map_try_emplace;
706 values = {
707 v = 201411;
708 cxxmin = 17;
709 hosted = yes;
713 ftms = {
714 name = assume_aligned;
715 values = {
716 v = 201811;
717 cxxmin = 20;
721 ftms = {
722 name = atomic_flag_test;
723 values = {
724 v = 201907;
725 cxxmin = 20;
729 ftms = {
730 name = atomic_float;
731 values = {
732 v = 201711;
733 cxxmin = 20;
737 ftms = {
738 name = atomic_lock_free_type_aliases;
739 values = {
740 v = 201907;
741 cxxmin = 20;
745 ftms = {
746 name = atomic_ref;
747 values = {
748 v = 201806;
749 cxxmin = 20;
753 ftms = {
754 name = atomic_value_initialization;
755 values = {
756 v = 201911;
757 cxxmin = 20;
761 ftms = {
762 name = bind_front;
763 values = {
764 v = 201907;
765 cxxmin = 20;
769 ftms = {
770 name = starts_ends_with;
771 values = {
772 v = 201711;
773 cxxmin = 20;
777 ftms = {
778 name = bit_cast;
779 values = {
780 v = 201806;
781 cxxmin = 20;
782 extra_cond = "__has_builtin(__builtin_bit_cast)";
786 ftms = {
787 name = bitops;
788 values = {
789 v = 201907;
790 cxxmin = 20;
794 ftms = {
795 name = bounded_array_traits;
796 values = {
797 v = 201902;
798 cxxmin = 20;
802 ftms = {
803 name = concepts;
804 values = {
805 v = 202002;
806 cxxmin = 20;
807 extra_cond = "__cpp_concepts >= 201907L";
811 // Moved down here (after concepts) by topological sort.
812 ftms = {
813 name = optional;
814 values = {
815 v = 202110;
816 cxxmin = 23;
817 extra_cond = "__glibcxx_concepts";
819 values = {
820 v = 202106;
821 cxxmin = 20;
823 values = {
824 v = 201606;
825 cxxmin = 17;
829 ftms = {
830 name = destroying_delete;
831 values = {
832 v = 201806;
833 cxxmin = 20;
834 extra_cond = "__cpp_impl_destroying_delete";
838 ftms = {
839 name = constexpr_string_view;
840 values = {
841 v = 201811;
842 cxxmin = 20;
846 ftms = {
847 name = endian;
848 values = {
849 v = 201907;
850 cxxmin = 20;
854 ftms = {
855 name = int_pow2;
856 values = {
857 v = 202002;
858 cxxmin = 20;
862 ftms = {
863 name = integer_comparison_functions;
864 values = {
865 v = 202002;
866 cxxmin = 20;
870 ftms = {
871 name = is_constant_evaluated;
872 values = {
873 v = 201811;
874 cxxmin = 20;
875 extra_cond = "defined(_GLIBCXX_HAVE_IS_CONSTANT_EVALUATED)";
879 // Moved down here (after is_constant_evaluated) by topological sort.
880 ftms = {
881 name = constexpr_char_traits;
882 values = {
883 // Unofficial macro indicating P1032R1 support in C++20
884 v = 201811;
885 cxxmin = 20;
886 extra_cond = "defined(__glibcxx_is_constant_evaluated)";
888 values = {
889 // Unofficial macro indicating P0426R1 support in C++17
890 v = 201611;
891 cxxmin = 17;
892 extra_cond = "_GLIBCXX_HAVE_IS_CONSTANT_EVALUATED";
896 ftms = {
897 name = is_layout_compatible;
898 values = {
899 v = 201907;
900 cxxmin = 20;
901 extra_cond = "__has_builtin(__is_layout_compatible) "
902 "&& __has_builtin(__builtin_is_corresponding_member)";
906 ftms = {
907 name = is_nothrow_convertible;
908 values = {
909 v = 201806;
910 cxxmin = 20;
914 ftms = {
915 name = is_pointer_interconvertible;
916 values = {
917 v = 201907;
918 cxxmin = 20;
919 extra_cond =
920 "__has_builtin(__is_pointer_interconvertible_base_of) "
921 "&& __has_builtin(__builtin_is_pointer_interconvertible_with_class)";
925 ftms = {
926 name = math_constants;
927 values = {
928 v = 201907;
929 cxxmin = 20;
933 ftms = {
934 name = make_obj_using_allocator;
935 values = {
936 // Not specified by C++20, used internally
937 v = 201811;
938 cxxmin = 20;
939 extra_cond = "__cpp_concepts";
943 ftms = {
944 name = remove_cvref;
945 values = {
946 v = 201711;
947 cxxmin = 20;
951 ftms = {
952 name = source_location;
953 values = {
954 v = 201907;
955 cxxmin = 20;
956 extra_cond = "__has_builtin(__builtin_source_location)";
960 ftms = {
961 name = span;
962 values = {
963 v = 202311;
964 cxxmin = 26;
965 extra_cond = "__glibcxx_concepts";
967 values = {
968 v = 202002;
969 cxxmin = 20;
970 extra_cond = "__glibcxx_concepts";
974 ftms = {
975 name = ssize;
976 values = {
977 v = 201902;
978 cxxmin = 20;
982 ftms = {
983 name = three_way_comparison;
984 values = {
985 v = 201907;
986 cxxmin = 20;
987 extra_cond = "__cpp_impl_three_way_comparison >= 201907L "
988 "&& __glibcxx_concepts";
992 ftms = {
993 name = to_address;
994 values = {
995 v = 201711;
996 cxxmin = 20;
1000 ftms = {
1001 name = to_array;
1002 values = {
1003 v = 201907;
1004 cxxmin = 20;
1005 extra_cond = "__cpp_generic_lambdas >= 201707L";
1009 ftms = {
1010 name = type_identity;
1011 values = {
1012 v = 201806;
1013 cxxmin = 20;
1017 ftms = {
1018 name = unwrap_ref;
1019 values = {
1020 v = 201811;
1021 cxxmin = 20;
1025 ftms = {
1026 name = constexpr_iterator;
1027 values = {
1028 v = 201811;
1029 cxxmin = 20;
1033 ftms = {
1034 name = interpolate;
1035 values = {
1036 v = 201902;
1037 cxxmin = 20;
1041 ftms = {
1042 name = constexpr_utility;
1043 values = {
1044 v = 201811;
1045 cxxmin = 20;
1049 ftms = {
1050 name = shift;
1051 values = {
1052 v = 201806;
1053 cxxmin = 20;
1057 ftms = {
1058 name = ranges;
1059 values = {
1060 v = 202211;
1061 cxxmin = 23;
1062 extra_cond = "__glibcxx_concepts";
1064 values = {
1065 v = 202110;
1066 cxxmin = 20;
1067 extra_cond = "__glibcxx_concepts";
1071 ftms = {
1072 name = constexpr_numeric;
1073 values = {
1074 v = 201911;
1075 cxxmin = 20;
1079 ftms = {
1080 name = constexpr_functional;
1081 values = {
1082 v = 201907;
1083 cxxmin = 20;
1087 ftms = {
1088 name = constexpr_algorithms;
1089 values = {
1090 v = 201806;
1091 cxxmin = 20;
1095 ftms = {
1096 name = constexpr_tuple;
1097 values = {
1098 v = 201811;
1099 cxxmin = 20;
1103 ftms = {
1104 name = constexpr_memory;
1105 values = {
1106 v = 202202;
1107 cxxmin = 23;
1108 extra_cond = "__cpp_constexpr_dynamic_alloc";
1110 values = {
1111 v = 201811;
1112 cxxmin = 20;
1116 ftms = {
1117 name = atomic_shared_ptr;
1118 values = {
1119 v = 201711;
1120 cxxmin = 20;
1121 hosted = yes;
1125 ftms = {
1126 name = atomic_wait;
1127 // atomic_wait is available if either futexes or gthread are.
1128 values = {
1129 v = 201907;
1130 cxxmin = 20;
1131 hosted = yes;
1132 gthread = yes;
1134 values = {
1135 v = 201907;
1136 cxxmin = 20;
1137 hosted = yes;
1138 gthread = no;
1139 extra_cond = "defined(_GLIBCXX_HAVE_LINUX_FUTEX)";
1143 ftms = {
1144 name = barrier;
1145 values = {
1146 v = 201907;
1147 cxxmin = 20;
1148 // This condition carries in the hosted&&(futex||gthread) logic from above.
1149 extra_cond = "__cpp_aligned_new && __glibcxx_atomic_wait";
1153 ftms = {
1154 // 201907 Text Formatting, Integration of chrono, printf corner cases.
1155 // 202106 std::format improvements.
1156 // 202110 Fixing locale handling in chrono formatters, generator-like types.
1157 // 202207 Encodings in localized formatting of chrono, basic-format-string.
1158 // 202207 P2286R8 Formatting Ranges
1159 // 202207 P2585R1 Improving default container formatting
1160 // TODO: #define __cpp_lib_format_ranges 202207L
1161 name = format;
1162 values = {
1163 v = 202106;
1164 cxxmin = 20;
1165 hosted = yes;
1169 // #undef __glibcxx_chrono
1170 // #define __glibcxx_chrono 201907L
1171 // FIXME: #define __glibcxx_execution 201902L
1173 ftms = {
1174 name = constexpr_complex;
1175 values = {
1176 v = 201711;
1177 cxxmin = 20;
1178 hosted = yes;
1182 ftms = {
1183 name = constexpr_dynamic_alloc;
1184 values = {
1185 v = 201907;
1186 cxxmin = 20;
1187 hosted = yes;
1191 ftms = {
1192 name = constexpr_string;
1193 values = {
1194 v = 201907;
1195 cxxmin = 20;
1196 hosted = yes;
1197 cxx11abi = yes;
1198 extra_cond = "defined(__glibcxx_is_constant_evaluated)";
1200 values = {
1201 v = 201811;
1202 cxxmin = 20;
1203 hosted = yes;
1204 cxx11abi = no;
1205 extra_cond = "defined(__glibcxx_is_constant_evaluated)";
1207 values = {
1208 v = 201611;
1209 cxxmin = 17;
1210 hosted = yes;
1211 extra_cond = "_GLIBCXX_HAVE_IS_CONSTANT_EVALUATED";
1215 ftms = {
1216 name = constexpr_vector;
1217 values = {
1218 v = 201907;
1219 cxxmin = 20;
1220 hosted = yes;
1224 ftms = {
1225 name = erase_if;
1226 values = {
1227 v = 202002;
1228 cxxmin = 20;
1229 hosted = yes;
1233 ftms = {
1234 name = generic_unordered_lookup;
1235 values = {
1236 v = 201811;
1237 cxxmin = 20;
1238 hosted = yes;
1242 ftms = {
1243 name = jthread;
1244 values = {
1245 v = 201911;
1246 gthread = yes;
1247 hosted = yes;
1248 cxxmin = 20;
1252 ftms = {
1253 name = latch;
1254 values = {
1255 v = 201907;
1256 cxxmin = 20;
1257 extra_cond = "__glibcxx_atomic_wait";
1261 ftms = {
1262 name = list_remove_return_type;
1263 values = {
1264 v = 201806;
1265 cxxmin = 20;
1266 hosted = yes;
1270 ftms = {
1271 name = polymorphic_allocator;
1272 values = {
1273 v = 201902;
1274 cxxmin = 20;
1275 hosted = yes;
1279 ftms = {
1280 name = move_iterator_concept;
1281 values = {
1282 v = 202207;
1283 // This is P2520R0, a C++23 change, but we treat it as a DR against C++20.
1284 cxxmin = 20;
1285 extra_cond = "__glibcxx_concepts";
1289 ftms = {
1290 name = semaphore;
1291 values = {
1292 v = 201907;
1293 cxxmin = 20;
1294 hosted = yes;
1295 extra_cond = "__glibcxx_atomic_wait || _GLIBCXX_HAVE_POSIX_SEMAPHORE";
1299 ftms = {
1300 name = smart_ptr_for_overwrite;
1301 values = {
1302 v = 202002;
1303 cxxmin = 20;
1304 hosted = yes;
1308 ftms = {
1309 name = syncbuf;
1310 values = {
1311 v = 201803;
1312 cxxmin = 20;
1313 hosted = yes;
1314 cxx11abi = yes;
1318 ftms = {
1319 name = byteswap;
1320 values = {
1321 v = 202110;
1322 cxxmin = 23;
1326 ftms = {
1327 name = constexpr_charconv;
1328 values = {
1329 v = 202207;
1330 cxxmin = 23;
1334 ftms = {
1335 name = constexpr_typeinfo;
1336 values = {
1337 v = 202106;
1338 cxxmin = 23;
1342 ftms = {
1343 name = expected;
1344 values = {
1345 v = 202211;
1346 cxxmin = 23;
1347 extra_cond = "__cpp_concepts >= 202002L";
1351 ftms = {
1352 name = freestanding_algorithm;
1353 values = {
1354 v = 202311;
1355 // This is a C++26 feature, but we support it in C++23.
1356 cxxmin = 23;
1360 ftms = {
1361 name = freestanding_array;
1362 values = {
1363 v = 202311;
1364 // This is a C++26 feature, but we support it in C++23.
1365 cxxmin = 23;
1369 ftms = {
1370 name = freestanding_cstring;
1371 values = {
1372 v = 202311;
1373 // This is a C++26 feature, but we support it in C++23.
1374 cxxmin = 23;
1378 ftms = {
1379 name = freestanding_expected;
1380 values = {
1381 v = 202311;
1382 cxxmin = 23;
1383 // This is a C++26 feature, but we support it in C++23.
1384 extra_cond = "__cpp_lib_expected";
1388 ftms = {
1389 name = freestanding_optional;
1390 values = {
1391 v = 202311;
1392 // This is a C++26 feature, but we support it in C++23.
1393 cxxmin = 23;
1397 ftms = {
1398 name = freestanding_string_view;
1399 values = {
1400 v = 202311;
1401 // This is a C++26 feature, but we support it in C++23.
1402 cxxmin = 23;
1406 ftms = {
1407 name = freestanding_variant;
1408 values = {
1409 v = 202311;
1410 // This is a C++26 feature, but we support it in C++23.
1411 cxxmin = 23;
1415 ftms = {
1416 name = invoke_r;
1417 values = {
1418 v = 202106;
1419 cxxmin = 23;
1423 ftms = {
1424 name = is_scoped_enum;
1425 values = {
1426 v = 202011;
1427 cxxmin = 23;
1431 ftms = {
1432 name = reference_from_temporary;
1433 values = {
1434 v = 202202;
1435 extra_cond =
1436 "__has_builtin(__reference_constructs_from_temporary) "
1437 "&& __has_builtin(__reference_converts_from_temporary)";
1438 cxxmin = 23;
1442 //ftms = {
1443 // name = container_ranges;
1444 // values = {
1445 // v = 202202;
1446 // cxxmin = 23;
1447 // hosted = yes;
1448 // };
1449 //};
1451 ftms = {
1452 name = ranges_to_container;
1453 values = {
1454 v = 202202;
1455 cxxmin = 23;
1456 hosted = yes;
1460 ftms = {
1461 name = ranges_zip;
1462 values = {
1463 v = 202110;
1464 cxxmin = 23;
1468 ftms = {
1469 name = ranges_chunk;
1470 values = {
1471 v = 202202;
1472 cxxmin = 23;
1476 ftms = {
1477 name = ranges_slide;
1478 values = {
1479 v = 202202;
1480 cxxmin = 23;
1484 ftms = {
1485 name = ranges_chunk_by;
1486 values = {
1487 v = 202202;
1488 cxxmin = 23;
1492 ftms = {
1493 name = ranges_join_with;
1494 values = {
1495 v = 202202;
1496 cxxmin = 23;
1500 ftms = {
1501 name = ranges_repeat;
1502 values = {
1503 v = 202207;
1504 cxxmin = 23;
1508 ftms = {
1509 name = ranges_stride;
1510 values = {
1511 v = 202207;
1512 cxxmin = 23;
1516 ftms = {
1517 name = ranges_cartesian_product;
1518 values = {
1519 v = 202207;
1520 cxxmin = 23;
1524 ftms = {
1525 name = ranges_as_rvalue;
1526 values = {
1527 v = 202207;
1528 cxxmin = 23;
1532 ftms = {
1533 name = ranges_as_const;
1534 values = {
1535 v = 202207;
1536 cxxmin = 23;
1540 ftms = {
1541 name = ranges_enumerate;
1542 values = {
1543 v = 202302;
1544 cxxmin = 23;
1548 ftms = {
1549 name = ranges_fold;
1550 values = {
1551 v = 202207;
1552 cxxmin = 23;
1556 ftms = {
1557 name = ranges_contains;
1558 values = {
1559 v = 202207;
1560 cxxmin = 23;
1564 ftms = {
1565 name = ranges_iota;
1566 values = {
1567 v = 202202;
1568 cxxmin = 23;
1572 ftms = {
1573 name = ranges_find_last;
1574 values = {
1575 v = 202207;
1576 cxxmin = 23;
1580 ftms = {
1581 name = constexpr_bitset;
1582 values = {
1583 v = 202202;
1584 cxxmin = 23;
1585 hosted = yes;
1586 extra_cond = "__cpp_constexpr_dynamic_alloc";
1590 ftms = {
1591 name = stdatomic_h;
1592 values = {
1593 v = 202011;
1594 cxxmin = 23;
1598 ftms = {
1599 name = adaptor_iterator_pair_constructor;
1600 values = {
1601 v = 202106;
1602 cxxmin = 23;
1603 hosted = yes;
1607 ftms = {
1608 name = formatters;
1609 values = {
1610 v = 202302;
1611 cxxmin = 23;
1612 hosted = yes;
1616 ftms = {
1617 name = forward_like;
1618 values = {
1619 v = 202207;
1620 cxxmin = 23;
1624 ftms = {
1625 name = ios_noreplace;
1626 values = {
1627 v = 202207;
1628 cxxmin = 23;
1629 hosted = yes;
1633 ftms = {
1634 name = move_only_function;
1635 values = {
1636 v = 202110;
1637 cxxmin = 23;
1638 hosted = yes;
1642 ftms = {
1643 name = out_ptr;
1644 values = {
1645 v = 202311;
1646 cxxmin = 23;
1650 ftms = {
1651 name = spanstream;
1652 values = {
1653 v = 202106;
1654 cxxmin = 23;
1655 hosted = yes;
1656 extra_cond = "__glibcxx_span";
1660 ftms = {
1661 name = stacktrace;
1662 values = {
1663 v = 202011;
1664 cxxmin = 23;
1665 hosted = yes;
1666 extra_cond = "_GLIBCXX_HAVE_STACKTRACE";
1670 ftms = {
1671 name = string_contains;
1672 values = {
1673 v = 202011;
1674 cxxmin = 23;
1675 hosted = yes;
1679 ftms = {
1680 name = string_resize_and_overwrite;
1681 values = {
1682 v = 202110;
1683 cxxmin = 23;
1684 hosted = yes;
1688 ftms = {
1689 name = to_underlying;
1690 values = {
1691 v = 202102;
1692 cxxmin = 23;
1696 ftms = {
1697 name = unreachable;
1698 values = {
1699 v = 202202;
1700 cxxmin = 23;
1704 ftms = {
1705 name = fstream_native_handle;
1706 values = {
1707 v = 202306;
1708 cxxmin = 26;
1709 hosted = yes;
1713 ftms = {
1714 name = ratio;
1715 values = {
1716 v = 202306;
1717 cxxmin = 26;
1721 ftms = {
1722 name = saturation_arithmetic;
1723 values = {
1724 v = 202311;
1725 cxxmin = 26;
1729 ftms = {
1730 name = to_string;
1731 values = {
1732 v = 202306;
1733 cxxmin = 26;
1734 hosted = yes;
1735 extra_cond = "__glibcxx_to_chars";
1739 // Standard test specifications.
1740 stds[97] = ">= 199711L";
1741 stds[03] = ">= 199711L";
1742 stds[11] = ">= 201103L";
1743 stds[14] = ">= 201402L";
1744 stds[17] = ">= 201703L";
1745 stds[20] = ">= 202002L";
1746 stds[23] = ">= 202100L"; // Should be 202302L but Clang 16 uses 202101L
1747 stds[26] = "> 202302L"; // TODO: update when finalized
1749 // Local Variables:
1750 // compile-command: "autogen version.def"
1751 // End: