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