]> git.ipfire.org Git - thirdparty/gcc.git/blob - libstdc++-v3/include/bits/version.def
Update copyright years.
[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 extra_cond = "!defined(_GLIBCXX_DEBUG)";
213 };
214 };
215
216 ftms = {
217 name = transformation_trait_aliases;
218 values = {
219 v = 201304;
220 cxxmin = 14;
221 };
222 };
223
224 ftms = {
225 name = transparent_operators;
226 values = {
227 v = 201510;
228 cxxmin = 14;
229 };
230 };
231
232 ftms = {
233 name = tuple_element_t;
234 values = {
235 v = 201402;
236 cxxmin = 14;
237 };
238 };
239
240 ftms = {
241 name = tuples_by_type;
242 values = {
243 v = 201304;
244 cxxmin = 14;
245 };
246 };
247
248 ftms = {
249 name = robust_nonmodifying_seq_ops;
250 values = {
251 v = 201304;
252 cxxmin = 14;
253 };
254 };
255
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";
264 };
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
274 ftms = {
275 name = chrono_udls;
276 values = {
277 v = 201304;
278 cxxmin = 14;
279 hosted = yes;
280 };
281 };
282
283 ftms = {
284 name = complex_udls;
285 values = {
286 v = 201309;
287 cxxmin = 14;
288 hosted = yes;
289 };
290 };
291
292 ftms = {
293 name = generic_associative_lookup;
294 values = {
295 v = 201304;
296 cxxmin = 14;
297 hosted = yes;
298 };
299 };
300
301 ftms = {
302 name = make_unique;
303 values = {
304 v = 201304;
305 cxxmin = 14;
306 hosted = yes;
307 };
308 };
309
310 ftms = {
311 name = quoted_string_io;
312 values = {
313 v = 201304;
314 cxxmin = 14;
315 hosted = yes;
316 };
317 };
318
319 ftms = {
320 name = shared_timed_mutex;
321 values = {
322 v = 201402;
323 cxxmin = 14;
324 hosted = yes;
325 gthread = yes;
326 };
327 };
328
329 ftms = {
330 name = string_udls;
331 values = {
332 v = 201304;
333 cxxmin = 14;
334 hosted = yes;
335 };
336 };
337
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;
345 };
346 };
347
348 ftms = {
349 name = any;
350 values = {
351 v = 201606;
352 cxxmin = 17;
353 };
354 };
355
356 ftms = {
357 name = apply;
358 values = {
359 v = 201603;
360 cxxmin = 17;
361 };
362 };
363
364 ftms = {
365 name = as_const;
366 values = {
367 v = 201510;
368 cxxmin = 17;
369 };
370 };
371
372 ftms = {
373 name = atomic_is_always_lock_free;
374 values = {
375 v = 201603;
376 cxxmin = 17;
377 };
378 };
379
380 ftms = {
381 name = bool_constant;
382 values = {
383 v = 201505;
384 cxxmin = 17;
385 };
386 };
387
388 ftms = {
389 name = byte;
390 values = {
391 v = 201603;
392 cxxmin = 17;
393 };
394 };
395
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)";
402 };
403 };
404
405 ftms = {
406 name = hardware_interference_size;
407 values = {
408 v = 201703;
409 cxxmin = 17;
410 extra_cond = "defined(__GCC_DESTRUCTIVE_SIZE)";
411 };
412 };
413
414 ftms = {
415 name = invoke;
416 values = {
417 v = 201411;
418 cxxmin = 17;
419 };
420 };
421
422 ftms = {
423 name = is_aggregate;
424 values = {
425 v = 201703;
426 cxxmin = 17;
427 extra_cond = "defined(_GLIBCXX_HAVE_BUILTIN_IS_AGGREGATE)";
428 };
429 };
430
431 ftms = {
432 name = is_invocable;
433 values = {
434 v = 201703;
435 cxxmin = 17;
436 };
437 };
438
439 ftms = {
440 name = launder;
441 values = {
442 v = 201606;
443 cxxmin = 17;
444 extra_cond = "defined(_GLIBCXX_HAVE_BUILTIN_LAUNDER)";
445 };
446 };
447
448 ftms = {
449 name = logical_traits;
450 values = {
451 v = 201510;
452 cxxmin = 17;
453 };
454 };
455
456 ftms = {
457 name = make_from_tuple;
458 values = {
459 v = 201606;
460 cxxmin = 17;
461 };
462 };
463
464 ftms = {
465 name = not_fn;
466 values = {
467 v = 201603;
468 cxxmin = 17;
469 };
470 };
471
472 ftms = {
473 name = type_trait_variable_templates;
474 values = {
475 v = 201510;
476 cxxmin = 17;
477 };
478 };
479
480 ftms = {
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
493 ftms = {
494 // Used in earlier draft of SD6.
495 name = lcm;
496 values = {
497 v = 201606;
498 cxxmin = 17;
499 };
500 };
501
502 ftms = {
503 // Used in earlier draft of SD6.
504 name = gcd;
505 values = {
506 v = 201606;
507 cxxmin = 17;
508 };
509 };
510
511 ftms = {
512 name = gcd_lcm;
513 values = {
514 v = 201606;
515 cxxmin = 17;
516 };
517 };
518
519 ftms = {
520 name = raw_memory_algorithms;
521 values = {
522 v = 201606;
523 cxxmin = 17;
524 };
525 };
526
527 ftms = {
528 name = array_constexpr;
529 values = {
530 v = 201811;
531 cxxmin = 20;
532 };
533 values = {
534 v = 201803;
535 cxxmin = 17;
536 };
537 };
538
539 ftms = {
540 name = nonmember_container_access;
541 values = {
542 v = 201411;
543 cxxmin = 17;
544 };
545 };
546
547 ftms = {
548 name = clamp;
549 values = {
550 v = 201603;
551 cxxmin = 17;
552 };
553 };
554
555 ftms = {
556 name = sample;
557 values = {
558 v = 201603;
559 cxxmin = 17;
560 };
561 };
562
563 ftms = {
564 name = boyer_moore_searcher;
565 values = {
566 v = 201603;
567 cxxmin = 17;
568 hosted = yes;
569 };
570 };
571
572 ftms = {
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
586 ftms = {
587 name = execution;
588 values = {
589 v = 201902; // FIXME: should be 201603L
590 cxxmin = 17;
591 hosted = yes;
592 };
593 };
594
595 ftms = {
596 name = filesystem;
597 values = {
598 v = 201703;
599 cxxmin = 17;
600 hosted = yes;
601 };
602 };
603
604 ftms = {
605 name = hypot;
606 values = {
607 v = 201603;
608 cxxmin = 17;
609 hosted = yes;
610 };
611 };
612
613 ftms = {
614 name = map_try_emplace;
615 values = {
616 v = 201411;
617 cxxmin = 17;
618 hosted = yes;
619 };
620 };
621
622 ftms = {
623 name = math_special_functions;
624 values = {
625 v = 201603;
626 cxxmin = 17;
627 hosted = yes;
628 };
629 };
630
631 ftms = {
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
648 ftms = {
649 name = node_extract;
650 values = {
651 v = 201606;
652 cxxmin = 17;
653 hosted = yes;
654 };
655 };
656
657 ftms = {
658 name = parallel_algorithm;
659 values = {
660 v = 201603;
661 cxxmin = 17;
662 hosted = yes;
663 };
664 };
665
666 ftms = {
667 name = scoped_lock;
668 values = {
669 v = 201703;
670 cxxmin = 17;
671 hosted = yes;
672 gthread = yes;
673 };
674 };
675
676 ftms = {
677 name = shared_mutex;
678 values = {
679 v = 201505;
680 cxxmin = 17;
681 hosted = yes;
682 gthread = yes;
683 };
684 };
685
686 ftms = {
687 name = shared_ptr_weak_type;
688 values = {
689 v = 201606;
690 cxxmin = 17;
691 hosted = yes;
692 };
693 };
694
695 ftms = {
696 name = string_view;
697 values = {
698 v = 201803;
699 cxxmin = 17;
700 hosted = yes;
701 };
702 };
703
704 ftms = {
705 name = unordered_map_try_emplace;
706 values = {
707 v = 201411;
708 cxxmin = 17;
709 hosted = yes;
710 };
711 };
712
713 ftms = {
714 name = assume_aligned;
715 values = {
716 v = 201811;
717 cxxmin = 20;
718 };
719 };
720
721 ftms = {
722 name = atomic_flag_test;
723 values = {
724 v = 201907;
725 cxxmin = 20;
726 };
727 };
728
729 ftms = {
730 name = atomic_float;
731 values = {
732 v = 201711;
733 cxxmin = 20;
734 };
735 };
736
737 ftms = {
738 name = atomic_lock_free_type_aliases;
739 values = {
740 v = 201907;
741 cxxmin = 20;
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 = starts_ends_with;
771 values = {
772 v = 201711;
773 cxxmin = 20;
774 };
775 };
776
777 ftms = {
778 name = bit_cast;
779 values = {
780 v = 201806;
781 cxxmin = 20;
782 extra_cond = "__has_builtin(__builtin_bit_cast)";
783 };
784 };
785
786 ftms = {
787 name = bitops;
788 values = {
789 v = 201907;
790 cxxmin = 20;
791 };
792 };
793
794 ftms = {
795 name = bounded_array_traits;
796 values = {
797 v = 201902;
798 cxxmin = 20;
799 };
800 };
801
802 ftms = {
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.
812 ftms = {
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
829 ftms = {
830 name = destroying_delete;
831 values = {
832 v = 201806;
833 cxxmin = 20;
834 extra_cond = "__cpp_impl_destroying_delete";
835 };
836 };
837
838 ftms = {
839 name = constexpr_string_view;
840 values = {
841 v = 201811;
842 cxxmin = 20;
843 };
844 };
845
846 ftms = {
847 name = endian;
848 values = {
849 v = 201907;
850 cxxmin = 20;
851 };
852 };
853
854 ftms = {
855 name = int_pow2;
856 values = {
857 v = 202002;
858 cxxmin = 20;
859 };
860 };
861
862 ftms = {
863 name = integer_comparison_functions;
864 values = {
865 v = 202002;
866 cxxmin = 20;
867 };
868 };
869
870 ftms = {
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.
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)";
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
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)";
903 };
904 };
905
906 ftms = {
907 name = is_nothrow_convertible;
908 values = {
909 v = 201806;
910 cxxmin = 20;
911 };
912 };
913
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)";
922 };
923 };
924
925 ftms = {
926 name = math_constants;
927 values = {
928 v = 201907;
929 cxxmin = 20;
930 };
931 };
932
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";
940 };
941 };
942
943 ftms = {
944 name = remove_cvref;
945 values = {
946 v = 201711;
947 cxxmin = 20;
948 };
949 };
950
951 ftms = {
952 name = source_location;
953 values = {
954 v = 201907;
955 cxxmin = 20;
956 extra_cond = "__has_builtin(__builtin_source_location)";
957 };
958 };
959
960 ftms = {
961 name = span;
962 values = {
963 v = 202311;
964 cxxmin = 26;
965 extra_cond = "__glibcxx_concepts";
966 };
967 values = {
968 v = 202002;
969 cxxmin = 20;
970 extra_cond = "__glibcxx_concepts";
971 };
972 };
973
974 ftms = {
975 name = ssize;
976 values = {
977 v = 201902;
978 cxxmin = 20;
979 };
980 };
981
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";
989 };
990 };
991
992 ftms = {
993 name = to_address;
994 values = {
995 v = 201711;
996 cxxmin = 20;
997 };
998 };
999
1000 ftms = {
1001 name = to_array;
1002 values = {
1003 v = 201907;
1004 cxxmin = 20;
1005 extra_cond = "__cpp_generic_lambdas >= 201707L";
1006 };
1007 };
1008
1009 ftms = {
1010 name = type_identity;
1011 values = {
1012 v = 201806;
1013 cxxmin = 20;
1014 };
1015 };
1016
1017 ftms = {
1018 name = unwrap_ref;
1019 values = {
1020 v = 201811;
1021 cxxmin = 20;
1022 };
1023 };
1024
1025 ftms = {
1026 name = constexpr_iterator;
1027 values = {
1028 v = 201811;
1029 cxxmin = 20;
1030 };
1031 };
1032
1033 ftms = {
1034 name = interpolate;
1035 values = {
1036 v = 201902;
1037 cxxmin = 20;
1038 };
1039 };
1040
1041 ftms = {
1042 name = constexpr_utility;
1043 values = {
1044 v = 201811;
1045 cxxmin = 20;
1046 };
1047 };
1048
1049 ftms = {
1050 name = shift;
1051 values = {
1052 v = 201806;
1053 cxxmin = 20;
1054 };
1055 };
1056
1057 ftms = {
1058 name = ranges;
1059 values = {
1060 v = 202211;
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
1071 ftms = {
1072 name = constexpr_numeric;
1073 values = {
1074 v = 201911;
1075 cxxmin = 20;
1076 };
1077 };
1078
1079 ftms = {
1080 name = constexpr_functional;
1081 values = {
1082 v = 201907;
1083 cxxmin = 20;
1084 };
1085 };
1086
1087 ftms = {
1088 name = constexpr_algorithms;
1089 values = {
1090 v = 201806;
1091 cxxmin = 20;
1092 };
1093 };
1094
1095 ftms = {
1096 name = constexpr_tuple;
1097 values = {
1098 v = 201811;
1099 cxxmin = 20;
1100 };
1101 };
1102
1103 ftms = {
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
1116 ftms = {
1117 name = atomic_shared_ptr;
1118 values = {
1119 v = 201711;
1120 cxxmin = 20;
1121 hosted = yes;
1122 };
1123 };
1124
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;
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
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";
1150 };
1151 };
1152
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 = 202110;
1164 cxxmin = 20;
1165 hosted = yes;
1166 };
1167 };
1168
1169 // FIXME: #define __glibcxx_execution 201902L
1170
1171 ftms = {
1172 name = constexpr_complex;
1173 values = {
1174 v = 201711;
1175 cxxmin = 20;
1176 hosted = yes;
1177 };
1178 };
1179
1180 ftms = {
1181 name = constexpr_dynamic_alloc;
1182 values = {
1183 v = 201907;
1184 cxxmin = 20;
1185 hosted = yes;
1186 };
1187 };
1188
1189 ftms = {
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
1213 ftms = {
1214 name = constexpr_vector;
1215 values = {
1216 v = 201907;
1217 cxxmin = 20;
1218 hosted = yes;
1219 };
1220 };
1221
1222 ftms = {
1223 name = erase_if;
1224 values = {
1225 v = 202002;
1226 cxxmin = 20;
1227 hosted = yes;
1228 };
1229 };
1230
1231 ftms = {
1232 name = generic_unordered_lookup;
1233 values = {
1234 v = 201811;
1235 cxxmin = 20;
1236 hosted = yes;
1237 };
1238 };
1239
1240 ftms = {
1241 name = jthread;
1242 values = {
1243 v = 201911;
1244 gthread = yes;
1245 hosted = yes;
1246 cxxmin = 20;
1247 };
1248 };
1249
1250 ftms = {
1251 name = latch;
1252 values = {
1253 v = 201907;
1254 cxxmin = 20;
1255 extra_cond = "__glibcxx_atomic_wait";
1256 };
1257 };
1258
1259 ftms = {
1260 name = list_remove_return_type;
1261 values = {
1262 v = 201806;
1263 cxxmin = 20;
1264 hosted = yes;
1265 };
1266 };
1267
1268 ftms = {
1269 name = polymorphic_allocator;
1270 values = {
1271 v = 201902;
1272 cxxmin = 20;
1273 hosted = yes;
1274 };
1275 };
1276
1277 ftms = {
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
1287 ftms = {
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
1297 ftms = {
1298 name = smart_ptr_for_overwrite;
1299 values = {
1300 v = 202002;
1301 cxxmin = 20;
1302 hosted = yes;
1303 };
1304 };
1305
1306 ftms = {
1307 name = syncbuf;
1308 values = {
1309 v = 201803;
1310 cxxmin = 20;
1311 hosted = yes;
1312 cxx11abi = yes;
1313 };
1314 };
1315
1316 ftms = {
1317 name = byteswap;
1318 values = {
1319 v = 202110;
1320 cxxmin = 23;
1321 };
1322 };
1323
1324 ftms = {
1325 name = constexpr_charconv;
1326 values = {
1327 v = 202207;
1328 cxxmin = 23;
1329 };
1330 };
1331
1332 ftms = {
1333 name = constexpr_typeinfo;
1334 values = {
1335 v = 202106;
1336 cxxmin = 23;
1337 };
1338 };
1339
1340 ftms = {
1341 name = expected;
1342 values = {
1343 v = 202211;
1344 cxxmin = 23;
1345 extra_cond = "__cpp_concepts >= 202002L";
1346 };
1347 };
1348
1349 ftms = {
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
1358 ftms = {
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
1367 ftms = {
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
1376 ftms = {
1377 name = freestanding_expected;
1378 values = {
1379 v = 202311;
1380 cxxmin = 23;
1381 // This is a C++26 feature, but we support it in C++23.
1382 extra_cond = "__cpp_lib_expected";
1383 };
1384 };
1385
1386 ftms = {
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
1395 ftms = {
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
1404 ftms = {
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 };
1412
1413 ftms = {
1414 name = invoke_r;
1415 values = {
1416 v = 202106;
1417 cxxmin = 23;
1418 };
1419 };
1420
1421 ftms = {
1422 name = is_scoped_enum;
1423 values = {
1424 v = 202011;
1425 cxxmin = 23;
1426 };
1427 };
1428
1429 ftms = {
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
1440 //ftms = {
1441 // name = container_ranges;
1442 // values = {
1443 // v = 202202;
1444 // cxxmin = 23;
1445 // hosted = yes;
1446 // };
1447 //};
1448
1449 ftms = {
1450 name = ranges_to_container;
1451 values = {
1452 v = 202202;
1453 cxxmin = 23;
1454 hosted = yes;
1455 };
1456 };
1457
1458 ftms = {
1459 name = ranges_zip;
1460 values = {
1461 v = 202110;
1462 cxxmin = 23;
1463 };
1464 };
1465
1466 ftms = {
1467 name = ranges_chunk;
1468 values = {
1469 v = 202202;
1470 cxxmin = 23;
1471 };
1472 };
1473
1474 ftms = {
1475 name = ranges_slide;
1476 values = {
1477 v = 202202;
1478 cxxmin = 23;
1479 };
1480 };
1481
1482 ftms = {
1483 name = ranges_chunk_by;
1484 values = {
1485 v = 202202;
1486 cxxmin = 23;
1487 };
1488 };
1489
1490 ftms = {
1491 name = ranges_join_with;
1492 values = {
1493 v = 202202;
1494 cxxmin = 23;
1495 };
1496 };
1497
1498 ftms = {
1499 name = ranges_repeat;
1500 values = {
1501 v = 202207;
1502 cxxmin = 23;
1503 };
1504 };
1505
1506 ftms = {
1507 name = ranges_stride;
1508 values = {
1509 v = 202207;
1510 cxxmin = 23;
1511 };
1512 };
1513
1514 ftms = {
1515 name = ranges_cartesian_product;
1516 values = {
1517 v = 202207;
1518 cxxmin = 23;
1519 };
1520 };
1521
1522 ftms = {
1523 name = ranges_as_rvalue;
1524 values = {
1525 v = 202207;
1526 cxxmin = 23;
1527 };
1528 };
1529
1530 ftms = {
1531 name = ranges_as_const;
1532 values = {
1533 v = 202207;
1534 cxxmin = 23;
1535 };
1536 };
1537
1538 ftms = {
1539 name = ranges_enumerate;
1540 values = {
1541 v = 202302;
1542 cxxmin = 23;
1543 };
1544 };
1545
1546 ftms = {
1547 name = ranges_fold;
1548 values = {
1549 v = 202207;
1550 cxxmin = 23;
1551 };
1552 };
1553
1554 ftms = {
1555 name = ranges_contains;
1556 values = {
1557 v = 202207;
1558 cxxmin = 23;
1559 };
1560 };
1561
1562 ftms = {
1563 name = ranges_iota;
1564 values = {
1565 v = 202202;
1566 cxxmin = 23;
1567 };
1568 };
1569
1570 ftms = {
1571 name = ranges_find_last;
1572 values = {
1573 v = 202207;
1574 cxxmin = 23;
1575 };
1576 };
1577
1578 ftms = {
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
1588 ftms = {
1589 name = stdatomic_h;
1590 values = {
1591 v = 202011;
1592 cxxmin = 23;
1593 };
1594 };
1595
1596 ftms = {
1597 name = adaptor_iterator_pair_constructor;
1598 values = {
1599 v = 202106;
1600 cxxmin = 23;
1601 hosted = yes;
1602 };
1603 };
1604
1605 ftms = {
1606 name = formatters;
1607 values = {
1608 v = 202302;
1609 cxxmin = 23;
1610 hosted = yes;
1611 };
1612 };
1613
1614 ftms = {
1615 name = forward_like;
1616 values = {
1617 v = 202207;
1618 cxxmin = 23;
1619 };
1620 };
1621
1622 ftms = {
1623 name = ios_noreplace;
1624 values = {
1625 v = 202207;
1626 cxxmin = 23;
1627 hosted = yes;
1628 };
1629 };
1630
1631 ftms = {
1632 name = move_only_function;
1633 values = {
1634 v = 202110;
1635 cxxmin = 23;
1636 hosted = yes;
1637 };
1638 };
1639
1640 ftms = {
1641 name = out_ptr;
1642 values = {
1643 v = 202311;
1644 cxxmin = 23;
1645 };
1646 };
1647
1648 ftms = {
1649 name = print;
1650 values = {
1651 v = 202211;
1652 cxxmin = 23;
1653 hosted = yes;
1654 };
1655 };
1656
1657 ftms = {
1658 name = spanstream;
1659 values = {
1660 v = 202106;
1661 cxxmin = 23;
1662 hosted = yes;
1663 extra_cond = "__glibcxx_span";
1664 };
1665 };
1666
1667 ftms = {
1668 name = stacktrace;
1669 values = {
1670 v = 202011;
1671 cxxmin = 23;
1672 hosted = yes;
1673 extra_cond = "_GLIBCXX_HAVE_STACKTRACE";
1674 };
1675 };
1676
1677 ftms = {
1678 name = string_contains;
1679 values = {
1680 v = 202011;
1681 cxxmin = 23;
1682 hosted = yes;
1683 };
1684 };
1685
1686 ftms = {
1687 name = string_resize_and_overwrite;
1688 values = {
1689 v = 202110;
1690 cxxmin = 23;
1691 hosted = yes;
1692 };
1693 };
1694
1695 ftms = {
1696 name = to_underlying;
1697 values = {
1698 v = 202102;
1699 cxxmin = 23;
1700 };
1701 };
1702
1703 ftms = {
1704 name = unreachable;
1705 values = {
1706 v = 202202;
1707 cxxmin = 23;
1708 };
1709 };
1710
1711 ftms = {
1712 name = fstream_native_handle;
1713 values = {
1714 v = 202306;
1715 cxxmin = 26;
1716 hosted = yes;
1717 };
1718 };
1719
1720 ftms = {
1721 name = ratio;
1722 values = {
1723 v = 202306;
1724 cxxmin = 26;
1725 };
1726 };
1727
1728 ftms = {
1729 name = saturation_arithmetic;
1730 values = {
1731 v = 202311;
1732 cxxmin = 26;
1733 };
1734 };
1735
1736 ftms = {
1737 name = to_string;
1738 values = {
1739 v = 202306;
1740 cxxmin = 26;
1741 hosted = yes;
1742 extra_cond = "__glibcxx_to_chars";
1743 };
1744 };
1745
1746 ftms = {
1747 name = generator;
1748 values = {
1749 v = 202207;
1750 cxxmin = 23;
1751 extra_cond = "__glibcxx_coroutine";
1752 };
1753 };
1754
1755 // Standard test specifications.
1756 stds[97] = ">= 199711L";
1757 stds[03] = ">= 199711L";
1758 stds[11] = ">= 201103L";
1759 stds[14] = ">= 201402L";
1760 stds[17] = ">= 201703L";
1761 stds[20] = ">= 202002L";
1762 stds[23] = ">= 202100L"; // Should be 202302L but Clang 16 uses 202101L
1763 stds[26] = "> 202302L"; // TODO: update when finalized
1764
1765 // Local Variables:
1766 // compile-command: "autogen version.def"
1767 // End: