]> git.ipfire.org Git - thirdparty/gcc.git/blame - libstdc++-v3/include/bits/version.def
Update copyright years.
[thirdparty/gcc.git] / libstdc++-v3 / include / bits / version.def
CommitLineData
b7b801b2 1// Feature test macro definitions -*- C++ -*-
a945c346 2// Copyright (C) 2023-2024 Free Software Foundation, Inc.
b7b801b2
AA
3
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.
9
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.
14
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.
18
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/>.
23
24AutoGen Definitions version.tpl;
25
26// The top level variable ftms is an array of feature test macros. Each entry
27// consists of a structure like following:
28
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// };
43
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.
56
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}
60
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.
63
64ftms = {
65 name = incomplete_container_elements;
66 values = {
67 v = 201505;
68 hosted = yes;
69 };
70};
71
72ftms = {
73 name = uncaught_exceptions;
74 values = {
75 v = 201411;
76 cxxmin = 17;
77 gnuxxmin = 03;
78 };
79};
80
81ftms = {
82 name = allocator_traits_is_always_equal;
83 values = {
84 v = 201411;
85 cxxmin = 11;
86 };
87};
88
89ftms = {
90 name = is_null_pointer;
91 values = {
92 v = 201309;
93 cxxmin = 11;
94 };
95};
96
97ftms = {
98 name = result_of_sfinae;
99 values = {
100 v = 201210;
101 cxxmin = 11;
102 };
103};
104
105ftms = {
106 name = shared_ptr_arrays;
107 values = {
108 v = 201707;
109 cxxmin = 20;
110 hosted = yes;
111 };
112 values = {
113 v = 201611;
114 cxxmin = 11;
115 hosted = yes;
116 };
117};
118
119ftms = {
120 name = is_swappable;
121 values = {
122 v = 201603;
123 cxxmin = 17;
124 gnuxxmin = 11;
125 };
126};
127
128ftms = {
129 name = void_t;
130 values = {
131 v = 201411;
132 cxxmin = 17;
133 gnuxxmin = 11;
134 };
135};
136
137ftms = {
138 name = enable_shared_from_this;
139 values = {
140 v = 201603;
141 cxxmin = 17;
142 gnuxxmin = 11;
143 hosted = yes;
144 };
145};
146
147ftms = {
148 name = math_spec_funcs;
149 stdname = "__STDCPP_MATH_SPEC_FUNCS__";
150 values = {
151 v = 201003;
152 cxxmin = 11;
153 };
154};
155
156ftms = {
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";
164 };
165};
166
167ftms = {
168 name = exchange_function;
169 values = {
170 v = 201304;
171 cxxmin = 14;
172 };
173};
174
175ftms = {
176 name = integer_sequence;
177 values = {
178 v = 201304;
179 cxxmin = 14;
180 };
181};
182
183ftms = {
184 name = integral_constant_callable;
185 values = {
186 v = 201304;
187 cxxmin = 14;
188 };
189};
190
191ftms = {
192 name = is_final;
193 values = {
194 v = 201402;
195 cxxmin = 14;
196 };
197};
198
199ftms = {
200 name = make_reverse_iterator;
201 values = {
202 v = 201402;
203 cxxmin = 14;
204 };
205};
206
207ftms = {
208 name = null_iterators;
209 values = {
210 v = 201304;
211 cxxmin = 14;
212 extra_cond = "!defined(_GLIBCXX_DEBUG)";
213 };
214};
215
216ftms = {
217 name = transformation_trait_aliases;
218 values = {
219 v = 201304;
220 cxxmin = 14;
221 };
222};
223
224ftms = {
225 name = transparent_operators;
226 values = {
227 v = 201510;
228 cxxmin = 14;
229 };
230};
231
232ftms = {
233 name = tuple_element_t;
234 values = {
235 v = 201402;
236 cxxmin = 14;
237 };
238};
239
240ftms = {
241 name = tuples_by_type;
242 values = {
243 v = 201304;
244 cxxmin = 14;
245 };
246};
247
248ftms = {
249 name = robust_nonmodifying_seq_ops;
250 values = {
251 v = 201304;
252 cxxmin = 14;
253 };
254};
255
256ftms = {
257 name = to_chars;
8fa1430b
JW
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";
264 };
b7b801b2
AA
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";
271 };
272};
273
274ftms = {
275 name = chrono_udls;
276 values = {
277 v = 201304;
278 cxxmin = 14;
279 hosted = yes;
280 };
281};
282
283ftms = {
284 name = complex_udls;
285 values = {
286 v = 201309;
287 cxxmin = 14;
288 hosted = yes;
289 };
290};
291
292ftms = {
293 name = generic_associative_lookup;
294 values = {
295 v = 201304;
296 cxxmin = 14;
297 hosted = yes;
298 };
299};
300
301ftms = {
302 name = make_unique;
303 values = {
304 v = 201304;
305 cxxmin = 14;
306 hosted = yes;
307 };
308};
309
310ftms = {
311 name = quoted_string_io;
312 values = {
313 v = 201304;
314 cxxmin = 14;
315 hosted = yes;
316 };
317};
318
319ftms = {
320 name = shared_timed_mutex;
321 values = {
322 v = 201402;
323 cxxmin = 14;
324 hosted = yes;
325 gthread = yes;
326 };
327};
328
329ftms = {
330 name = string_udls;
331 values = {
332 v = 201304;
333 cxxmin = 14;
334 hosted = yes;
335 };
336};
337
338ftms = {
339 name = addressof_constexpr;
340 values = {
341 // _GLIBCXX_RESOLVE_LIB_DEFECTS
342 // 2296. std::addressof should be constexpr
343 v = 201603;
344 cxxmin = 17;
345 };
346};
347
348ftms = {
349 name = any;
350 values = {
351 v = 201606;
352 cxxmin = 17;
353 };
354};
355
356ftms = {
357 name = apply;
358 values = {
359 v = 201603;
360 cxxmin = 17;
361 };
362};
363
364ftms = {
365 name = as_const;
366 values = {
367 v = 201510;
368 cxxmin = 17;
369 };
370};
371
372ftms = {
373 name = atomic_is_always_lock_free;
374 values = {
375 v = 201603;
376 cxxmin = 17;
377 };
378};
379
380ftms = {
381 name = bool_constant;
382 values = {
383 v = 201505;
384 cxxmin = 17;
385 };
386};
387
388ftms = {
389 name = byte;
390 values = {
391 v = 201603;
392 cxxmin = 17;
393 };
394};
395
396ftms = {
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)";
402 };
403};
404
405ftms = {
406 name = hardware_interference_size;
407 values = {
408 v = 201703;
409 cxxmin = 17;
410 extra_cond = "defined(__GCC_DESTRUCTIVE_SIZE)";
411 };
412};
413
414ftms = {
415 name = invoke;
416 values = {
417 v = 201411;
418 cxxmin = 17;
419 };
420};
421
422ftms = {
423 name = is_aggregate;
424 values = {
425 v = 201703;
426 cxxmin = 17;
427 extra_cond = "defined(_GLIBCXX_HAVE_BUILTIN_IS_AGGREGATE)";
428 };
429};
430
431ftms = {
432 name = is_invocable;
433 values = {
434 v = 201703;
435 cxxmin = 17;
436 };
437};
438
439ftms = {
440 name = launder;
441 values = {
442 v = 201606;
443 cxxmin = 17;
444 extra_cond = "defined(_GLIBCXX_HAVE_BUILTIN_LAUNDER)";
445 };
446};
447
448ftms = {
449 name = logical_traits;
450 values = {
451 v = 201510;
452 cxxmin = 17;
453 };
454};
455
456ftms = {
457 name = make_from_tuple;
458 values = {
459 v = 201606;
460 cxxmin = 17;
461 };
462};
463
464ftms = {
465 name = not_fn;
466 values = {
467 v = 201603;
468 cxxmin = 17;
469 };
470};
471
472ftms = {
473 name = type_trait_variable_templates;
474 values = {
475 v = 201510;
476 cxxmin = 17;
477 };
478};
479
480ftms = {
481 name = variant;
482 values = {
483 v = 202106;
484 cxxmin = 20;
485 extra_cond = "__cpp_concepts >= 202002L && __cpp_constexpr >= 201811L";
486 };
487 values = {
488 v = 202102;
489 cxxmin = 17;
490 };
491};
492
493ftms = {
494 // Used in earlier draft of SD6.
495 name = lcm;
496 values = {
497 v = 201606;
498 cxxmin = 17;
499 };
500};
501
502ftms = {
503 // Used in earlier draft of SD6.
504 name = gcd;
505 values = {
506 v = 201606;
507 cxxmin = 17;
508 };
509};
510
511ftms = {
512 name = gcd_lcm;
513 values = {
514 v = 201606;
515 cxxmin = 17;
516 };
517};
518
519ftms = {
520 name = raw_memory_algorithms;
521 values = {
522 v = 201606;
523 cxxmin = 17;
524 };
525};
526
527ftms = {
528 name = array_constexpr;
529 values = {
530 v = 201811;
531 cxxmin = 20;
532 };
533 values = {
534 v = 201803;
535 cxxmin = 17;
536 };
537};
538
539ftms = {
540 name = nonmember_container_access;
541 values = {
542 v = 201411;
543 cxxmin = 17;
544 };
545};
546
547ftms = {
548 name = clamp;
549 values = {
550 v = 201603;
551 cxxmin = 17;
552 };
553};
554
555ftms = {
556 name = sample;
557 values = {
558 v = 201603;
559 cxxmin = 17;
560 };
561};
562
563ftms = {
564 name = boyer_moore_searcher;
565 values = {
566 v = 201603;
567 cxxmin = 17;
568 hosted = yes;
569 };
570};
571
572ftms = {
573 name = chrono;
574 values = {
575 v = 201907;
576 cxxmin = 20;
577 hosted = yes;
578 };
579 values = {
580 v = 201611;
581 cxxmin = 17;
582 hosted = yes;
583 };
584};
585
586ftms = {
587 name = execution;
588 values = {
589 v = 201902; // FIXME: should be 201603L
590 cxxmin = 17;
591 hosted = yes;
592 };
593};
594
595ftms = {
596 name = filesystem;
597 values = {
598 v = 201703;
599 cxxmin = 17;
600 hosted = yes;
601 };
602};
603
604ftms = {
605 name = hypot;
606 values = {
607 v = 201603;
608 cxxmin = 17;
609 hosted = yes;
610 };
611};
612
613ftms = {
614 name = map_try_emplace;
615 values = {
616 v = 201411;
617 cxxmin = 17;
618 hosted = yes;
619 };
620};
621
622ftms = {
623 name = math_special_functions;
624 values = {
625 v = 201603;
626 cxxmin = 17;
627 hosted = yes;
628 };
629};
630
631ftms = {
632 name = memory_resource;
633 values = {
634 v = 201603;
635 cxxmin = 17;
636 hosted = yes;
637 gthread = yes;
638 };
639 values = {
640 v = 1;
641 /* For when there's no gthread. */
642 cxxmin = 17;
643 hosted = yes;
644 gthread = no;
645 };
646};
647
648ftms = {
649 name = node_extract;
650 values = {
651 v = 201606;
652 cxxmin = 17;
653 hosted = yes;
654 };
655};
656
657ftms = {
658 name = parallel_algorithm;
659 values = {
660 v = 201603;
661 cxxmin = 17;
662 hosted = yes;
663 };
664};
665
666ftms = {
667 name = scoped_lock;
668 values = {
669 v = 201703;
670 cxxmin = 17;
671 hosted = yes;
672 gthread = yes;
673 };
674};
675
676ftms = {
677 name = shared_mutex;
678 values = {
679 v = 201505;
680 cxxmin = 17;
681 hosted = yes;
682 gthread = yes;
683 };
684};
685
686ftms = {
687 name = shared_ptr_weak_type;
688 values = {
689 v = 201606;
690 cxxmin = 17;
691 hosted = yes;
692 };
693};
694
695ftms = {
696 name = string_view;
697 values = {
698 v = 201803;
699 cxxmin = 17;
700 hosted = yes;
701 };
702};
703
704ftms = {
705 name = unordered_map_try_emplace;
706 values = {
707 v = 201411;
708 cxxmin = 17;
709 hosted = yes;
710 };
711};
712
713ftms = {
714 name = assume_aligned;
715 values = {
716 v = 201811;
717 cxxmin = 20;
718 };
719};
720
721ftms = {
722 name = atomic_flag_test;
723 values = {
724 v = 201907;
725 cxxmin = 20;
726 };
727};
728
729ftms = {
730 name = atomic_float;
731 values = {
732 v = 201711;
733 cxxmin = 20;
734 };
735};
736
737ftms = {
738 name = atomic_lock_free_type_aliases;
739 values = {
740 v = 201907;
741 cxxmin = 20;
742 };
743};
744
745ftms = {
746 name = atomic_ref;
747 values = {
748 v = 201806;
749 cxxmin = 20;
750 };
751};
752
753ftms = {
754 name = atomic_value_initialization;
755 values = {
756 v = 201911;
757 cxxmin = 20;
758 };
759};
760
761ftms = {
762 name = bind_front;
763 values = {
764 v = 201907;
765 cxxmin = 20;
766 };
767};
768
769ftms = {
770 name = starts_ends_with;
771 values = {
772 v = 201711;
773 cxxmin = 20;
774 };
775};
776
777ftms = {
778 name = bit_cast;
779 values = {
780 v = 201806;
781 cxxmin = 20;
782 extra_cond = "__has_builtin(__builtin_bit_cast)";
783 };
784};
785
786ftms = {
787 name = bitops;
788 values = {
789 v = 201907;
790 cxxmin = 20;
791 };
792};
793
794ftms = {
795 name = bounded_array_traits;
796 values = {
797 v = 201902;
798 cxxmin = 20;
799 };
800};
801
802ftms = {
803 name = concepts;
804 values = {
805 v = 202002;
806 cxxmin = 20;
807 extra_cond = "__cpp_concepts >= 201907L";
808 };
809};
810
811// Moved down here (after concepts) by topological sort.
812ftms = {
813 name = optional;
814 values = {
815 v = 202110;
816 cxxmin = 23;
817 extra_cond = "__glibcxx_concepts";
818 };
819 values = {
820 v = 202106;
821 cxxmin = 20;
822 };
823 values = {
824 v = 201606;
825 cxxmin = 17;
826 };
827};
828
829ftms = {
830 name = destroying_delete;
831 values = {
832 v = 201806;
833 cxxmin = 20;
834 extra_cond = "__cpp_impl_destroying_delete";
835 };
836};
837
838ftms = {
839 name = constexpr_string_view;
840 values = {
841 v = 201811;
842 cxxmin = 20;
843 };
844};
845
846ftms = {
847 name = endian;
848 values = {
849 v = 201907;
850 cxxmin = 20;
851 };
852};
853
854ftms = {
855 name = int_pow2;
856 values = {
857 v = 202002;
858 cxxmin = 20;
859 };
860};
861
862ftms = {
863 name = integer_comparison_functions;
864 values = {
865 v = 202002;
866 cxxmin = 20;
867 };
868};
869
870ftms = {
871 name = is_constant_evaluated;
872 values = {
873 v = 201811;
874 cxxmin = 20;
875 extra_cond = "defined(_GLIBCXX_HAVE_IS_CONSTANT_EVALUATED)";
876 };
877};
878
879// Moved down here (after is_constant_evaluated) by topological sort.
880ftms = {
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)";
887 };
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";
893 };
894};
895
896ftms = {
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)";
903 };
904};
905
906ftms = {
907 name = is_nothrow_convertible;
908 values = {
909 v = 201806;
910 cxxmin = 20;
911 };
912};
913
914ftms = {
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)";
922 };
923};
924
925ftms = {
926 name = math_constants;
927 values = {
928 v = 201907;
929 cxxmin = 20;
930 };
931};
932
933ftms = {
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";
940 };
941};
942
943ftms = {
944 name = remove_cvref;
945 values = {
946 v = 201711;
947 cxxmin = 20;
948 };
949};
950
951ftms = {
952 name = source_location;
953 values = {
954 v = 201907;
955 cxxmin = 20;
956 extra_cond = "__has_builtin(__builtin_source_location)";
957 };
958};
959
960ftms = {
961 name = span;
1fa85dcf
JW
962 values = {
963 v = 202311;
964 cxxmin = 26;
965 extra_cond = "__glibcxx_concepts";
966 };
b7b801b2
AA
967 values = {
968 v = 202002;
969 cxxmin = 20;
970 extra_cond = "__glibcxx_concepts";
971 };
972};
973
974ftms = {
975 name = ssize;
976 values = {
977 v = 201902;
978 cxxmin = 20;
979 };
980};
981
982ftms = {
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";
989 };
990};
991
992ftms = {
993 name = to_address;
994 values = {
995 v = 201711;
996 cxxmin = 20;
997 };
998};
999
1000ftms = {
1001 name = to_array;
1002 values = {
1003 v = 201907;
1004 cxxmin = 20;
1005 extra_cond = "__cpp_generic_lambdas >= 201707L";
1006 };
1007};
1008
1009ftms = {
1010 name = type_identity;
1011 values = {
1012 v = 201806;
1013 cxxmin = 20;
1014 };
1015};
1016
1017ftms = {
1018 name = unwrap_ref;
1019 values = {
1020 v = 201811;
1021 cxxmin = 20;
1022 };
1023};
1024
1025ftms = {
1026 name = constexpr_iterator;
1027 values = {
1028 v = 201811;
1029 cxxmin = 20;
1030 };
1031};
1032
1033ftms = {
1034 name = interpolate;
1035 values = {
1036 v = 201902;
1037 cxxmin = 20;
1038 };
1039};
1040
1041ftms = {
1042 name = constexpr_utility;
1043 values = {
1044 v = 201811;
1045 cxxmin = 20;
1046 };
1047};
1048
1049ftms = {
1050 name = shift;
1051 values = {
1052 v = 201806;
1053 cxxmin = 20;
1054 };
1055};
1056
1057ftms = {
1058 name = ranges;
1059 values = {
6854e3ac 1060 v = 202211;
b7b801b2
AA
1061 cxxmin = 23;
1062 extra_cond = "__glibcxx_concepts";
1063 };
1064 values = {
1065 v = 202110;
1066 cxxmin = 20;
1067 extra_cond = "__glibcxx_concepts";
1068 };
1069};
1070
1071ftms = {
1072 name = constexpr_numeric;
1073 values = {
1074 v = 201911;
1075 cxxmin = 20;
1076 };
1077};
1078
1079ftms = {
1080 name = constexpr_functional;
1081 values = {
1082 v = 201907;
1083 cxxmin = 20;
1084 };
1085};
1086
1087ftms = {
1088 name = constexpr_algorithms;
1089 values = {
1090 v = 201806;
1091 cxxmin = 20;
1092 };
1093};
1094
1095ftms = {
1096 name = constexpr_tuple;
1097 values = {
1098 v = 201811;
1099 cxxmin = 20;
1100 };
1101};
1102
1103ftms = {
1104 name = constexpr_memory;
1105 values = {
1106 v = 202202;
1107 cxxmin = 23;
1108 extra_cond = "__cpp_constexpr_dynamic_alloc";
1109 };
1110 values = {
1111 v = 201811;
1112 cxxmin = 20;
1113 };
1114};
1115
1116ftms = {
1117 name = atomic_shared_ptr;
1118 values = {
1119 v = 201711;
1120 cxxmin = 20;
1121 hosted = yes;
1122 };
1123};
1124
1125ftms = {
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;
1133 };
1134 values = {
1135 v = 201907;
1136 cxxmin = 20;
1137 hosted = yes;
1138 gthread = no;
1139 extra_cond = "defined(_GLIBCXX_HAVE_LINUX_FUTEX)";
1140 };
1141};
1142
1143ftms = {
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";
1150 };
1151};
1152
1153ftms = {
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 = {
cdf45e00 1163 v = 202110;
b7b801b2
AA
1164 cxxmin = 20;
1165 hosted = yes;
1166 };
1167};
1168
b7b801b2
AA
1169// FIXME: #define __glibcxx_execution 201902L
1170
1171ftms = {
1172 name = constexpr_complex;
1173 values = {
1174 v = 201711;
1175 cxxmin = 20;
1176 hosted = yes;
1177 };
1178};
1179
1180ftms = {
1181 name = constexpr_dynamic_alloc;
1182 values = {
1183 v = 201907;
1184 cxxmin = 20;
1185 hosted = yes;
1186 };
1187};
1188
1189ftms = {
1190 name = constexpr_string;
1191 values = {
1192 v = 201907;
1193 cxxmin = 20;
1194 hosted = yes;
1195 cxx11abi = yes;
1196 extra_cond = "defined(__glibcxx_is_constant_evaluated)";
1197 };
1198 values = {
1199 v = 201811;
1200 cxxmin = 20;
1201 hosted = yes;
1202 cxx11abi = no;
1203 extra_cond = "defined(__glibcxx_is_constant_evaluated)";
1204 };
1205 values = {
1206 v = 201611;
1207 cxxmin = 17;
1208 hosted = yes;
1209 extra_cond = "_GLIBCXX_HAVE_IS_CONSTANT_EVALUATED";
1210 };
1211};
1212
1213ftms = {
1214 name = constexpr_vector;
1215 values = {
1216 v = 201907;
1217 cxxmin = 20;
1218 hosted = yes;
1219 };
1220};
1221
1222ftms = {
1223 name = erase_if;
1224 values = {
1225 v = 202002;
1226 cxxmin = 20;
1227 hosted = yes;
1228 };
1229};
1230
1231ftms = {
1232 name = generic_unordered_lookup;
1233 values = {
1234 v = 201811;
1235 cxxmin = 20;
1236 hosted = yes;
1237 };
1238};
1239
1240ftms = {
1241 name = jthread;
1242 values = {
1243 v = 201911;
1244 gthread = yes;
1245 hosted = yes;
1246 cxxmin = 20;
1247 };
1248};
1249
1250ftms = {
1251 name = latch;
1252 values = {
1253 v = 201907;
1254 cxxmin = 20;
1255 extra_cond = "__glibcxx_atomic_wait";
1256 };
1257};
1258
1259ftms = {
1260 name = list_remove_return_type;
1261 values = {
1262 v = 201806;
1263 cxxmin = 20;
1264 hosted = yes;
1265 };
1266};
1267
1268ftms = {
1269 name = polymorphic_allocator;
1270 values = {
1271 v = 201902;
1272 cxxmin = 20;
1273 hosted = yes;
1274 };
1275};
1276
1277ftms = {
1278 name = move_iterator_concept;
1279 values = {
1280 v = 202207;
1281 // This is P2520R0, a C++23 change, but we treat it as a DR against C++20.
1282 cxxmin = 20;
1283 extra_cond = "__glibcxx_concepts";
1284 };
1285};
1286
1287ftms = {
1288 name = semaphore;
1289 values = {
1290 v = 201907;
1291 cxxmin = 20;
1292 hosted = yes;
1293 extra_cond = "__glibcxx_atomic_wait || _GLIBCXX_HAVE_POSIX_SEMAPHORE";
1294 };
1295};
1296
1297ftms = {
1298 name = smart_ptr_for_overwrite;
1299 values = {
1300 v = 202002;
1301 cxxmin = 20;
1302 hosted = yes;
1303 };
1304};
1305
1306ftms = {
1307 name = syncbuf;
1308 values = {
1309 v = 201803;
1310 cxxmin = 20;
1311 hosted = yes;
1312 cxx11abi = yes;
1313 };
1314};
1315
1316ftms = {
1317 name = byteswap;
1318 values = {
1319 v = 202110;
1320 cxxmin = 23;
1321 };
1322};
1323
1324ftms = {
1325 name = constexpr_charconv;
1326 values = {
1327 v = 202207;
1328 cxxmin = 23;
1329 };
1330};
1331
1332ftms = {
1333 name = constexpr_typeinfo;
1334 values = {
1335 v = 202106;
1336 cxxmin = 23;
1337 };
1338};
1339
1340ftms = {
1341 name = expected;
1342 values = {
1343 v = 202211;
1344 cxxmin = 23;
1345 extra_cond = "__cpp_concepts >= 202002L";
1346 };
1347};
1348
43626143
JW
1349ftms = {
1350 name = freestanding_algorithm;
1351 values = {
1352 v = 202311;
1353 // This is a C++26 feature, but we support it in C++23.
1354 cxxmin = 23;
1355 };
1356};
1357
1358ftms = {
1359 name = freestanding_array;
1360 values = {
1361 v = 202311;
1362 // This is a C++26 feature, but we support it in C++23.
1363 cxxmin = 23;
1364 };
1365};
1366
7adb7c6e
JW
1367ftms = {
1368 name = freestanding_cstring;
1369 values = {
1370 v = 202311;
1371 // This is a C++26 feature, but we support it in C++23.
1372 cxxmin = 23;
1373 };
1374};
1375
1fa85dcf
JW
1376ftms = {
1377 name = freestanding_expected;
1378 values = {
1379 v = 202311;
1380 cxxmin = 23;
43626143 1381 // This is a C++26 feature, but we support it in C++23.
1fa85dcf
JW
1382 extra_cond = "__cpp_lib_expected";
1383 };
1384};
1385
43626143
JW
1386ftms = {
1387 name = freestanding_optional;
1388 values = {
1389 v = 202311;
1390 // This is a C++26 feature, but we support it in C++23.
1391 cxxmin = 23;
1392 };
1393};
1394
1395ftms = {
1396 name = freestanding_string_view;
1397 values = {
1398 v = 202311;
1399 // This is a C++26 feature, but we support it in C++23.
1400 cxxmin = 23;
1401 };
1402};
1403
1404ftms = {
1405 name = freestanding_variant;
1406 values = {
1407 v = 202311;
1408 // This is a C++26 feature, but we support it in C++23.
1409 cxxmin = 23;
1410 };
1411};
1fa85dcf 1412
b7b801b2
AA
1413ftms = {
1414 name = invoke_r;
1415 values = {
1416 v = 202106;
1417 cxxmin = 23;
1418 };
1419};
1420
1421ftms = {
1422 name = is_scoped_enum;
1423 values = {
1424 v = 202011;
1425 cxxmin = 23;
1426 };
1427};
1428
1429ftms = {
1430 name = reference_from_temporary;
1431 values = {
1432 v = 202202;
1433 extra_cond =
1434 "__has_builtin(__reference_constructs_from_temporary) "
1435 "&& __has_builtin(__reference_converts_from_temporary)";
1436 cxxmin = 23;
1437 };
1438};
1439
7a6a29c4
JW
1440//ftms = {
1441// name = container_ranges;
1442// values = {
1443// v = 202202;
1444// cxxmin = 23;
1445// hosted = yes;
1446// };
1447//};
b7b801b2
AA
1448
1449ftms = {
7a6a29c4 1450 name = ranges_to_container;
b7b801b2
AA
1451 values = {
1452 v = 202202;
1453 cxxmin = 23;
7a6a29c4 1454 hosted = yes;
b7b801b2
AA
1455 };
1456};
1457
1458ftms = {
1459 name = ranges_zip;
1460 values = {
1461 v = 202110;
1462 cxxmin = 23;
1463 };
1464};
1465
1466ftms = {
1467 name = ranges_chunk;
1468 values = {
1469 v = 202202;
1470 cxxmin = 23;
1471 };
1472};
1473
1474ftms = {
1475 name = ranges_slide;
1476 values = {
1477 v = 202202;
1478 cxxmin = 23;
1479 };
1480};
1481
1482ftms = {
1483 name = ranges_chunk_by;
1484 values = {
1485 v = 202202;
1486 cxxmin = 23;
1487 };
1488};
1489
1490ftms = {
1491 name = ranges_join_with;
1492 values = {
1493 v = 202202;
1494 cxxmin = 23;
1495 };
1496};
1497
1498ftms = {
1499 name = ranges_repeat;
1500 values = {
1501 v = 202207;
1502 cxxmin = 23;
1503 };
1504};
1505
1506ftms = {
1507 name = ranges_stride;
1508 values = {
1509 v = 202207;
1510 cxxmin = 23;
1511 };
1512};
1513
1514ftms = {
1515 name = ranges_cartesian_product;
1516 values = {
1517 v = 202207;
1518 cxxmin = 23;
1519 };
1520};
1521
1522ftms = {
1523 name = ranges_as_rvalue;
1524 values = {
1525 v = 202207;
1526 cxxmin = 23;
1527 };
1528};
1529
1530ftms = {
1531 name = ranges_as_const;
1532 values = {
1533 v = 202207;
1534 cxxmin = 23;
1535 };
1536};
1537
1538ftms = {
1539 name = ranges_enumerate;
1540 values = {
1541 v = 202302;
1542 cxxmin = 23;
1543 };
1544};
1545
1546ftms = {
1547 name = ranges_fold;
1548 values = {
1549 v = 202207;
1550 cxxmin = 23;
1551 };
1552};
1553
1554ftms = {
1555 name = ranges_contains;
1556 values = {
1557 v = 202207;
1558 cxxmin = 23;
1559 };
1560};
1561
1562ftms = {
1563 name = ranges_iota;
1564 values = {
1565 v = 202202;
1566 cxxmin = 23;
1567 };
1568};
1569
1570ftms = {
1571 name = ranges_find_last;
1572 values = {
1573 v = 202207;
1574 cxxmin = 23;
1575 };
1576};
1577
1578ftms = {
1579 name = constexpr_bitset;
1580 values = {
1581 v = 202202;
1582 cxxmin = 23;
1583 hosted = yes;
1584 extra_cond = "__cpp_constexpr_dynamic_alloc";
1585 };
1586};
1587
1588ftms = {
1589 name = stdatomic_h;
1590 values = {
1591 v = 202011;
1592 cxxmin = 23;
1593 };
1594};
1595
1596ftms = {
1597 name = adaptor_iterator_pair_constructor;
1598 values = {
1599 v = 202106;
1600 cxxmin = 23;
1601 hosted = yes;
1602 };
1603};
1604
f1dd83b7
JW
1605ftms = {
1606 name = formatters;
1607 values = {
1608 v = 202302;
1609 cxxmin = 23;
1610 hosted = yes;
1611 };
1612};
1613
55cf4f84
JW
1614ftms = {
1615 name = forward_like;
1616 values = {
1617 v = 202207;
1618 cxxmin = 23;
1619 };
1620};
1621
b7b801b2
AA
1622ftms = {
1623 name = ios_noreplace;
1624 values = {
1625 v = 202207;
1626 cxxmin = 23;
1627 hosted = yes;
1628 };
1629};
1630
1631ftms = {
1632 name = move_only_function;
1633 values = {
1634 v = 202110;
1635 cxxmin = 23;
1636 hosted = yes;
1637 };
1638};
1639
c7f6537d
JW
1640ftms = {
1641 name = out_ptr;
1642 values = {
1fa85dcf 1643 v = 202311;
c7f6537d
JW
1644 cxxmin = 23;
1645 };
1646};
1647
fe54b577
JW
1648ftms = {
1649 name = print;
1650 values = {
1651 v = 202211;
1652 cxxmin = 23;
1653 hosted = yes;
1654 };
1655};
1656
b7b801b2
AA
1657ftms = {
1658 name = spanstream;
1659 values = {
1660 v = 202106;
1661 cxxmin = 23;
1662 hosted = yes;
1663 extra_cond = "__glibcxx_span";
1664 };
1665};
1666
1667ftms = {
1668 name = stacktrace;
1669 values = {
1670 v = 202011;
1671 cxxmin = 23;
1672 hosted = yes;
1673 extra_cond = "_GLIBCXX_HAVE_STACKTRACE";
1674 };
1675};
1676
1677ftms = {
1678 name = string_contains;
1679 values = {
1680 v = 202011;
1681 cxxmin = 23;
1682 hosted = yes;
1683 };
1684};
1685
1686ftms = {
1687 name = string_resize_and_overwrite;
1688 values = {
1689 v = 202110;
1690 cxxmin = 23;
1691 hosted = yes;
b7b801b2
AA
1692 };
1693};
1694
7a6a29c4
JW
1695ftms = {
1696 name = to_underlying;
1697 values = {
1698 v = 202102;
1699 cxxmin = 23;
1700 };
1701};
1702
1703ftms = {
1704 name = unreachable;
1705 values = {
1706 v = 202202;
1707 cxxmin = 23;
1708 };
1709};
1710
c4baeaec
JW
1711ftms = {
1712 name = fstream_native_handle;
1713 values = {
1714 v = 202306;
1715 cxxmin = 26;
1716 hosted = yes;
1717 };
1718};
1719
c47430bb
JW
1720ftms = {
1721 name = ratio;
1722 values = {
1723 v = 202306;
1724 cxxmin = 26;
1725 };
1726};
1727
568eb2d2
JW
1728ftms = {
1729 name = saturation_arithmetic;
1730 values = {
1731 v = 202311;
1732 cxxmin = 26;
1733 };
1734};
1735
aeed687f
JW
1736ftms = {
1737 name = to_string;
1738 values = {
1739 v = 202306;
1740 cxxmin = 26;
1741 hosted = yes;
1742 extra_cond = "__glibcxx_to_chars";
1743 };
1744};
1745
ec2ec24a
AA
1746ftms = {
1747 name = generator;
1748 values = {
1749 v = 202207;
1750 cxxmin = 23;
1751 extra_cond = "__glibcxx_coroutine";
1752 };
1753};
1754
b7b801b2
AA
1755// Standard test specifications.
1756stds[97] = ">= 199711L";
1757stds[03] = ">= 199711L";
1758stds[11] = ">= 201103L";
1759stds[14] = ">= 201402L";
1760stds[17] = ">= 201703L";
1761stds[20] = ">= 202002L";
e469f900 1762stds[23] = ">= 202100L"; // Should be 202302L but Clang 16 uses 202101L
aeed687f 1763stds[26] = "> 202302L"; // TODO: update when finalized
b7b801b2
AA
1764
1765// Local Variables:
1766// compile-command: "autogen version.def"
1767// End: