1//===----------------------------------------------------------------------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9// WARNING: This test was generated by generate_feature_test_macro_components.py
10// and should not be edited manually.
11//
12// clang-format off
13
14// <string>
15
16// Test the feature test macros defined by <string>
17
18/* Constant Value
19 __cpp_lib_allocator_traits_is_always_equal 201411L [C++17]
20 __cpp_lib_char8_t 201907L [C++20]
21 __cpp_lib_constexpr_string 201907L [C++20]
22 __cpp_lib_default_template_type_for_algorithm_values 202403L [C++26]
23 __cpp_lib_erase_if 202002L [C++20]
24 __cpp_lib_nonmember_container_access 201411L [C++17]
25 __cpp_lib_ranges_to_container 202202L [C++23]
26 __cpp_lib_starts_ends_with 201711L [C++20]
27 __cpp_lib_string_contains 202011L [C++23]
28 __cpp_lib_string_resize_and_overwrite 202110L [C++23]
29 __cpp_lib_string_udls 201304L [C++14]
30 __cpp_lib_string_view 201606L [C++17]
31 201803L [C++20]
32 __cpp_lib_to_string 202306L [C++23]
33*/
34
35#include <string>
36#include "test_macros.h"
37
38#if TEST_STD_VER < 14
39
40# ifdef __cpp_lib_allocator_traits_is_always_equal
41# error "__cpp_lib_allocator_traits_is_always_equal should not be defined before c++17"
42# endif
43
44# ifdef __cpp_lib_char8_t
45# error "__cpp_lib_char8_t should not be defined before c++20"
46# endif
47
48# ifdef __cpp_lib_constexpr_string
49# error "__cpp_lib_constexpr_string should not be defined before c++20"
50# endif
51
52# ifdef __cpp_lib_default_template_type_for_algorithm_values
53# error "__cpp_lib_default_template_type_for_algorithm_values should not be defined before c++26"
54# endif
55
56# ifdef __cpp_lib_erase_if
57# error "__cpp_lib_erase_if should not be defined before c++20"
58# endif
59
60# ifdef __cpp_lib_nonmember_container_access
61# error "__cpp_lib_nonmember_container_access should not be defined before c++17"
62# endif
63
64# ifdef __cpp_lib_ranges_to_container
65# error "__cpp_lib_ranges_to_container should not be defined before c++23"
66# endif
67
68# ifdef __cpp_lib_starts_ends_with
69# error "__cpp_lib_starts_ends_with should not be defined before c++20"
70# endif
71
72# ifdef __cpp_lib_string_contains
73# error "__cpp_lib_string_contains should not be defined before c++23"
74# endif
75
76# ifdef __cpp_lib_string_resize_and_overwrite
77# error "__cpp_lib_string_resize_and_overwrite should not be defined before c++23"
78# endif
79
80# ifdef __cpp_lib_string_udls
81# error "__cpp_lib_string_udls should not be defined before c++14"
82# endif
83
84# ifdef __cpp_lib_string_view
85# error "__cpp_lib_string_view should not be defined before c++17"
86# endif
87
88# ifdef __cpp_lib_to_string
89# error "__cpp_lib_to_string should not be defined before c++23"
90# endif
91
92#elif TEST_STD_VER == 14
93
94# ifdef __cpp_lib_allocator_traits_is_always_equal
95# error "__cpp_lib_allocator_traits_is_always_equal should not be defined before c++17"
96# endif
97
98# ifdef __cpp_lib_char8_t
99# error "__cpp_lib_char8_t should not be defined before c++20"
100# endif
101
102# ifdef __cpp_lib_constexpr_string
103# error "__cpp_lib_constexpr_string should not be defined before c++20"
104# endif
105
106# ifdef __cpp_lib_default_template_type_for_algorithm_values
107# error "__cpp_lib_default_template_type_for_algorithm_values should not be defined before c++26"
108# endif
109
110# ifdef __cpp_lib_erase_if
111# error "__cpp_lib_erase_if should not be defined before c++20"
112# endif
113
114# ifdef __cpp_lib_nonmember_container_access
115# error "__cpp_lib_nonmember_container_access should not be defined before c++17"
116# endif
117
118# ifdef __cpp_lib_ranges_to_container
119# error "__cpp_lib_ranges_to_container should not be defined before c++23"
120# endif
121
122# ifdef __cpp_lib_starts_ends_with
123# error "__cpp_lib_starts_ends_with should not be defined before c++20"
124# endif
125
126# ifdef __cpp_lib_string_contains
127# error "__cpp_lib_string_contains should not be defined before c++23"
128# endif
129
130# ifdef __cpp_lib_string_resize_and_overwrite
131# error "__cpp_lib_string_resize_and_overwrite should not be defined before c++23"
132# endif
133
134# ifndef __cpp_lib_string_udls
135# error "__cpp_lib_string_udls should be defined in c++14"
136# endif
137# if __cpp_lib_string_udls != 201304L
138# error "__cpp_lib_string_udls should have the value 201304L in c++14"
139# endif
140
141# ifdef __cpp_lib_string_view
142# error "__cpp_lib_string_view should not be defined before c++17"
143# endif
144
145# ifdef __cpp_lib_to_string
146# error "__cpp_lib_to_string should not be defined before c++23"
147# endif
148
149#elif TEST_STD_VER == 17
150
151# ifndef __cpp_lib_allocator_traits_is_always_equal
152# error "__cpp_lib_allocator_traits_is_always_equal should be defined in c++17"
153# endif
154# if __cpp_lib_allocator_traits_is_always_equal != 201411L
155# error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++17"
156# endif
157
158# ifdef __cpp_lib_char8_t
159# error "__cpp_lib_char8_t should not be defined before c++20"
160# endif
161
162# ifdef __cpp_lib_constexpr_string
163# error "__cpp_lib_constexpr_string should not be defined before c++20"
164# endif
165
166# ifdef __cpp_lib_default_template_type_for_algorithm_values
167# error "__cpp_lib_default_template_type_for_algorithm_values should not be defined before c++26"
168# endif
169
170# ifdef __cpp_lib_erase_if
171# error "__cpp_lib_erase_if should not be defined before c++20"
172# endif
173
174# ifndef __cpp_lib_nonmember_container_access
175# error "__cpp_lib_nonmember_container_access should be defined in c++17"
176# endif
177# if __cpp_lib_nonmember_container_access != 201411L
178# error "__cpp_lib_nonmember_container_access should have the value 201411L in c++17"
179# endif
180
181# ifdef __cpp_lib_ranges_to_container
182# error "__cpp_lib_ranges_to_container should not be defined before c++23"
183# endif
184
185# ifdef __cpp_lib_starts_ends_with
186# error "__cpp_lib_starts_ends_with should not be defined before c++20"
187# endif
188
189# ifdef __cpp_lib_string_contains
190# error "__cpp_lib_string_contains should not be defined before c++23"
191# endif
192
193# ifdef __cpp_lib_string_resize_and_overwrite
194# error "__cpp_lib_string_resize_and_overwrite should not be defined before c++23"
195# endif
196
197# ifndef __cpp_lib_string_udls
198# error "__cpp_lib_string_udls should be defined in c++17"
199# endif
200# if __cpp_lib_string_udls != 201304L
201# error "__cpp_lib_string_udls should have the value 201304L in c++17"
202# endif
203
204# ifndef __cpp_lib_string_view
205# error "__cpp_lib_string_view should be defined in c++17"
206# endif
207# if __cpp_lib_string_view != 201606L
208# error "__cpp_lib_string_view should have the value 201606L in c++17"
209# endif
210
211# ifdef __cpp_lib_to_string
212# error "__cpp_lib_to_string should not be defined before c++23"
213# endif
214
215#elif TEST_STD_VER == 20
216
217# ifndef __cpp_lib_allocator_traits_is_always_equal
218# error "__cpp_lib_allocator_traits_is_always_equal should be defined in c++20"
219# endif
220# if __cpp_lib_allocator_traits_is_always_equal != 201411L
221# error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++20"
222# endif
223
224# if defined(__cpp_char8_t)
225# ifndef __cpp_lib_char8_t
226# error "__cpp_lib_char8_t should be defined in c++20"
227# endif
228# if __cpp_lib_char8_t != 201907L
229# error "__cpp_lib_char8_t should have the value 201907L in c++20"
230# endif
231# else
232# ifdef __cpp_lib_char8_t
233# error "__cpp_lib_char8_t should not be defined when the requirement 'defined(__cpp_char8_t)' is not met!"
234# endif
235# endif
236
237# ifndef __cpp_lib_constexpr_string
238# error "__cpp_lib_constexpr_string should be defined in c++20"
239# endif
240# if __cpp_lib_constexpr_string != 201907L
241# error "__cpp_lib_constexpr_string should have the value 201907L in c++20"
242# endif
243
244# ifdef __cpp_lib_default_template_type_for_algorithm_values
245# error "__cpp_lib_default_template_type_for_algorithm_values should not be defined before c++26"
246# endif
247
248# ifndef __cpp_lib_erase_if
249# error "__cpp_lib_erase_if should be defined in c++20"
250# endif
251# if __cpp_lib_erase_if != 202002L
252# error "__cpp_lib_erase_if should have the value 202002L in c++20"
253# endif
254
255# ifndef __cpp_lib_nonmember_container_access
256# error "__cpp_lib_nonmember_container_access should be defined in c++20"
257# endif
258# if __cpp_lib_nonmember_container_access != 201411L
259# error "__cpp_lib_nonmember_container_access should have the value 201411L in c++20"
260# endif
261
262# ifdef __cpp_lib_ranges_to_container
263# error "__cpp_lib_ranges_to_container should not be defined before c++23"
264# endif
265
266# ifndef __cpp_lib_starts_ends_with
267# error "__cpp_lib_starts_ends_with should be defined in c++20"
268# endif
269# if __cpp_lib_starts_ends_with != 201711L
270# error "__cpp_lib_starts_ends_with should have the value 201711L in c++20"
271# endif
272
273# ifdef __cpp_lib_string_contains
274# error "__cpp_lib_string_contains should not be defined before c++23"
275# endif
276
277# ifdef __cpp_lib_string_resize_and_overwrite
278# error "__cpp_lib_string_resize_and_overwrite should not be defined before c++23"
279# endif
280
281# ifndef __cpp_lib_string_udls
282# error "__cpp_lib_string_udls should be defined in c++20"
283# endif
284# if __cpp_lib_string_udls != 201304L
285# error "__cpp_lib_string_udls should have the value 201304L in c++20"
286# endif
287
288# ifndef __cpp_lib_string_view
289# error "__cpp_lib_string_view should be defined in c++20"
290# endif
291# if __cpp_lib_string_view != 201803L
292# error "__cpp_lib_string_view should have the value 201803L in c++20"
293# endif
294
295# ifdef __cpp_lib_to_string
296# error "__cpp_lib_to_string should not be defined before c++23"
297# endif
298
299#elif TEST_STD_VER == 23
300
301# ifndef __cpp_lib_allocator_traits_is_always_equal
302# error "__cpp_lib_allocator_traits_is_always_equal should be defined in c++23"
303# endif
304# if __cpp_lib_allocator_traits_is_always_equal != 201411L
305# error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++23"
306# endif
307
308# if defined(__cpp_char8_t)
309# ifndef __cpp_lib_char8_t
310# error "__cpp_lib_char8_t should be defined in c++23"
311# endif
312# if __cpp_lib_char8_t != 201907L
313# error "__cpp_lib_char8_t should have the value 201907L in c++23"
314# endif
315# else
316# ifdef __cpp_lib_char8_t
317# error "__cpp_lib_char8_t should not be defined when the requirement 'defined(__cpp_char8_t)' is not met!"
318# endif
319# endif
320
321# ifndef __cpp_lib_constexpr_string
322# error "__cpp_lib_constexpr_string should be defined in c++23"
323# endif
324# if __cpp_lib_constexpr_string != 201907L
325# error "__cpp_lib_constexpr_string should have the value 201907L in c++23"
326# endif
327
328# ifdef __cpp_lib_default_template_type_for_algorithm_values
329# error "__cpp_lib_default_template_type_for_algorithm_values should not be defined before c++26"
330# endif
331
332# ifndef __cpp_lib_erase_if
333# error "__cpp_lib_erase_if should be defined in c++23"
334# endif
335# if __cpp_lib_erase_if != 202002L
336# error "__cpp_lib_erase_if should have the value 202002L in c++23"
337# endif
338
339# ifndef __cpp_lib_nonmember_container_access
340# error "__cpp_lib_nonmember_container_access should be defined in c++23"
341# endif
342# if __cpp_lib_nonmember_container_access != 201411L
343# error "__cpp_lib_nonmember_container_access should have the value 201411L in c++23"
344# endif
345
346# ifndef __cpp_lib_ranges_to_container
347# error "__cpp_lib_ranges_to_container should be defined in c++23"
348# endif
349# if __cpp_lib_ranges_to_container != 202202L
350# error "__cpp_lib_ranges_to_container should have the value 202202L in c++23"
351# endif
352
353# ifndef __cpp_lib_starts_ends_with
354# error "__cpp_lib_starts_ends_with should be defined in c++23"
355# endif
356# if __cpp_lib_starts_ends_with != 201711L
357# error "__cpp_lib_starts_ends_with should have the value 201711L in c++23"
358# endif
359
360# ifndef __cpp_lib_string_contains
361# error "__cpp_lib_string_contains should be defined in c++23"
362# endif
363# if __cpp_lib_string_contains != 202011L
364# error "__cpp_lib_string_contains should have the value 202011L in c++23"
365# endif
366
367# ifndef __cpp_lib_string_resize_and_overwrite
368# error "__cpp_lib_string_resize_and_overwrite should be defined in c++23"
369# endif
370# if __cpp_lib_string_resize_and_overwrite != 202110L
371# error "__cpp_lib_string_resize_and_overwrite should have the value 202110L in c++23"
372# endif
373
374# ifndef __cpp_lib_string_udls
375# error "__cpp_lib_string_udls should be defined in c++23"
376# endif
377# if __cpp_lib_string_udls != 201304L
378# error "__cpp_lib_string_udls should have the value 201304L in c++23"
379# endif
380
381# ifndef __cpp_lib_string_view
382# error "__cpp_lib_string_view should be defined in c++23"
383# endif
384# if __cpp_lib_string_view != 201803L
385# error "__cpp_lib_string_view should have the value 201803L in c++23"
386# endif
387
388# if !defined(_LIBCPP_VERSION)
389# ifndef __cpp_lib_to_string
390# error "__cpp_lib_to_string should be defined in c++23"
391# endif
392# if __cpp_lib_to_string != 202306L
393# error "__cpp_lib_to_string should have the value 202306L in c++23"
394# endif
395# else // _LIBCPP_VERSION
396# ifdef __cpp_lib_to_string
397# error "__cpp_lib_to_string should not be defined because it is unimplemented in libc++!"
398# endif
399# endif
400
401#elif TEST_STD_VER > 23
402
403# ifndef __cpp_lib_allocator_traits_is_always_equal
404# error "__cpp_lib_allocator_traits_is_always_equal should be defined in c++26"
405# endif
406# if __cpp_lib_allocator_traits_is_always_equal != 201411L
407# error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++26"
408# endif
409
410# if defined(__cpp_char8_t)
411# ifndef __cpp_lib_char8_t
412# error "__cpp_lib_char8_t should be defined in c++26"
413# endif
414# if __cpp_lib_char8_t != 201907L
415# error "__cpp_lib_char8_t should have the value 201907L in c++26"
416# endif
417# else
418# ifdef __cpp_lib_char8_t
419# error "__cpp_lib_char8_t should not be defined when the requirement 'defined(__cpp_char8_t)' is not met!"
420# endif
421# endif
422
423# ifndef __cpp_lib_constexpr_string
424# error "__cpp_lib_constexpr_string should be defined in c++26"
425# endif
426# if __cpp_lib_constexpr_string != 201907L
427# error "__cpp_lib_constexpr_string should have the value 201907L in c++26"
428# endif
429
430# if !defined(_LIBCPP_VERSION)
431# ifndef __cpp_lib_default_template_type_for_algorithm_values
432# error "__cpp_lib_default_template_type_for_algorithm_values should be defined in c++26"
433# endif
434# if __cpp_lib_default_template_type_for_algorithm_values != 202403L
435# error "__cpp_lib_default_template_type_for_algorithm_values should have the value 202403L in c++26"
436# endif
437# else // _LIBCPP_VERSION
438# ifdef __cpp_lib_default_template_type_for_algorithm_values
439# error "__cpp_lib_default_template_type_for_algorithm_values should not be defined because it is unimplemented in libc++!"
440# endif
441# endif
442
443# ifndef __cpp_lib_erase_if
444# error "__cpp_lib_erase_if should be defined in c++26"
445# endif
446# if __cpp_lib_erase_if != 202002L
447# error "__cpp_lib_erase_if should have the value 202002L in c++26"
448# endif
449
450# ifndef __cpp_lib_nonmember_container_access
451# error "__cpp_lib_nonmember_container_access should be defined in c++26"
452# endif
453# if __cpp_lib_nonmember_container_access != 201411L
454# error "__cpp_lib_nonmember_container_access should have the value 201411L in c++26"
455# endif
456
457# ifndef __cpp_lib_ranges_to_container
458# error "__cpp_lib_ranges_to_container should be defined in c++26"
459# endif
460# if __cpp_lib_ranges_to_container != 202202L
461# error "__cpp_lib_ranges_to_container should have the value 202202L in c++26"
462# endif
463
464# ifndef __cpp_lib_starts_ends_with
465# error "__cpp_lib_starts_ends_with should be defined in c++26"
466# endif
467# if __cpp_lib_starts_ends_with != 201711L
468# error "__cpp_lib_starts_ends_with should have the value 201711L in c++26"
469# endif
470
471# ifndef __cpp_lib_string_contains
472# error "__cpp_lib_string_contains should be defined in c++26"
473# endif
474# if __cpp_lib_string_contains != 202011L
475# error "__cpp_lib_string_contains should have the value 202011L in c++26"
476# endif
477
478# ifndef __cpp_lib_string_resize_and_overwrite
479# error "__cpp_lib_string_resize_and_overwrite should be defined in c++26"
480# endif
481# if __cpp_lib_string_resize_and_overwrite != 202110L
482# error "__cpp_lib_string_resize_and_overwrite should have the value 202110L in c++26"
483# endif
484
485# ifndef __cpp_lib_string_udls
486# error "__cpp_lib_string_udls should be defined in c++26"
487# endif
488# if __cpp_lib_string_udls != 201304L
489# error "__cpp_lib_string_udls should have the value 201304L in c++26"
490# endif
491
492# ifndef __cpp_lib_string_view
493# error "__cpp_lib_string_view should be defined in c++26"
494# endif
495# if __cpp_lib_string_view != 201803L
496# error "__cpp_lib_string_view should have the value 201803L in c++26"
497# endif
498
499# if !defined(_LIBCPP_VERSION)
500# ifndef __cpp_lib_to_string
501# error "__cpp_lib_to_string should be defined in c++26"
502# endif
503# if __cpp_lib_to_string != 202306L
504# error "__cpp_lib_to_string should have the value 202306L in c++26"
505# endif
506# else // _LIBCPP_VERSION
507# ifdef __cpp_lib_to_string
508# error "__cpp_lib_to_string should not be defined because it is unimplemented in libc++!"
509# endif
510# endif
511
512#endif // TEST_STD_VER > 23
513
514

source code of libcxx/test/std/language.support/support.limits/support.limits.general/string.version.compile.pass.cpp