Files
gcc-reflection/libstdc++-v3/include/bits/version.h
Jonathan Wakely 8bd872f1ea libstdc++: Implement P3107R5 optimizations for std::print [PR121790]
The names of the vprint functions follow the convention from P3235R3.

This takes advantage of the additional permission proposed by P3107R5 so
that std::print can write directly to a FILE stream, rather than
formatting to an intermediate std::string temporary and then writing
that to the stream. The change is to write to a new _File_sink type
instead of a _Str_sink that populates a std::string. There are three
implementations of _File_sink.

For non-Glibc targets that support POSIX flockfile and putc_unlocked,
the stream will be locked and then formatted characters will be buffered
on the stack (instead of allocating a std::string) and copied to the
stream when the buffer fills up.

For Glibc, _File_sink will lock the stream but then if the file is
line-buffered or fully buffered, characters will be written directly
into the file's output buffer. This avoids two levels of buffering and
copying the characters from one to the other. For an unbuffered stream
(like stderr) the _File_sink buffer will still be used, to avoid the
overhead of lots of small writes to the stream.  Because this version of
_File_sink accesses the stream's buffer directly it relies on
glibc-specific implementation details that are exposed in public
headers.

A fallback definition of _File_sink just wraps a _Str_sink so is
equivalent to the original code, and is used when flockfile isn't
available.

Both forms of std::println (taking a FILE* and a std::ostream) can be
implemented more efficiently by appending a newline to the format
string, to avoid formatting twice.

	PR libstdc++/121790

libstdc++-v3/ChangeLog:

	* acinclude.m4 (GLIBCXX_CHECK_STDIO_LOCKING): New macro to check
	for std::print dependencies.
	* config.h.in: Regenerate.
	* configure: Regenerate.
	* configure.ac: Use GLIBCXX_CHECK_STDIO_LOCKING.
	* include/bits/formatfwd.h (enable_nonlocking_formatter_optimization):
	Define new variable template.
	* include/bits/version.def (print): Bump value.
	* include/bits/version.h: Regenerate.
	* include/std/format (enable_nonlocking_formatter_optimization):
	Define specializations for variable template.
	* include/std/ostream (print) [!_WIN32]: Do not use
	vprint_unicode at all.
	(println): Append newline to format string instead of formatting
	twice.
	* include/std/print (_File_sink): New class.
	(vprint_nonunicode_locking): New function.
	(vprint_unicode_locking): New function reusing previous code
	from vprint_unicode.
	(vprintf_unicode): Defer to vprint_nonunicode for Windows or to
	vprint_unicode_locking otherwise.
	(print): [!_WIN32]: Do no use vprint_unicode at all.
	Check enable_nonlocking_formatter_optimization and defer to
	either vprint_nonunicode_locking or vprint_nonunicode.
	(println): Use vprint_unicode or format directly to a _File_sink
	instead of formatting twice.
	* testsuite/27_io/print/1.cc: Updated and added new tests.
	* testsuite/std/format/formatter/nonlocking.cc: New tests.

Reviewed-by: Jonathan Wakely <jwakely@redhat.com>
Reviewed-by: Tomasz Kamiński <tkaminsk@redhat.com>
Co-authored-by: Tomasz Kamiński <tkaminsk@redhat.com>
2025-10-10 09:00:22 +02:00

2429 lines
86 KiB
C++

// Copyright (C) 2023-2025 Free Software Foundation, Inc.
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
// terms of the GNU General Public License as published by the
// Free Software Foundation; either version 3, or (at your option)
// any later version.
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// Under Section 7 of GPL version 3, you are granted additional
// permissions described in the GCC Runtime Library Exception, version
// 3.1, as published by the Free Software Foundation.
// You should have received a copy of the GNU General Public License and
// a copy of the GCC Runtime Library Exception along with this program;
// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
// <http://www.gnu.org/licenses/>.
// DO NOT EDIT THIS FILE (version.h)
//
// It has been AutoGen-ed
// From the definitions version.def
// and the template file version.tpl
/** @file bits/version.h
* This is an internal header file, included by other library headers.
* Do not attempt to use it directly. @headername{version}
*/
// Usage guide:
//
// In your usual header, do something like:
//
// #define __glibcxx_want_ranges
// #define __glibcxx_want_concepts
// #include <bits/version.h>
//
// This will generate the FTMs you named, and let you use them in your code as
// if it was user code. All macros are also exposed under __glibcxx_NAME even
// if unwanted, to permit bits and other FTMs to depend on them for condtional
// computation without exposing extra FTMs to user code.
#ifdef _GLIBCXX_SYSHDR
#pragma GCC system_header
#endif
#include <bits/c++config.h>
#if !defined(__cpp_lib_incomplete_container_elements)
# if _GLIBCXX_HOSTED
# define __glibcxx_incomplete_container_elements 201505L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_incomplete_container_elements)
# define __cpp_lib_incomplete_container_elements 201505L
# endif
# endif
#endif /* !defined(__cpp_lib_incomplete_container_elements) */
#undef __glibcxx_want_incomplete_container_elements
#if !defined(__cpp_lib_uncaught_exceptions)
# if ((defined(__STRICT_ANSI__) && __cplusplus >= 201703L) || (!defined(__STRICT_ANSI__) && __cplusplus >= 199711L))
# define __glibcxx_uncaught_exceptions 201411L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_uncaught_exceptions)
# define __cpp_lib_uncaught_exceptions 201411L
# endif
# endif
#endif /* !defined(__cpp_lib_uncaught_exceptions) */
#undef __glibcxx_want_uncaught_exceptions
#if !defined(__cpp_lib_allocator_traits_is_always_equal)
# if (__cplusplus >= 201103L)
# define __glibcxx_allocator_traits_is_always_equal 201411L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_allocator_traits_is_always_equal)
# define __cpp_lib_allocator_traits_is_always_equal 201411L
# endif
# endif
#endif /* !defined(__cpp_lib_allocator_traits_is_always_equal) */
#undef __glibcxx_want_allocator_traits_is_always_equal
#if !defined(__cpp_lib_is_null_pointer)
# if (__cplusplus >= 201103L)
# define __glibcxx_is_null_pointer 201309L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_is_null_pointer)
# define __cpp_lib_is_null_pointer 201309L
# endif
# endif
#endif /* !defined(__cpp_lib_is_null_pointer) */
#undef __glibcxx_want_is_null_pointer
#if !defined(__cpp_lib_result_of_sfinae)
# if (__cplusplus >= 201103L)
# define __glibcxx_result_of_sfinae 201210L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_result_of_sfinae)
# define __cpp_lib_result_of_sfinae 201210L
# endif
# endif
#endif /* !defined(__cpp_lib_result_of_sfinae) */
#undef __glibcxx_want_result_of_sfinae
#if !defined(__cpp_lib_shared_ptr_arrays)
# if (__cplusplus >= 202002L) && _GLIBCXX_HOSTED
# define __glibcxx_shared_ptr_arrays 201707L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_shared_ptr_arrays)
# define __cpp_lib_shared_ptr_arrays 201707L
# endif
# elif (__cplusplus >= 201103L) && _GLIBCXX_HOSTED
# define __glibcxx_shared_ptr_arrays 201611L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_shared_ptr_arrays)
# define __cpp_lib_shared_ptr_arrays 201611L
# endif
# endif
#endif /* !defined(__cpp_lib_shared_ptr_arrays) */
#undef __glibcxx_want_shared_ptr_arrays
#if !defined(__cpp_lib_is_swappable)
# if ((defined(__STRICT_ANSI__) && __cplusplus >= 201703L) || (!defined(__STRICT_ANSI__) && __cplusplus >= 201103L))
# define __glibcxx_is_swappable 201603L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_is_swappable)
# define __cpp_lib_is_swappable 201603L
# endif
# endif
#endif /* !defined(__cpp_lib_is_swappable) */
#undef __glibcxx_want_is_swappable
#if !defined(__cpp_lib_void_t)
# if ((defined(__STRICT_ANSI__) && __cplusplus >= 201703L) || (!defined(__STRICT_ANSI__) && __cplusplus >= 201103L))
# define __glibcxx_void_t 201411L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_void_t)
# define __cpp_lib_void_t 201411L
# endif
# endif
#endif /* !defined(__cpp_lib_void_t) */
#undef __glibcxx_want_void_t
#if !defined(__cpp_lib_enable_shared_from_this)
# if ((defined(__STRICT_ANSI__) && __cplusplus >= 201703L) || (!defined(__STRICT_ANSI__) && __cplusplus >= 201103L)) && _GLIBCXX_HOSTED
# define __glibcxx_enable_shared_from_this 201603L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_enable_shared_from_this)
# define __cpp_lib_enable_shared_from_this 201603L
# endif
# endif
#endif /* !defined(__cpp_lib_enable_shared_from_this) */
#undef __glibcxx_want_enable_shared_from_this
#if !defined(__cpp_lib_math_spec_funcs)
# if (__cplusplus >= 201103L)
# define __glibcxx_math_spec_funcs 201003L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_math_spec_funcs)
# define __STDCPP_MATH_SPEC_FUNCS__ 201003L
# endif
# endif
#endif /* !defined(__cpp_lib_math_spec_funcs) */
#undef __glibcxx_want_math_spec_funcs
#if !defined(__cpp_lib_coroutine)
# if (__cplusplus >= 201402L) && (__cpp_impl_coroutine)
# define __glibcxx_coroutine 201902L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_coroutine)
# define __cpp_lib_coroutine 201902L
# endif
# endif
#endif /* !defined(__cpp_lib_coroutine) */
#undef __glibcxx_want_coroutine
#if !defined(__cpp_lib_exchange_function)
# if (__cplusplus >= 201402L)
# define __glibcxx_exchange_function 201304L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_exchange_function)
# define __cpp_lib_exchange_function 201304L
# endif
# endif
#endif /* !defined(__cpp_lib_exchange_function) */
#undef __glibcxx_want_exchange_function
#if !defined(__cpp_lib_integer_sequence)
# if (__cplusplus >= 201402L)
# define __glibcxx_integer_sequence 201304L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_integer_sequence)
# define __cpp_lib_integer_sequence 201304L
# endif
# endif
#endif /* !defined(__cpp_lib_integer_sequence) */
#undef __glibcxx_want_integer_sequence
#if !defined(__cpp_lib_integral_constant_callable)
# if (__cplusplus >= 201402L)
# define __glibcxx_integral_constant_callable 201304L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_integral_constant_callable)
# define __cpp_lib_integral_constant_callable 201304L
# endif
# endif
#endif /* !defined(__cpp_lib_integral_constant_callable) */
#undef __glibcxx_want_integral_constant_callable
#if !defined(__cpp_lib_is_final)
# if (__cplusplus >= 201402L)
# define __glibcxx_is_final 201402L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_is_final)
# define __cpp_lib_is_final 201402L
# endif
# endif
#endif /* !defined(__cpp_lib_is_final) */
#undef __glibcxx_want_is_final
#if !defined(__cpp_lib_make_reverse_iterator)
# if (__cplusplus >= 201402L)
# define __glibcxx_make_reverse_iterator 201402L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_make_reverse_iterator)
# define __cpp_lib_make_reverse_iterator 201402L
# endif
# endif
#endif /* !defined(__cpp_lib_make_reverse_iterator) */
#undef __glibcxx_want_make_reverse_iterator
#if !defined(__cpp_lib_null_iterators)
# if (__cplusplus >= 201402L)
# define __glibcxx_null_iterators 201304L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_null_iterators)
# define __cpp_lib_null_iterators 201304L
# endif
# endif
#endif /* !defined(__cpp_lib_null_iterators) */
#undef __glibcxx_want_null_iterators
#if !defined(__cpp_lib_transformation_trait_aliases)
# if (__cplusplus >= 201402L)
# define __glibcxx_transformation_trait_aliases 201304L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_transformation_trait_aliases)
# define __cpp_lib_transformation_trait_aliases 201304L
# endif
# endif
#endif /* !defined(__cpp_lib_transformation_trait_aliases) */
#undef __glibcxx_want_transformation_trait_aliases
#if !defined(__cpp_lib_transparent_operators)
# if (__cplusplus >= 201402L)
# define __glibcxx_transparent_operators 201510L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_transparent_operators)
# define __cpp_lib_transparent_operators 201510L
# endif
# endif
#endif /* !defined(__cpp_lib_transparent_operators) */
#undef __glibcxx_want_transparent_operators
#if !defined(__cpp_lib_tuple_element_t)
# if (__cplusplus >= 201402L)
# define __glibcxx_tuple_element_t 201402L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_tuple_element_t)
# define __cpp_lib_tuple_element_t 201402L
# endif
# endif
#endif /* !defined(__cpp_lib_tuple_element_t) */
#undef __glibcxx_want_tuple_element_t
#if !defined(__cpp_lib_tuples_by_type)
# if (__cplusplus >= 201402L)
# define __glibcxx_tuples_by_type 201304L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_tuples_by_type)
# define __cpp_lib_tuples_by_type 201304L
# endif
# endif
#endif /* !defined(__cpp_lib_tuples_by_type) */
#undef __glibcxx_want_tuples_by_type
#if !defined(__cpp_lib_robust_nonmodifying_seq_ops)
# if (__cplusplus >= 201402L)
# define __glibcxx_robust_nonmodifying_seq_ops 201304L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_robust_nonmodifying_seq_ops)
# define __cpp_lib_robust_nonmodifying_seq_ops 201304L
# endif
# endif
#endif /* !defined(__cpp_lib_robust_nonmodifying_seq_ops) */
#undef __glibcxx_want_robust_nonmodifying_seq_ops
#if !defined(__cpp_lib_to_chars)
# if (__cplusplus > 202302L) && (_GLIBCXX_FLOAT_IS_IEEE_BINARY32 && _GLIBCXX_DOUBLE_IS_IEEE_BINARY64 && __SIZE_WIDTH__ >= 32)
# define __glibcxx_to_chars 202306L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_to_chars)
# define __cpp_lib_to_chars 202306L
# endif
# elif (__cplusplus >= 201402L) && (_GLIBCXX_FLOAT_IS_IEEE_BINARY32 && _GLIBCXX_DOUBLE_IS_IEEE_BINARY64 && __SIZE_WIDTH__ >= 32)
# define __glibcxx_to_chars 201611L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_to_chars)
# define __cpp_lib_to_chars 201611L
# endif
# endif
#endif /* !defined(__cpp_lib_to_chars) */
#undef __glibcxx_want_to_chars
#if !defined(__cpp_lib_chrono_udls)
# if (__cplusplus >= 201402L)
# define __glibcxx_chrono_udls 201304L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_chrono_udls)
# define __cpp_lib_chrono_udls 201304L
# endif
# endif
#endif /* !defined(__cpp_lib_chrono_udls) */
#undef __glibcxx_want_chrono_udls
#if !defined(__cpp_lib_complex_udls)
# if (__cplusplus >= 201402L) && _GLIBCXX_HOSTED
# define __glibcxx_complex_udls 201309L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_complex_udls)
# define __cpp_lib_complex_udls 201309L
# endif
# endif
#endif /* !defined(__cpp_lib_complex_udls) */
#undef __glibcxx_want_complex_udls
#if !defined(__cpp_lib_generic_associative_lookup)
# if (__cplusplus >= 201402L) && _GLIBCXX_HOSTED
# define __glibcxx_generic_associative_lookup 201304L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_generic_associative_lookup)
# define __cpp_lib_generic_associative_lookup 201304L
# endif
# endif
#endif /* !defined(__cpp_lib_generic_associative_lookup) */
#undef __glibcxx_want_generic_associative_lookup
#if !defined(__cpp_lib_make_unique)
# if (__cplusplus >= 201402L) && _GLIBCXX_HOSTED
# define __glibcxx_make_unique 201304L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_make_unique)
# define __cpp_lib_make_unique 201304L
# endif
# endif
#endif /* !defined(__cpp_lib_make_unique) */
#undef __glibcxx_want_make_unique
#if !defined(__cpp_lib_quoted_string_io)
# if (__cplusplus >= 201402L) && _GLIBCXX_HOSTED
# define __glibcxx_quoted_string_io 201304L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_quoted_string_io)
# define __cpp_lib_quoted_string_io 201304L
# endif
# endif
#endif /* !defined(__cpp_lib_quoted_string_io) */
#undef __glibcxx_want_quoted_string_io
#if !defined(__cpp_lib_shared_timed_mutex)
# if (__cplusplus >= 201402L) && defined(_GLIBCXX_HAS_GTHREADS) && _GLIBCXX_HOSTED
# define __glibcxx_shared_timed_mutex 201402L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_shared_timed_mutex)
# define __cpp_lib_shared_timed_mutex 201402L
# endif
# endif
#endif /* !defined(__cpp_lib_shared_timed_mutex) */
#undef __glibcxx_want_shared_timed_mutex
#if !defined(__cpp_lib_string_udls)
# if (__cplusplus >= 201402L) && _GLIBCXX_HOSTED
# define __glibcxx_string_udls 201304L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_string_udls)
# define __cpp_lib_string_udls 201304L
# endif
# endif
#endif /* !defined(__cpp_lib_string_udls) */
#undef __glibcxx_want_string_udls
#if !defined(__cpp_lib_addressof_constexpr)
# if (__cplusplus >= 201703L)
# define __glibcxx_addressof_constexpr 201603L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_addressof_constexpr)
# define __cpp_lib_addressof_constexpr 201603L
# endif
# endif
#endif /* !defined(__cpp_lib_addressof_constexpr) */
#undef __glibcxx_want_addressof_constexpr
#if !defined(__cpp_lib_any)
# if (__cplusplus >= 201703L)
# define __glibcxx_any 201606L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_any)
# define __cpp_lib_any 201606L
# endif
# endif
#endif /* !defined(__cpp_lib_any) */
#undef __glibcxx_want_any
#if !defined(__cpp_lib_apply)
# if (__cplusplus >= 201703L)
# define __glibcxx_apply 201603L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_apply)
# define __cpp_lib_apply 201603L
# endif
# endif
#endif /* !defined(__cpp_lib_apply) */
#undef __glibcxx_want_apply
#if !defined(__cpp_lib_as_const)
# if (__cplusplus >= 201703L)
# define __glibcxx_as_const 201510L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_as_const)
# define __cpp_lib_as_const 201510L
# endif
# endif
#endif /* !defined(__cpp_lib_as_const) */
#undef __glibcxx_want_as_const
#if !defined(__cpp_lib_atomic_is_always_lock_free)
# if (__cplusplus >= 201703L)
# define __glibcxx_atomic_is_always_lock_free 201603L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_atomic_is_always_lock_free)
# define __cpp_lib_atomic_is_always_lock_free 201603L
# endif
# endif
#endif /* !defined(__cpp_lib_atomic_is_always_lock_free) */
#undef __glibcxx_want_atomic_is_always_lock_free
#if !defined(__cpp_lib_bool_constant)
# if (__cplusplus >= 201703L)
# define __glibcxx_bool_constant 201505L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_bool_constant)
# define __cpp_lib_bool_constant 201505L
# endif
# endif
#endif /* !defined(__cpp_lib_bool_constant) */
#undef __glibcxx_want_bool_constant
#if !defined(__cpp_lib_byte)
# if (__cplusplus >= 201703L)
# define __glibcxx_byte 201603L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_byte)
# define __cpp_lib_byte 201603L
# endif
# endif
#endif /* !defined(__cpp_lib_byte) */
#undef __glibcxx_want_byte
#if !defined(__cpp_lib_constant_wrapper)
# if (__cplusplus > 202302L)
# define __glibcxx_constant_wrapper 202506L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constant_wrapper)
# define __cpp_lib_constant_wrapper 202506L
# endif
# endif
#endif /* !defined(__cpp_lib_constant_wrapper) */
#undef __glibcxx_want_constant_wrapper
#if !defined(__cpp_lib_has_unique_object_representations)
# if (__cplusplus >= 201703L) && (defined(_GLIBCXX_HAVE_BUILTIN_HAS_UNIQ_OBJ_REP))
# define __glibcxx_has_unique_object_representations 201606L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_has_unique_object_representations)
# define __cpp_lib_has_unique_object_representations 201606L
# endif
# endif
#endif /* !defined(__cpp_lib_has_unique_object_representations) */
#undef __glibcxx_want_has_unique_object_representations
#if !defined(__cpp_lib_hardware_interference_size)
# if (__cplusplus >= 201703L) && (defined(__GCC_DESTRUCTIVE_SIZE))
# define __glibcxx_hardware_interference_size 201703L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_hardware_interference_size)
# define __cpp_lib_hardware_interference_size 201703L
# endif
# endif
#endif /* !defined(__cpp_lib_hardware_interference_size) */
#undef __glibcxx_want_hardware_interference_size
#if !defined(__cpp_lib_invoke)
# if (__cplusplus >= 201703L)
# define __glibcxx_invoke 201411L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_invoke)
# define __cpp_lib_invoke 201411L
# endif
# endif
#endif /* !defined(__cpp_lib_invoke) */
#undef __glibcxx_want_invoke
#if !defined(__cpp_lib_is_aggregate)
# if (__cplusplus >= 201703L) && (defined(_GLIBCXX_HAVE_BUILTIN_IS_AGGREGATE))
# define __glibcxx_is_aggregate 201703L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_is_aggregate)
# define __cpp_lib_is_aggregate 201703L
# endif
# endif
#endif /* !defined(__cpp_lib_is_aggregate) */
#undef __glibcxx_want_is_aggregate
#if !defined(__cpp_lib_is_invocable)
# if (__cplusplus >= 201703L)
# define __glibcxx_is_invocable 201703L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_is_invocable)
# define __cpp_lib_is_invocable 201703L
# endif
# endif
#endif /* !defined(__cpp_lib_is_invocable) */
#undef __glibcxx_want_is_invocable
#if !defined(__cpp_lib_launder)
# if (__cplusplus >= 201703L) && (defined(_GLIBCXX_HAVE_BUILTIN_LAUNDER))
# define __glibcxx_launder 201606L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_launder)
# define __cpp_lib_launder 201606L
# endif
# endif
#endif /* !defined(__cpp_lib_launder) */
#undef __glibcxx_want_launder
#if !defined(__cpp_lib_logical_traits)
# if (__cplusplus >= 201703L)
# define __glibcxx_logical_traits 201510L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_logical_traits)
# define __cpp_lib_logical_traits 201510L
# endif
# endif
#endif /* !defined(__cpp_lib_logical_traits) */
#undef __glibcxx_want_logical_traits
#if !defined(__cpp_lib_make_from_tuple)
# if (__cplusplus >= 201703L)
# define __glibcxx_make_from_tuple 201606L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_make_from_tuple)
# define __cpp_lib_make_from_tuple 201606L
# endif
# endif
#endif /* !defined(__cpp_lib_make_from_tuple) */
#undef __glibcxx_want_make_from_tuple
#if !defined(__cpp_lib_not_fn)
# if (__cplusplus > 202302L)
# define __glibcxx_not_fn 202306L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_not_fn)
# define __cpp_lib_not_fn 202306L
# endif
# elif (__cplusplus >= 201703L)
# define __glibcxx_not_fn 201603L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_not_fn)
# define __cpp_lib_not_fn 201603L
# endif
# endif
#endif /* !defined(__cpp_lib_not_fn) */
#undef __glibcxx_want_not_fn
#if !defined(__cpp_lib_type_trait_variable_templates)
# if (__cplusplus >= 201703L)
# define __glibcxx_type_trait_variable_templates 201510L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_type_trait_variable_templates)
# define __cpp_lib_type_trait_variable_templates 201510L
# endif
# endif
#endif /* !defined(__cpp_lib_type_trait_variable_templates) */
#undef __glibcxx_want_type_trait_variable_templates
#if !defined(__cpp_lib_variant)
# if (__cplusplus > 202302L) && (__cpp_concepts >= 202002L && __cpp_constexpr >= 201811L && __cpp_explicit_this_parameter)
# define __glibcxx_variant 202306L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_variant)
# define __cpp_lib_variant 202306L
# endif
# elif (__cplusplus >= 202002L) && (__cpp_concepts >= 202002L && __cpp_constexpr >= 201811L)
# define __glibcxx_variant 202106L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_variant)
# define __cpp_lib_variant 202106L
# endif
# elif (__cplusplus >= 201703L)
# define __glibcxx_variant 202102L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_variant)
# define __cpp_lib_variant 202102L
# endif
# endif
#endif /* !defined(__cpp_lib_variant) */
#undef __glibcxx_want_variant
#if !defined(__cpp_lib_lcm)
# if (__cplusplus >= 201703L)
# define __glibcxx_lcm 201606L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_lcm)
# define __cpp_lib_lcm 201606L
# endif
# endif
#endif /* !defined(__cpp_lib_lcm) */
#undef __glibcxx_want_lcm
#if !defined(__cpp_lib_gcd)
# if (__cplusplus >= 201703L)
# define __glibcxx_gcd 201606L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_gcd)
# define __cpp_lib_gcd 201606L
# endif
# endif
#endif /* !defined(__cpp_lib_gcd) */
#undef __glibcxx_want_gcd
#if !defined(__cpp_lib_gcd_lcm)
# if (__cplusplus >= 201703L)
# define __glibcxx_gcd_lcm 201606L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_gcd_lcm)
# define __cpp_lib_gcd_lcm 201606L
# endif
# endif
#endif /* !defined(__cpp_lib_gcd_lcm) */
#undef __glibcxx_want_gcd_lcm
#if !defined(__cpp_lib_raw_memory_algorithms)
# if (__cplusplus > 202302L) && (__cpp_constexpr >= 202406L)
# define __glibcxx_raw_memory_algorithms 202411L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_raw_memory_algorithms)
# define __cpp_lib_raw_memory_algorithms 202411L
# endif
# elif (__cplusplus >= 201703L)
# define __glibcxx_raw_memory_algorithms 201606L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_raw_memory_algorithms)
# define __cpp_lib_raw_memory_algorithms 201606L
# endif
# endif
#endif /* !defined(__cpp_lib_raw_memory_algorithms) */
#undef __glibcxx_want_raw_memory_algorithms
#if !defined(__cpp_lib_array_constexpr)
# if (__cplusplus >= 202002L)
# define __glibcxx_array_constexpr 201811L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_array_constexpr)
# define __cpp_lib_array_constexpr 201811L
# endif
# elif (__cplusplus >= 201703L)
# define __glibcxx_array_constexpr 201803L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_array_constexpr)
# define __cpp_lib_array_constexpr 201803L
# endif
# endif
#endif /* !defined(__cpp_lib_array_constexpr) */
#undef __glibcxx_want_array_constexpr
#if !defined(__cpp_lib_nonmember_container_access)
# if (__cplusplus >= 201703L)
# define __glibcxx_nonmember_container_access 201411L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_nonmember_container_access)
# define __cpp_lib_nonmember_container_access 201411L
# endif
# endif
#endif /* !defined(__cpp_lib_nonmember_container_access) */
#undef __glibcxx_want_nonmember_container_access
#if !defined(__cpp_lib_clamp)
# if (__cplusplus >= 201703L)
# define __glibcxx_clamp 201603L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_clamp)
# define __cpp_lib_clamp 201603L
# endif
# endif
#endif /* !defined(__cpp_lib_clamp) */
#undef __glibcxx_want_clamp
#if !defined(__cpp_lib_sample)
# if (__cplusplus >= 201703L)
# define __glibcxx_sample 201603L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_sample)
# define __cpp_lib_sample 201603L
# endif
# endif
#endif /* !defined(__cpp_lib_sample) */
#undef __glibcxx_want_sample
#if !defined(__cpp_lib_boyer_moore_searcher)
# if (__cplusplus >= 201703L) && _GLIBCXX_HOSTED
# define __glibcxx_boyer_moore_searcher 201603L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_boyer_moore_searcher)
# define __cpp_lib_boyer_moore_searcher 201603L
# endif
# endif
#endif /* !defined(__cpp_lib_boyer_moore_searcher) */
#undef __glibcxx_want_boyer_moore_searcher
#if !defined(__cpp_lib_chrono)
# if (__cplusplus >= 202002L) && _GLIBCXX_USE_CXX11_ABI && _GLIBCXX_HOSTED
# define __glibcxx_chrono 201907L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_chrono)
# define __cpp_lib_chrono 201907L
# endif
# elif (__cplusplus >= 201703L) && _GLIBCXX_HOSTED
# define __glibcxx_chrono 201611L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_chrono)
# define __cpp_lib_chrono 201611L
# endif
# endif
#endif /* !defined(__cpp_lib_chrono) */
#undef __glibcxx_want_chrono
#if !defined(__cpp_lib_chrono_cxx20)
# if (__cplusplus >= 202002L)
# define __glibcxx_chrono_cxx20 201800L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_chrono_cxx20)
# endif
# endif
#endif /* !defined(__cpp_lib_chrono_cxx20) */
#undef __glibcxx_want_chrono_cxx20
#if !defined(__cpp_lib_execution)
# if (__cplusplus >= 201703L) && _GLIBCXX_HOSTED
# define __glibcxx_execution 201902L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_execution)
# define __cpp_lib_execution 201902L
# endif
# endif
#endif /* !defined(__cpp_lib_execution) */
#undef __glibcxx_want_execution
#if !defined(__cpp_lib_filesystem)
# if (__cplusplus >= 201703L) && _GLIBCXX_HOSTED
# define __glibcxx_filesystem 201703L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_filesystem)
# define __cpp_lib_filesystem 201703L
# endif
# endif
#endif /* !defined(__cpp_lib_filesystem) */
#undef __glibcxx_want_filesystem
#if !defined(__cpp_lib_hypot)
# if (__cplusplus >= 201703L) && _GLIBCXX_HOSTED
# define __glibcxx_hypot 201603L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_hypot)
# define __cpp_lib_hypot 201603L
# endif
# endif
#endif /* !defined(__cpp_lib_hypot) */
#undef __glibcxx_want_hypot
#if !defined(__cpp_lib_map_try_emplace)
# if (__cplusplus >= 201703L) && _GLIBCXX_HOSTED
# define __glibcxx_map_try_emplace 201411L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_map_try_emplace)
# define __cpp_lib_map_try_emplace 201411L
# endif
# endif
#endif /* !defined(__cpp_lib_map_try_emplace) */
#undef __glibcxx_want_map_try_emplace
#if !defined(__cpp_lib_math_special_functions)
# if (__cplusplus >= 201703L) && _GLIBCXX_HOSTED
# define __glibcxx_math_special_functions 201603L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_math_special_functions)
# define __cpp_lib_math_special_functions 201603L
# endif
# endif
#endif /* !defined(__cpp_lib_math_special_functions) */
#undef __glibcxx_want_math_special_functions
#if !defined(__cpp_lib_memory_resource)
# if (__cplusplus >= 201703L) && defined(_GLIBCXX_HAS_GTHREADS) && _GLIBCXX_HOSTED
# define __glibcxx_memory_resource 201603L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_memory_resource)
# define __cpp_lib_memory_resource 201603L
# endif
# elif (__cplusplus >= 201703L) && !defined(_GLIBCXX_HAS_GTHREADS) && _GLIBCXX_HOSTED
# define __glibcxx_memory_resource 1L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_memory_resource)
# define __cpp_lib_memory_resource 1L
# endif
# endif
#endif /* !defined(__cpp_lib_memory_resource) */
#undef __glibcxx_want_memory_resource
#if !defined(__cpp_lib_node_extract)
# if (__cplusplus >= 201703L) && _GLIBCXX_HOSTED
# define __glibcxx_node_extract 201606L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_node_extract)
# define __cpp_lib_node_extract 201606L
# endif
# endif
#endif /* !defined(__cpp_lib_node_extract) */
#undef __glibcxx_want_node_extract
#if !defined(__cpp_lib_parallel_algorithm)
# if (__cplusplus >= 201703L) && _GLIBCXX_HOSTED
# define __glibcxx_parallel_algorithm 201603L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_parallel_algorithm)
# define __cpp_lib_parallel_algorithm 201603L
# endif
# endif
#endif /* !defined(__cpp_lib_parallel_algorithm) */
#undef __glibcxx_want_parallel_algorithm
#if !defined(__cpp_lib_scoped_lock)
# if (__cplusplus >= 201703L)
# define __glibcxx_scoped_lock 201703L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_scoped_lock)
# define __cpp_lib_scoped_lock 201703L
# endif
# endif
#endif /* !defined(__cpp_lib_scoped_lock) */
#undef __glibcxx_want_scoped_lock
#if !defined(__cpp_lib_shared_mutex)
# if (__cplusplus >= 201703L) && defined(_GLIBCXX_HAS_GTHREADS) && _GLIBCXX_HOSTED
# define __glibcxx_shared_mutex 201505L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_shared_mutex)
# define __cpp_lib_shared_mutex 201505L
# endif
# endif
#endif /* !defined(__cpp_lib_shared_mutex) */
#undef __glibcxx_want_shared_mutex
#if !defined(__cpp_lib_shared_ptr_weak_type)
# if (__cplusplus >= 201703L) && _GLIBCXX_HOSTED
# define __glibcxx_shared_ptr_weak_type 201606L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_shared_ptr_weak_type)
# define __cpp_lib_shared_ptr_weak_type 201606L
# endif
# endif
#endif /* !defined(__cpp_lib_shared_ptr_weak_type) */
#undef __glibcxx_want_shared_ptr_weak_type
#if !defined(__cpp_lib_string_view)
# if (__cplusplus > 202302L) && _GLIBCXX_HOSTED
# define __glibcxx_string_view 202403L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_string_view)
# define __cpp_lib_string_view 202403L
# endif
# elif (__cplusplus >= 201703L) && _GLIBCXX_HOSTED
# define __glibcxx_string_view 201803L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_string_view)
# define __cpp_lib_string_view 201803L
# endif
# endif
#endif /* !defined(__cpp_lib_string_view) */
#undef __glibcxx_want_string_view
#if !defined(__cpp_lib_unordered_map_try_emplace)
# if (__cplusplus >= 201703L) && _GLIBCXX_HOSTED
# define __glibcxx_unordered_map_try_emplace 201411L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_unordered_map_try_emplace)
# define __cpp_lib_unordered_map_try_emplace 201411L
# endif
# endif
#endif /* !defined(__cpp_lib_unordered_map_try_emplace) */
#undef __glibcxx_want_unordered_map_try_emplace
#if !defined(__cpp_lib_assume_aligned)
# if (__cplusplus >= 202002L)
# define __glibcxx_assume_aligned 201811L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_assume_aligned)
# define __cpp_lib_assume_aligned 201811L
# endif
# endif
#endif /* !defined(__cpp_lib_assume_aligned) */
#undef __glibcxx_want_assume_aligned
#if !defined(__cpp_lib_is_sufficiently_aligned)
# if (__cplusplus > 202302L)
# define __glibcxx_is_sufficiently_aligned 202411L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_is_sufficiently_aligned)
# define __cpp_lib_is_sufficiently_aligned 202411L
# endif
# endif
#endif /* !defined(__cpp_lib_is_sufficiently_aligned) */
#undef __glibcxx_want_is_sufficiently_aligned
#if !defined(__cpp_lib_atomic_flag_test)
# if (__cplusplus >= 202002L)
# define __glibcxx_atomic_flag_test 201907L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_atomic_flag_test)
# define __cpp_lib_atomic_flag_test 201907L
# endif
# endif
#endif /* !defined(__cpp_lib_atomic_flag_test) */
#undef __glibcxx_want_atomic_flag_test
#if !defined(__cpp_lib_atomic_float)
# if (__cplusplus >= 202002L)
# define __glibcxx_atomic_float 201711L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_atomic_float)
# define __cpp_lib_atomic_float 201711L
# endif
# endif
#endif /* !defined(__cpp_lib_atomic_float) */
#undef __glibcxx_want_atomic_float
#if !defined(__cpp_lib_atomic_lock_free_type_aliases)
# if (__cplusplus >= 202002L) && ((__GCC_ATOMIC_INT_LOCK_FREE | __GCC_ATOMIC_LONG_LOCK_FREE | __GCC_ATOMIC_CHAR_LOCK_FREE) & 2)
# define __glibcxx_atomic_lock_free_type_aliases 201907L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_atomic_lock_free_type_aliases)
# define __cpp_lib_atomic_lock_free_type_aliases 201907L
# endif
# endif
#endif /* !defined(__cpp_lib_atomic_lock_free_type_aliases) */
#undef __glibcxx_want_atomic_lock_free_type_aliases
#if !defined(__cpp_lib_atomic_ref)
# if (__cplusplus >= 202002L)
# define __glibcxx_atomic_ref 201806L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_atomic_ref)
# define __cpp_lib_atomic_ref 201806L
# endif
# endif
#endif /* !defined(__cpp_lib_atomic_ref) */
#undef __glibcxx_want_atomic_ref
#if !defined(__cpp_lib_atomic_value_initialization)
# if (__cplusplus >= 202002L) && (__cpp_concepts >= 201907L)
# define __glibcxx_atomic_value_initialization 201911L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_atomic_value_initialization)
# define __cpp_lib_atomic_value_initialization 201911L
# endif
# endif
#endif /* !defined(__cpp_lib_atomic_value_initialization) */
#undef __glibcxx_want_atomic_value_initialization
#if !defined(__cpp_lib_bind_front)
# if (__cplusplus > 202302L)
# define __glibcxx_bind_front 202306L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_bind_front)
# define __cpp_lib_bind_front 202306L
# endif
# elif (__cplusplus >= 202002L)
# define __glibcxx_bind_front 201907L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_bind_front)
# define __cpp_lib_bind_front 201907L
# endif
# endif
#endif /* !defined(__cpp_lib_bind_front) */
#undef __glibcxx_want_bind_front
#if !defined(__cpp_lib_bind_back)
# if (__cplusplus > 202302L)
# define __glibcxx_bind_back 202306L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_bind_back)
# define __cpp_lib_bind_back 202306L
# endif
# elif (__cplusplus >= 202100L) && (__cpp_explicit_this_parameter)
# define __glibcxx_bind_back 202202L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_bind_back)
# define __cpp_lib_bind_back 202202L
# endif
# endif
#endif /* !defined(__cpp_lib_bind_back) */
#undef __glibcxx_want_bind_back
#if !defined(__cpp_lib_starts_ends_with)
# if (__cplusplus >= 202002L)
# define __glibcxx_starts_ends_with 201711L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_starts_ends_with)
# define __cpp_lib_starts_ends_with 201711L
# endif
# endif
#endif /* !defined(__cpp_lib_starts_ends_with) */
#undef __glibcxx_want_starts_ends_with
#if !defined(__cpp_lib_bit_cast)
# if (__cplusplus >= 202002L) && (__has_builtin(__builtin_bit_cast))
# define __glibcxx_bit_cast 201806L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_bit_cast)
# define __cpp_lib_bit_cast 201806L
# endif
# endif
#endif /* !defined(__cpp_lib_bit_cast) */
#undef __glibcxx_want_bit_cast
#if !defined(__cpp_lib_bitops)
# if (__cplusplus >= 202002L)
# define __glibcxx_bitops 201907L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_bitops)
# define __cpp_lib_bitops 201907L
# endif
# endif
#endif /* !defined(__cpp_lib_bitops) */
#undef __glibcxx_want_bitops
#if !defined(__cpp_lib_bounded_array_traits)
# if (__cplusplus >= 202002L)
# define __glibcxx_bounded_array_traits 201902L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_bounded_array_traits)
# define __cpp_lib_bounded_array_traits 201902L
# endif
# endif
#endif /* !defined(__cpp_lib_bounded_array_traits) */
#undef __glibcxx_want_bounded_array_traits
#if !defined(__cpp_lib_concepts)
# if (__cplusplus >= 202002L) && (__cpp_concepts >= 201907L)
# define __glibcxx_concepts 202002L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_concepts)
# define __cpp_lib_concepts 202002L
# endif
# endif
#endif /* !defined(__cpp_lib_concepts) */
#undef __glibcxx_want_concepts
#if !defined(__cpp_lib_optional)
# if (__cplusplus >= 202100L) && (__glibcxx_concepts)
# define __glibcxx_optional 202110L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_optional)
# define __cpp_lib_optional 202110L
# endif
# elif (__cplusplus >= 202002L)
# define __glibcxx_optional 202106L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_optional)
# define __cpp_lib_optional 202106L
# endif
# elif (__cplusplus >= 201703L)
# define __glibcxx_optional 201606L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_optional)
# define __cpp_lib_optional 201606L
# endif
# endif
#endif /* !defined(__cpp_lib_optional) */
#undef __glibcxx_want_optional
#if !defined(__cpp_lib_optional_range_support)
# if (__cplusplus > 202302L)
# define __glibcxx_optional_range_support 202406L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_optional_range_support)
# define __cpp_lib_optional_range_support 202406L
# endif
# endif
#endif /* !defined(__cpp_lib_optional_range_support) */
#undef __glibcxx_want_optional_range_support
#if !defined(__cpp_lib_destroying_delete)
# if (__cplusplus >= 202002L) && (__cpp_impl_destroying_delete)
# define __glibcxx_destroying_delete 201806L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_destroying_delete)
# define __cpp_lib_destroying_delete 201806L
# endif
# endif
#endif /* !defined(__cpp_lib_destroying_delete) */
#undef __glibcxx_want_destroying_delete
#if !defined(__cpp_lib_constexpr_string_view)
# if (__cplusplus >= 202002L)
# define __glibcxx_constexpr_string_view 201811L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_string_view)
# define __cpp_lib_constexpr_string_view 201811L
# endif
# endif
#endif /* !defined(__cpp_lib_constexpr_string_view) */
#undef __glibcxx_want_constexpr_string_view
#if !defined(__cpp_lib_endian)
# if (__cplusplus >= 202002L)
# define __glibcxx_endian 201907L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_endian)
# define __cpp_lib_endian 201907L
# endif
# endif
#endif /* !defined(__cpp_lib_endian) */
#undef __glibcxx_want_endian
#if !defined(__cpp_lib_int_pow2)
# if (__cplusplus >= 202002L)
# define __glibcxx_int_pow2 202002L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_int_pow2)
# define __cpp_lib_int_pow2 202002L
# endif
# endif
#endif /* !defined(__cpp_lib_int_pow2) */
#undef __glibcxx_want_int_pow2
#if !defined(__cpp_lib_integer_comparison_functions)
# if (__cplusplus >= 202002L)
# define __glibcxx_integer_comparison_functions 202002L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_integer_comparison_functions)
# define __cpp_lib_integer_comparison_functions 202002L
# endif
# endif
#endif /* !defined(__cpp_lib_integer_comparison_functions) */
#undef __glibcxx_want_integer_comparison_functions
#if !defined(__cpp_lib_is_constant_evaluated)
# if (__cplusplus >= 202002L) && (defined(_GLIBCXX_HAVE_IS_CONSTANT_EVALUATED))
# define __glibcxx_is_constant_evaluated 201811L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_is_constant_evaluated)
# define __cpp_lib_is_constant_evaluated 201811L
# endif
# endif
#endif /* !defined(__cpp_lib_is_constant_evaluated) */
#undef __glibcxx_want_is_constant_evaluated
#if !defined(__cpp_lib_constexpr_char_traits)
# if (__cplusplus >= 202002L) && (defined(__glibcxx_is_constant_evaluated))
# define __glibcxx_constexpr_char_traits 201811L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_char_traits)
# define __cpp_lib_constexpr_char_traits 201811L
# endif
# elif (__cplusplus >= 201703L) && (_GLIBCXX_HAVE_IS_CONSTANT_EVALUATED)
# define __glibcxx_constexpr_char_traits 201611L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_char_traits)
# define __cpp_lib_constexpr_char_traits 201611L
# endif
# endif
#endif /* !defined(__cpp_lib_constexpr_char_traits) */
#undef __glibcxx_want_constexpr_char_traits
#if !defined(__cpp_lib_is_layout_compatible)
# if (__cplusplus >= 202002L) && (__has_builtin(__is_layout_compatible) && __has_builtin(__builtin_is_corresponding_member))
# define __glibcxx_is_layout_compatible 201907L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_is_layout_compatible)
# define __cpp_lib_is_layout_compatible 201907L
# endif
# endif
#endif /* !defined(__cpp_lib_is_layout_compatible) */
#undef __glibcxx_want_is_layout_compatible
#if !defined(__cpp_lib_is_nothrow_convertible)
# if (__cplusplus >= 202002L)
# define __glibcxx_is_nothrow_convertible 201806L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_is_nothrow_convertible)
# define __cpp_lib_is_nothrow_convertible 201806L
# endif
# endif
#endif /* !defined(__cpp_lib_is_nothrow_convertible) */
#undef __glibcxx_want_is_nothrow_convertible
#if !defined(__cpp_lib_is_pointer_interconvertible)
# if (__cplusplus >= 202002L) && (__has_builtin(__is_pointer_interconvertible_base_of) && __has_builtin(__builtin_is_pointer_interconvertible_with_class))
# define __glibcxx_is_pointer_interconvertible 201907L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_is_pointer_interconvertible)
# define __cpp_lib_is_pointer_interconvertible 201907L
# endif
# endif
#endif /* !defined(__cpp_lib_is_pointer_interconvertible) */
#undef __glibcxx_want_is_pointer_interconvertible
#if !defined(__cpp_lib_math_constants)
# if (__cplusplus >= 202002L)
# define __glibcxx_math_constants 201907L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_math_constants)
# define __cpp_lib_math_constants 201907L
# endif
# endif
#endif /* !defined(__cpp_lib_math_constants) */
#undef __glibcxx_want_math_constants
#if !defined(__cpp_lib_make_obj_using_allocator)
# if (__cplusplus >= 202002L) && (__cpp_concepts)
# define __glibcxx_make_obj_using_allocator 201811L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_make_obj_using_allocator)
# endif
# endif
#endif /* !defined(__cpp_lib_make_obj_using_allocator) */
#undef __glibcxx_want_make_obj_using_allocator
#if !defined(__cpp_lib_remove_cvref)
# if (__cplusplus >= 202002L)
# define __glibcxx_remove_cvref 201711L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_remove_cvref)
# define __cpp_lib_remove_cvref 201711L
# endif
# endif
#endif /* !defined(__cpp_lib_remove_cvref) */
#undef __glibcxx_want_remove_cvref
#if !defined(__cpp_lib_source_location)
# if (__cplusplus >= 202002L) && (__has_builtin(__builtin_source_location))
# define __glibcxx_source_location 201907L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_source_location)
# define __cpp_lib_source_location 201907L
# endif
# endif
#endif /* !defined(__cpp_lib_source_location) */
#undef __glibcxx_want_source_location
#if !defined(__cpp_lib_span)
# if (__cplusplus > 202302L) && (__glibcxx_concepts)
# define __glibcxx_span 202311L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_span)
# define __cpp_lib_span 202311L
# endif
# elif (__cplusplus >= 202002L) && (__glibcxx_concepts)
# define __glibcxx_span 202002L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_span)
# define __cpp_lib_span 202002L
# endif
# endif
#endif /* !defined(__cpp_lib_span) */
#undef __glibcxx_want_span
#if !defined(__cpp_lib_mdspan)
# if (__cplusplus > 202302L)
# define __glibcxx_mdspan 202406L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_mdspan)
# define __cpp_lib_mdspan 202406L
# endif
# elif (__cplusplus >= 202100L)
# define __glibcxx_mdspan 202207L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_mdspan)
# define __cpp_lib_mdspan 202207L
# endif
# endif
#endif /* !defined(__cpp_lib_mdspan) */
#undef __glibcxx_want_mdspan
#if !defined(__cpp_lib_aligned_accessor)
# if (__cplusplus > 202302L) && (__glibcxx_assume_aligned && __glibcxx_is_sufficiently_aligned)
# define __glibcxx_aligned_accessor 202411L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_aligned_accessor)
# define __cpp_lib_aligned_accessor 202411L
# endif
# endif
#endif /* !defined(__cpp_lib_aligned_accessor) */
#undef __glibcxx_want_aligned_accessor
#if !defined(__cpp_lib_padded_layouts)
# if (__cplusplus > 202302L)
# define __glibcxx_padded_layouts 1L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_padded_layouts)
# endif
# endif
#endif /* !defined(__cpp_lib_padded_layouts) */
#undef __glibcxx_want_padded_layouts
#if !defined(__cpp_lib_submdspan)
# if (__cplusplus > 202302L)
# define __glibcxx_submdspan 1L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_submdspan)
# endif
# endif
#endif /* !defined(__cpp_lib_submdspan) */
#undef __glibcxx_want_submdspan
#if !defined(__cpp_lib_ssize)
# if (__cplusplus >= 202002L)
# define __glibcxx_ssize 201902L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ssize)
# define __cpp_lib_ssize 201902L
# endif
# endif
#endif /* !defined(__cpp_lib_ssize) */
#undef __glibcxx_want_ssize
#if !defined(__cpp_lib_three_way_comparison)
# if (__cplusplus >= 202002L) && (__cpp_impl_three_way_comparison >= 201907L && __glibcxx_concepts)
# define __glibcxx_three_way_comparison 201907L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_three_way_comparison)
# define __cpp_lib_three_way_comparison 201907L
# endif
# endif
#endif /* !defined(__cpp_lib_three_way_comparison) */
#undef __glibcxx_want_three_way_comparison
#if !defined(__cpp_lib_to_address)
# if (__cplusplus >= 202002L)
# define __glibcxx_to_address 201711L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_to_address)
# define __cpp_lib_to_address 201711L
# endif
# endif
#endif /* !defined(__cpp_lib_to_address) */
#undef __glibcxx_want_to_address
#if !defined(__cpp_lib_to_array)
# if (__cplusplus >= 202002L) && (__cpp_generic_lambdas >= 201707L)
# define __glibcxx_to_array 201907L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_to_array)
# define __cpp_lib_to_array 201907L
# endif
# endif
#endif /* !defined(__cpp_lib_to_array) */
#undef __glibcxx_want_to_array
#if !defined(__cpp_lib_type_identity)
# if (__cplusplus >= 202002L)
# define __glibcxx_type_identity 201806L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_type_identity)
# define __cpp_lib_type_identity 201806L
# endif
# endif
#endif /* !defined(__cpp_lib_type_identity) */
#undef __glibcxx_want_type_identity
#if !defined(__cpp_lib_unwrap_ref)
# if (__cplusplus >= 202002L)
# define __glibcxx_unwrap_ref 201811L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_unwrap_ref)
# define __cpp_lib_unwrap_ref 201811L
# endif
# endif
#endif /* !defined(__cpp_lib_unwrap_ref) */
#undef __glibcxx_want_unwrap_ref
#if !defined(__cpp_lib_constexpr_iterator)
# if (__cplusplus >= 202002L)
# define __glibcxx_constexpr_iterator 201811L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_iterator)
# define __cpp_lib_constexpr_iterator 201811L
# endif
# endif
#endif /* !defined(__cpp_lib_constexpr_iterator) */
#undef __glibcxx_want_constexpr_iterator
#if !defined(__cpp_lib_interpolate)
# if (__cplusplus >= 202002L)
# define __glibcxx_interpolate 201902L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_interpolate)
# define __cpp_lib_interpolate 201902L
# endif
# endif
#endif /* !defined(__cpp_lib_interpolate) */
#undef __glibcxx_want_interpolate
#if !defined(__cpp_lib_constexpr_utility)
# if (__cplusplus >= 202002L)
# define __glibcxx_constexpr_utility 201811L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_utility)
# define __cpp_lib_constexpr_utility 201811L
# endif
# endif
#endif /* !defined(__cpp_lib_constexpr_utility) */
#undef __glibcxx_want_constexpr_utility
#if !defined(__cpp_lib_shift)
# if (__cplusplus >= 202100L)
# define __glibcxx_shift 202202L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_shift)
# define __cpp_lib_shift 202202L
# endif
# elif (__cplusplus >= 202002L)
# define __glibcxx_shift 201806L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_shift)
# define __cpp_lib_shift 201806L
# endif
# endif
#endif /* !defined(__cpp_lib_shift) */
#undef __glibcxx_want_shift
#if !defined(__cpp_lib_ranges)
# if (__cplusplus > 202302L) && (__glibcxx_concepts)
# define __glibcxx_ranges 202406L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges)
# define __cpp_lib_ranges 202406L
# endif
# elif (__cplusplus >= 202100L) && (__glibcxx_concepts)
# define __glibcxx_ranges 202302L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges)
# define __cpp_lib_ranges 202302L
# endif
# elif (__cplusplus >= 202002L) && (__glibcxx_concepts)
# define __glibcxx_ranges 202110L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges)
# define __cpp_lib_ranges 202110L
# endif
# endif
#endif /* !defined(__cpp_lib_ranges) */
#undef __glibcxx_want_ranges
#if !defined(__cpp_lib_constexpr_numeric)
# if (__cplusplus >= 202002L)
# define __glibcxx_constexpr_numeric 201911L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_numeric)
# define __cpp_lib_constexpr_numeric 201911L
# endif
# endif
#endif /* !defined(__cpp_lib_constexpr_numeric) */
#undef __glibcxx_want_constexpr_numeric
#if !defined(__cpp_lib_constexpr_functional)
# if (__cplusplus >= 202002L)
# define __glibcxx_constexpr_functional 201907L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_functional)
# define __cpp_lib_constexpr_functional 201907L
# endif
# endif
#endif /* !defined(__cpp_lib_constexpr_functional) */
#undef __glibcxx_want_constexpr_functional
#if !defined(__cpp_lib_constexpr_algorithms)
# if (__cplusplus > 202302L)
# define __glibcxx_constexpr_algorithms 202306L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_algorithms)
# define __cpp_lib_constexpr_algorithms 202306L
# endif
# elif (__cplusplus >= 202002L)
# define __glibcxx_constexpr_algorithms 201806L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_algorithms)
# define __cpp_lib_constexpr_algorithms 201806L
# endif
# endif
#endif /* !defined(__cpp_lib_constexpr_algorithms) */
#undef __glibcxx_want_constexpr_algorithms
#if !defined(__cpp_lib_constexpr_tuple)
# if (__cplusplus >= 202002L)
# define __glibcxx_constexpr_tuple 201811L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_tuple)
# define __cpp_lib_constexpr_tuple 201811L
# endif
# endif
#endif /* !defined(__cpp_lib_constexpr_tuple) */
#undef __glibcxx_want_constexpr_tuple
#if !defined(__cpp_lib_constexpr_memory)
# if (__cplusplus >= 202100L) && (__cpp_constexpr_dynamic_alloc)
# define __glibcxx_constexpr_memory 202202L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_memory)
# define __cpp_lib_constexpr_memory 202202L
# endif
# elif (__cplusplus >= 202002L)
# define __glibcxx_constexpr_memory 201811L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_memory)
# define __cpp_lib_constexpr_memory 201811L
# endif
# endif
#endif /* !defined(__cpp_lib_constexpr_memory) */
#undef __glibcxx_want_constexpr_memory
#if !defined(__cpp_lib_atomic_shared_ptr)
# if (__cplusplus >= 202002L) && _GLIBCXX_HOSTED
# define __glibcxx_atomic_shared_ptr 201711L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_atomic_shared_ptr)
# define __cpp_lib_atomic_shared_ptr 201711L
# endif
# endif
#endif /* !defined(__cpp_lib_atomic_shared_ptr) */
#undef __glibcxx_want_atomic_shared_ptr
#if !defined(__cpp_lib_atomic_wait)
# if (__cplusplus >= 202002L) && defined(_GLIBCXX_HAS_GTHREADS) && _GLIBCXX_HOSTED
# define __glibcxx_atomic_wait 201907L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_atomic_wait)
# define __cpp_lib_atomic_wait 201907L
# endif
# elif (__cplusplus >= 202002L) && !defined(_GLIBCXX_HAS_GTHREADS) && _GLIBCXX_HOSTED && (defined(_GLIBCXX_HAVE_LINUX_FUTEX))
# define __glibcxx_atomic_wait 201907L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_atomic_wait)
# define __cpp_lib_atomic_wait 201907L
# endif
# endif
#endif /* !defined(__cpp_lib_atomic_wait) */
#undef __glibcxx_want_atomic_wait
#if !defined(__cpp_lib_barrier)
# if (__cplusplus >= 202002L) && (__cpp_aligned_new && __glibcxx_atomic_wait)
# define __glibcxx_barrier 201907L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_barrier)
# define __cpp_lib_barrier 201907L
# endif
# endif
#endif /* !defined(__cpp_lib_barrier) */
#undef __glibcxx_want_barrier
#if !defined(__cpp_lib_format)
# if (__cplusplus > 202302L) && _GLIBCXX_HOSTED
# define __glibcxx_format 202311L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_format)
# define __cpp_lib_format 202311L
# endif
# elif (__cplusplus >= 202002L) && _GLIBCXX_HOSTED
# define __glibcxx_format 202304L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_format)
# define __cpp_lib_format 202304L
# endif
# endif
#endif /* !defined(__cpp_lib_format) */
#undef __glibcxx_want_format
#if !defined(__cpp_lib_format_uchar)
# if (__cplusplus >= 202002L) && _GLIBCXX_HOSTED
# define __glibcxx_format_uchar 202311L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_format_uchar)
# define __cpp_lib_format_uchar 202311L
# endif
# endif
#endif /* !defined(__cpp_lib_format_uchar) */
#undef __glibcxx_want_format_uchar
#if !defined(__cpp_lib_constexpr_complex)
# if (__cplusplus >= 202002L) && _GLIBCXX_HOSTED
# define __glibcxx_constexpr_complex 201711L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_complex)
# define __cpp_lib_constexpr_complex 201711L
# endif
# endif
#endif /* !defined(__cpp_lib_constexpr_complex) */
#undef __glibcxx_want_constexpr_complex
#if !defined(__cpp_lib_constexpr_dynamic_alloc)
# if (__cplusplus >= 202002L) && _GLIBCXX_HOSTED
# define __glibcxx_constexpr_dynamic_alloc 201907L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_dynamic_alloc)
# define __cpp_lib_constexpr_dynamic_alloc 201907L
# endif
# endif
#endif /* !defined(__cpp_lib_constexpr_dynamic_alloc) */
#undef __glibcxx_want_constexpr_dynamic_alloc
#if !defined(__cpp_lib_constexpr_string)
# if (__cplusplus >= 202002L) && _GLIBCXX_USE_CXX11_ABI && _GLIBCXX_HOSTED && (defined(__glibcxx_is_constant_evaluated))
# define __glibcxx_constexpr_string 201907L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_string)
# define __cpp_lib_constexpr_string 201907L
# endif
# elif (__cplusplus >= 202002L) && !_GLIBCXX_USE_CXX11_ABI && _GLIBCXX_HOSTED && (defined(__glibcxx_is_constant_evaluated))
# define __glibcxx_constexpr_string 201811L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_string)
# define __cpp_lib_constexpr_string 201811L
# endif
# elif (__cplusplus >= 201703L) && _GLIBCXX_HOSTED && (_GLIBCXX_HAVE_IS_CONSTANT_EVALUATED)
# define __glibcxx_constexpr_string 201611L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_string)
# define __cpp_lib_constexpr_string 201611L
# endif
# endif
#endif /* !defined(__cpp_lib_constexpr_string) */
#undef __glibcxx_want_constexpr_string
#if !defined(__cpp_lib_constexpr_vector)
# if (__cplusplus >= 202002L) && _GLIBCXX_HOSTED
# define __glibcxx_constexpr_vector 201907L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_vector)
# define __cpp_lib_constexpr_vector 201907L
# endif
# endif
#endif /* !defined(__cpp_lib_constexpr_vector) */
#undef __glibcxx_want_constexpr_vector
#if !defined(__cpp_lib_constrained_equality)
# if (__cplusplus >= 202100L) && (__glibcxx_three_way_comparison)
# define __glibcxx_constrained_equality 202411L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constrained_equality)
# define __cpp_lib_constrained_equality 202411L
# endif
# elif (__cplusplus >= 202002L) && (__glibcxx_three_way_comparison)
# define __glibcxx_constrained_equality 202403L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constrained_equality)
# define __cpp_lib_constrained_equality 202403L
# endif
# endif
#endif /* !defined(__cpp_lib_constrained_equality) */
#undef __glibcxx_want_constrained_equality
#if !defined(__cpp_lib_erase_if)
# if (__cplusplus >= 202002L) && _GLIBCXX_HOSTED
# define __glibcxx_erase_if 202002L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_erase_if)
# define __cpp_lib_erase_if 202002L
# endif
# endif
#endif /* !defined(__cpp_lib_erase_if) */
#undef __glibcxx_want_erase_if
#if !defined(__cpp_lib_generic_unordered_lookup)
# if (__cplusplus >= 202002L) && _GLIBCXX_HOSTED
# define __glibcxx_generic_unordered_lookup 201811L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_generic_unordered_lookup)
# define __cpp_lib_generic_unordered_lookup 201811L
# endif
# endif
#endif /* !defined(__cpp_lib_generic_unordered_lookup) */
#undef __glibcxx_want_generic_unordered_lookup
#if !defined(__cpp_lib_jthread)
# if (__cplusplus >= 202002L) && defined(_GLIBCXX_HAS_GTHREADS) && _GLIBCXX_HOSTED
# define __glibcxx_jthread 201911L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_jthread)
# define __cpp_lib_jthread 201911L
# endif
# endif
#endif /* !defined(__cpp_lib_jthread) */
#undef __glibcxx_want_jthread
#if !defined(__cpp_lib_latch)
# if (__cplusplus >= 202002L) && (__glibcxx_atomic_wait)
# define __glibcxx_latch 201907L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_latch)
# define __cpp_lib_latch 201907L
# endif
# endif
#endif /* !defined(__cpp_lib_latch) */
#undef __glibcxx_want_latch
#if !defined(__cpp_lib_list_remove_return_type)
# if (__cplusplus >= 202002L) && _GLIBCXX_HOSTED
# define __glibcxx_list_remove_return_type 201806L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_list_remove_return_type)
# define __cpp_lib_list_remove_return_type 201806L
# endif
# endif
#endif /* !defined(__cpp_lib_list_remove_return_type) */
#undef __glibcxx_want_list_remove_return_type
#if !defined(__cpp_lib_polymorphic_allocator)
# if (__cplusplus >= 202002L) && _GLIBCXX_HOSTED
# define __glibcxx_polymorphic_allocator 201902L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_polymorphic_allocator)
# define __cpp_lib_polymorphic_allocator 201902L
# endif
# endif
#endif /* !defined(__cpp_lib_polymorphic_allocator) */
#undef __glibcxx_want_polymorphic_allocator
#if !defined(__cpp_lib_move_iterator_concept)
# if (__cplusplus >= 202002L) && (__glibcxx_concepts)
# define __glibcxx_move_iterator_concept 202207L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_move_iterator_concept)
# define __cpp_lib_move_iterator_concept 202207L
# endif
# endif
#endif /* !defined(__cpp_lib_move_iterator_concept) */
#undef __glibcxx_want_move_iterator_concept
#if !defined(__cpp_lib_semaphore)
# if (__cplusplus >= 202002L) && _GLIBCXX_HOSTED && (__glibcxx_atomic_wait)
# define __glibcxx_semaphore 201907L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_semaphore)
# define __cpp_lib_semaphore 201907L
# endif
# endif
#endif /* !defined(__cpp_lib_semaphore) */
#undef __glibcxx_want_semaphore
#if !defined(__cpp_lib_smart_ptr_for_overwrite)
# if (__cplusplus >= 202002L) && _GLIBCXX_HOSTED
# define __glibcxx_smart_ptr_for_overwrite 202002L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_smart_ptr_for_overwrite)
# define __cpp_lib_smart_ptr_for_overwrite 202002L
# endif
# endif
#endif /* !defined(__cpp_lib_smart_ptr_for_overwrite) */
#undef __glibcxx_want_smart_ptr_for_overwrite
#if !defined(__cpp_lib_syncbuf)
# if (__cplusplus >= 202002L) && _GLIBCXX_USE_CXX11_ABI && _GLIBCXX_HOSTED
# define __glibcxx_syncbuf 201803L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_syncbuf)
# define __cpp_lib_syncbuf 201803L
# endif
# endif
#endif /* !defined(__cpp_lib_syncbuf) */
#undef __glibcxx_want_syncbuf
#if !defined(__cpp_lib_byteswap)
# if (__cplusplus >= 202100L)
# define __glibcxx_byteswap 202110L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_byteswap)
# define __cpp_lib_byteswap 202110L
# endif
# endif
#endif /* !defined(__cpp_lib_byteswap) */
#undef __glibcxx_want_byteswap
#if !defined(__cpp_lib_constexpr_charconv)
# if (__cplusplus >= 202100L)
# define __glibcxx_constexpr_charconv 202207L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_charconv)
# define __cpp_lib_constexpr_charconv 202207L
# endif
# endif
#endif /* !defined(__cpp_lib_constexpr_charconv) */
#undef __glibcxx_want_constexpr_charconv
#if !defined(__cpp_lib_constexpr_typeinfo)
# if (__cplusplus >= 202100L)
# define __glibcxx_constexpr_typeinfo 202106L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_typeinfo)
# define __cpp_lib_constexpr_typeinfo 202106L
# endif
# endif
#endif /* !defined(__cpp_lib_constexpr_typeinfo) */
#undef __glibcxx_want_constexpr_typeinfo
#if !defined(__cpp_lib_expected)
# if (__cplusplus >= 202100L) && (__cpp_concepts >= 202002L)
# define __glibcxx_expected 202211L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_expected)
# define __cpp_lib_expected 202211L
# endif
# endif
#endif /* !defined(__cpp_lib_expected) */
#undef __glibcxx_want_expected
#if !defined(__cpp_lib_format_ranges)
# if (__cplusplus >= 202100L) && _GLIBCXX_HOSTED
# define __glibcxx_format_ranges 202207L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_format_ranges)
# define __cpp_lib_format_ranges 202207L
# endif
# endif
#endif /* !defined(__cpp_lib_format_ranges) */
#undef __glibcxx_want_format_ranges
#if !defined(__cpp_lib_freestanding_algorithm)
# if (__cplusplus >= 202100L)
# define __glibcxx_freestanding_algorithm 202311L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_freestanding_algorithm)
# define __cpp_lib_freestanding_algorithm 202311L
# endif
# endif
#endif /* !defined(__cpp_lib_freestanding_algorithm) */
#undef __glibcxx_want_freestanding_algorithm
#if !defined(__cpp_lib_freestanding_array)
# if (__cplusplus >= 202100L)
# define __glibcxx_freestanding_array 202311L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_freestanding_array)
# define __cpp_lib_freestanding_array 202311L
# endif
# endif
#endif /* !defined(__cpp_lib_freestanding_array) */
#undef __glibcxx_want_freestanding_array
#if !defined(__cpp_lib_freestanding_cstring)
# if (__cplusplus >= 202100L)
# define __glibcxx_freestanding_cstring 202311L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_freestanding_cstring)
# define __cpp_lib_freestanding_cstring 202311L
# endif
# endif
#endif /* !defined(__cpp_lib_freestanding_cstring) */
#undef __glibcxx_want_freestanding_cstring
#if !defined(__cpp_lib_freestanding_expected)
# if (__cplusplus >= 202100L) && (__cpp_lib_expected)
# define __glibcxx_freestanding_expected 202311L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_freestanding_expected)
# define __cpp_lib_freestanding_expected 202311L
# endif
# endif
#endif /* !defined(__cpp_lib_freestanding_expected) */
#undef __glibcxx_want_freestanding_expected
#if !defined(__cpp_lib_freestanding_optional)
# if (__cplusplus >= 202100L)
# define __glibcxx_freestanding_optional 202311L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_freestanding_optional)
# define __cpp_lib_freestanding_optional 202311L
# endif
# endif
#endif /* !defined(__cpp_lib_freestanding_optional) */
#undef __glibcxx_want_freestanding_optional
#if !defined(__cpp_lib_freestanding_string_view)
# if (__cplusplus >= 202100L)
# define __glibcxx_freestanding_string_view 202311L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_freestanding_string_view)
# define __cpp_lib_freestanding_string_view 202311L
# endif
# endif
#endif /* !defined(__cpp_lib_freestanding_string_view) */
#undef __glibcxx_want_freestanding_string_view
#if !defined(__cpp_lib_freestanding_variant)
# if (__cplusplus >= 202100L)
# define __glibcxx_freestanding_variant 202311L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_freestanding_variant)
# define __cpp_lib_freestanding_variant 202311L
# endif
# endif
#endif /* !defined(__cpp_lib_freestanding_variant) */
#undef __glibcxx_want_freestanding_variant
#if !defined(__cpp_lib_invoke_r)
# if (__cplusplus >= 202100L)
# define __glibcxx_invoke_r 202106L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_invoke_r)
# define __cpp_lib_invoke_r 202106L
# endif
# endif
#endif /* !defined(__cpp_lib_invoke_r) */
#undef __glibcxx_want_invoke_r
#if !defined(__cpp_lib_is_scoped_enum)
# if (__cplusplus >= 202100L)
# define __glibcxx_is_scoped_enum 202011L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_is_scoped_enum)
# define __cpp_lib_is_scoped_enum 202011L
# endif
# endif
#endif /* !defined(__cpp_lib_is_scoped_enum) */
#undef __glibcxx_want_is_scoped_enum
#if !defined(__cpp_lib_reference_from_temporary)
# if (__cplusplus >= 202100L) && (__has_builtin(__reference_constructs_from_temporary) && __has_builtin(__reference_converts_from_temporary))
# define __glibcxx_reference_from_temporary 202202L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_reference_from_temporary)
# define __cpp_lib_reference_from_temporary 202202L
# endif
# endif
#endif /* !defined(__cpp_lib_reference_from_temporary) */
#undef __glibcxx_want_reference_from_temporary
#if !defined(__cpp_lib_containers_ranges)
# if (__cplusplus >= 202100L) && _GLIBCXX_HOSTED
# define __glibcxx_containers_ranges 202202L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_containers_ranges)
# define __cpp_lib_containers_ranges 202202L
# endif
# endif
#endif /* !defined(__cpp_lib_containers_ranges) */
#undef __glibcxx_want_containers_ranges
#if !defined(__cpp_lib_ranges_to_container)
# if (__cplusplus >= 202100L) && _GLIBCXX_HOSTED
# define __glibcxx_ranges_to_container 202202L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_to_container)
# define __cpp_lib_ranges_to_container 202202L
# endif
# endif
#endif /* !defined(__cpp_lib_ranges_to_container) */
#undef __glibcxx_want_ranges_to_container
#if !defined(__cpp_lib_ranges_zip)
# if (__cplusplus >= 202100L)
# define __glibcxx_ranges_zip 202110L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_zip)
# define __cpp_lib_ranges_zip 202110L
# endif
# endif
#endif /* !defined(__cpp_lib_ranges_zip) */
#undef __glibcxx_want_ranges_zip
#if !defined(__cpp_lib_ranges_chunk)
# if (__cplusplus >= 202100L)
# define __glibcxx_ranges_chunk 202202L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_chunk)
# define __cpp_lib_ranges_chunk 202202L
# endif
# endif
#endif /* !defined(__cpp_lib_ranges_chunk) */
#undef __glibcxx_want_ranges_chunk
#if !defined(__cpp_lib_ranges_slide)
# if (__cplusplus >= 202100L)
# define __glibcxx_ranges_slide 202202L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_slide)
# define __cpp_lib_ranges_slide 202202L
# endif
# endif
#endif /* !defined(__cpp_lib_ranges_slide) */
#undef __glibcxx_want_ranges_slide
#if !defined(__cpp_lib_ranges_chunk_by)
# if (__cplusplus >= 202100L)
# define __glibcxx_ranges_chunk_by 202202L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_chunk_by)
# define __cpp_lib_ranges_chunk_by 202202L
# endif
# endif
#endif /* !defined(__cpp_lib_ranges_chunk_by) */
#undef __glibcxx_want_ranges_chunk_by
#if !defined(__cpp_lib_ranges_join_with)
# if (__cplusplus >= 202100L)
# define __glibcxx_ranges_join_with 202202L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_join_with)
# define __cpp_lib_ranges_join_with 202202L
# endif
# endif
#endif /* !defined(__cpp_lib_ranges_join_with) */
#undef __glibcxx_want_ranges_join_with
#if !defined(__cpp_lib_ranges_repeat)
# if (__cplusplus >= 202100L)
# define __glibcxx_ranges_repeat 202207L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_repeat)
# define __cpp_lib_ranges_repeat 202207L
# endif
# endif
#endif /* !defined(__cpp_lib_ranges_repeat) */
#undef __glibcxx_want_ranges_repeat
#if !defined(__cpp_lib_ranges_stride)
# if (__cplusplus >= 202100L)
# define __glibcxx_ranges_stride 202207L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_stride)
# define __cpp_lib_ranges_stride 202207L
# endif
# endif
#endif /* !defined(__cpp_lib_ranges_stride) */
#undef __glibcxx_want_ranges_stride
#if !defined(__cpp_lib_ranges_cartesian_product)
# if (__cplusplus >= 202100L)
# define __glibcxx_ranges_cartesian_product 202207L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_cartesian_product)
# define __cpp_lib_ranges_cartesian_product 202207L
# endif
# endif
#endif /* !defined(__cpp_lib_ranges_cartesian_product) */
#undef __glibcxx_want_ranges_cartesian_product
#if !defined(__cpp_lib_ranges_as_rvalue)
# if (__cplusplus >= 202100L)
# define __glibcxx_ranges_as_rvalue 202207L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_as_rvalue)
# define __cpp_lib_ranges_as_rvalue 202207L
# endif
# endif
#endif /* !defined(__cpp_lib_ranges_as_rvalue) */
#undef __glibcxx_want_ranges_as_rvalue
#if !defined(__cpp_lib_ranges_as_const)
# if (__cplusplus >= 202100L)
# define __glibcxx_ranges_as_const 202311L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_as_const)
# define __cpp_lib_ranges_as_const 202311L
# endif
# endif
#endif /* !defined(__cpp_lib_ranges_as_const) */
#undef __glibcxx_want_ranges_as_const
#if !defined(__cpp_lib_ranges_enumerate)
# if (__cplusplus >= 202100L)
# define __glibcxx_ranges_enumerate 202302L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_enumerate)
# define __cpp_lib_ranges_enumerate 202302L
# endif
# endif
#endif /* !defined(__cpp_lib_ranges_enumerate) */
#undef __glibcxx_want_ranges_enumerate
#if !defined(__cpp_lib_ranges_fold)
# if (__cplusplus >= 202100L)
# define __glibcxx_ranges_fold 202207L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_fold)
# define __cpp_lib_ranges_fold 202207L
# endif
# endif
#endif /* !defined(__cpp_lib_ranges_fold) */
#undef __glibcxx_want_ranges_fold
#if !defined(__cpp_lib_ranges_contains)
# if (__cplusplus >= 202100L)
# define __glibcxx_ranges_contains 202207L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_contains)
# define __cpp_lib_ranges_contains 202207L
# endif
# endif
#endif /* !defined(__cpp_lib_ranges_contains) */
#undef __glibcxx_want_ranges_contains
#if !defined(__cpp_lib_ranges_iota)
# if (__cplusplus >= 202100L)
# define __glibcxx_ranges_iota 202202L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_iota)
# define __cpp_lib_ranges_iota 202202L
# endif
# endif
#endif /* !defined(__cpp_lib_ranges_iota) */
#undef __glibcxx_want_ranges_iota
#if !defined(__cpp_lib_ranges_find_last)
# if (__cplusplus >= 202100L)
# define __glibcxx_ranges_find_last 202207L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_find_last)
# define __cpp_lib_ranges_find_last 202207L
# endif
# endif
#endif /* !defined(__cpp_lib_ranges_find_last) */
#undef __glibcxx_want_ranges_find_last
#if !defined(__cpp_lib_ranges_starts_ends_with)
# if (__cplusplus >= 202100L)
# define __glibcxx_ranges_starts_ends_with 202106L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_starts_ends_with)
# define __cpp_lib_ranges_starts_ends_with 202106L
# endif
# endif
#endif /* !defined(__cpp_lib_ranges_starts_ends_with) */
#undef __glibcxx_want_ranges_starts_ends_with
#if !defined(__cpp_lib_constexpr_bitset)
# if (__cplusplus >= 202100L) && _GLIBCXX_HOSTED && (__cpp_constexpr_dynamic_alloc)
# define __glibcxx_constexpr_bitset 202202L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_bitset)
# define __cpp_lib_constexpr_bitset 202202L
# endif
# endif
#endif /* !defined(__cpp_lib_constexpr_bitset) */
#undef __glibcxx_want_constexpr_bitset
#if !defined(__cpp_lib_stdatomic_h)
# if (__cplusplus >= 202100L)
# define __glibcxx_stdatomic_h 202011L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_stdatomic_h)
# define __cpp_lib_stdatomic_h 202011L
# endif
# endif
#endif /* !defined(__cpp_lib_stdatomic_h) */
#undef __glibcxx_want_stdatomic_h
#if !defined(__cpp_lib_adaptor_iterator_pair_constructor)
# if (__cplusplus >= 202100L) && _GLIBCXX_HOSTED
# define __glibcxx_adaptor_iterator_pair_constructor 202106L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_adaptor_iterator_pair_constructor)
# define __cpp_lib_adaptor_iterator_pair_constructor 202106L
# endif
# endif
#endif /* !defined(__cpp_lib_adaptor_iterator_pair_constructor) */
#undef __glibcxx_want_adaptor_iterator_pair_constructor
#if !defined(__cpp_lib_flat_map)
# if (__cplusplus >= 202100L)
# define __glibcxx_flat_map 202207L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_flat_map)
# define __cpp_lib_flat_map 202207L
# endif
# endif
#endif /* !defined(__cpp_lib_flat_map) */
#undef __glibcxx_want_flat_map
#if !defined(__cpp_lib_flat_set)
# if (__cplusplus >= 202100L)
# define __glibcxx_flat_set 202207L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_flat_set)
# define __cpp_lib_flat_set 202207L
# endif
# endif
#endif /* !defined(__cpp_lib_flat_set) */
#undef __glibcxx_want_flat_set
#if !defined(__cpp_lib_formatters)
# if (__cplusplus >= 202100L) && _GLIBCXX_HOSTED
# define __glibcxx_formatters 202302L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_formatters)
# define __cpp_lib_formatters 202302L
# endif
# endif
#endif /* !defined(__cpp_lib_formatters) */
#undef __glibcxx_want_formatters
#if !defined(__cpp_lib_forward_like)
# if (__cplusplus >= 202100L)
# define __glibcxx_forward_like 202207L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_forward_like)
# define __cpp_lib_forward_like 202207L
# endif
# endif
#endif /* !defined(__cpp_lib_forward_like) */
#undef __glibcxx_want_forward_like
#if !defined(__cpp_lib_generator)
# if (__cplusplus >= 202100L) && (__glibcxx_coroutine && __cpp_sized_deallocation)
# define __glibcxx_generator 202207L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_generator)
# define __cpp_lib_generator 202207L
# endif
# endif
#endif /* !defined(__cpp_lib_generator) */
#undef __glibcxx_want_generator
#if !defined(__cpp_lib_ios_noreplace)
# if (__cplusplus >= 202100L) && _GLIBCXX_HOSTED
# define __glibcxx_ios_noreplace 202207L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ios_noreplace)
# define __cpp_lib_ios_noreplace 202207L
# endif
# endif
#endif /* !defined(__cpp_lib_ios_noreplace) */
#undef __glibcxx_want_ios_noreplace
#if !defined(__cpp_lib_move_only_function)
# if (__cplusplus >= 202100L) && _GLIBCXX_HOSTED
# define __glibcxx_move_only_function 202110L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_move_only_function)
# define __cpp_lib_move_only_function 202110L
# endif
# endif
#endif /* !defined(__cpp_lib_move_only_function) */
#undef __glibcxx_want_move_only_function
#if !defined(__cpp_lib_copyable_function)
# if (__cplusplus > 202302L) && _GLIBCXX_HOSTED
# define __glibcxx_copyable_function 202306L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_copyable_function)
# define __cpp_lib_copyable_function 202306L
# endif
# endif
#endif /* !defined(__cpp_lib_copyable_function) */
#undef __glibcxx_want_copyable_function
#if !defined(__cpp_lib_function_ref)
# if (__cplusplus > 202302L)
# define __glibcxx_function_ref 202306L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_function_ref)
# define __cpp_lib_function_ref 202306L
# endif
# endif
#endif /* !defined(__cpp_lib_function_ref) */
#undef __glibcxx_want_function_ref
#if !defined(__cpp_lib_out_ptr)
# if (__cplusplus >= 202100L)
# define __glibcxx_out_ptr 202311L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_out_ptr)
# define __cpp_lib_out_ptr 202311L
# endif
# endif
#endif /* !defined(__cpp_lib_out_ptr) */
#undef __glibcxx_want_out_ptr
#if !defined(__cpp_lib_print)
# if (__cplusplus >= 202100L) && _GLIBCXX_HOSTED
# define __glibcxx_print 202403L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_print)
# define __cpp_lib_print 202403L
# endif
# endif
#endif /* !defined(__cpp_lib_print) */
#undef __glibcxx_want_print
#if !defined(__cpp_lib_spanstream)
# if (__cplusplus >= 202100L) && _GLIBCXX_HOSTED && (__glibcxx_span)
# define __glibcxx_spanstream 202106L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_spanstream)
# define __cpp_lib_spanstream 202106L
# endif
# endif
#endif /* !defined(__cpp_lib_spanstream) */
#undef __glibcxx_want_spanstream
#if !defined(__cpp_lib_stacktrace)
# if (__cplusplus >= 202100L) && _GLIBCXX_HOSTED && (_GLIBCXX_HAVE_STACKTRACE)
# define __glibcxx_stacktrace 202011L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_stacktrace)
# define __cpp_lib_stacktrace 202011L
# endif
# endif
#endif /* !defined(__cpp_lib_stacktrace) */
#undef __glibcxx_want_stacktrace
#if !defined(__cpp_lib_start_lifetime_as)
# if (__cplusplus >= 202100L)
# define __glibcxx_start_lifetime_as 202207L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_start_lifetime_as)
# define __cpp_lib_start_lifetime_as 202207L
# endif
# endif
#endif /* !defined(__cpp_lib_start_lifetime_as) */
#undef __glibcxx_want_start_lifetime_as
#if !defined(__cpp_lib_string_contains)
# if (__cplusplus >= 202100L) && _GLIBCXX_HOSTED
# define __glibcxx_string_contains 202011L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_string_contains)
# define __cpp_lib_string_contains 202011L
# endif
# endif
#endif /* !defined(__cpp_lib_string_contains) */
#undef __glibcxx_want_string_contains
#if !defined(__cpp_lib_string_resize_and_overwrite)
# if (__cplusplus >= 202100L) && _GLIBCXX_HOSTED
# define __glibcxx_string_resize_and_overwrite 202110L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_string_resize_and_overwrite)
# define __cpp_lib_string_resize_and_overwrite 202110L
# endif
# endif
#endif /* !defined(__cpp_lib_string_resize_and_overwrite) */
#undef __glibcxx_want_string_resize_and_overwrite
#if !defined(__cpp_lib_to_underlying)
# if (__cplusplus >= 202100L)
# define __glibcxx_to_underlying 202102L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_to_underlying)
# define __cpp_lib_to_underlying 202102L
# endif
# endif
#endif /* !defined(__cpp_lib_to_underlying) */
#undef __glibcxx_want_to_underlying
#if !defined(__cpp_lib_tuple_like)
# if (__cplusplus > 202302L) && (__cpp_explicit_this_parameter >= 202110L)
# define __glibcxx_tuple_like 202311L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_tuple_like)
# define __cpp_lib_tuple_like 202311L
# endif
# elif (__cplusplus >= 202100L)
# define __glibcxx_tuple_like 202207L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_tuple_like)
# define __cpp_lib_tuple_like 202207L
# endif
# endif
#endif /* !defined(__cpp_lib_tuple_like) */
#undef __glibcxx_want_tuple_like
#if !defined(__cpp_lib_unreachable)
# if (__cplusplus >= 202100L)
# define __glibcxx_unreachable 202202L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_unreachable)
# define __cpp_lib_unreachable 202202L
# endif
# endif
#endif /* !defined(__cpp_lib_unreachable) */
#undef __glibcxx_want_unreachable
#if !defined(__cpp_lib_algorithm_default_value_type)
# if (__cplusplus > 202302L)
# define __glibcxx_algorithm_default_value_type 202403L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_algorithm_default_value_type)
# define __cpp_lib_algorithm_default_value_type 202403L
# endif
# endif
#endif /* !defined(__cpp_lib_algorithm_default_value_type) */
#undef __glibcxx_want_algorithm_default_value_type
#if !defined(__cpp_lib_constexpr_new)
# if (__cplusplus > 202302L) && (__cpp_constexpr >= 202406L)
# define __glibcxx_constexpr_new 202406L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_new)
# define __cpp_lib_constexpr_new 202406L
# endif
# endif
#endif /* !defined(__cpp_lib_constexpr_new) */
#undef __glibcxx_want_constexpr_new
#if !defined(__cpp_lib_debugging)
# if (__cplusplus > 202302L)
# define __glibcxx_debugging 202403L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_debugging)
# define __cpp_lib_debugging 202403L
# endif
# endif
#endif /* !defined(__cpp_lib_debugging) */
#undef __glibcxx_want_debugging
#if !defined(__cpp_lib_fstream_native_handle)
# if (__cplusplus > 202302L) && _GLIBCXX_HOSTED
# define __glibcxx_fstream_native_handle 202306L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_fstream_native_handle)
# define __cpp_lib_fstream_native_handle 202306L
# endif
# endif
#endif /* !defined(__cpp_lib_fstream_native_handle) */
#undef __glibcxx_want_fstream_native_handle
#if !defined(__cpp_lib_is_virtual_base_of)
# if (__cplusplus > 202302L) && (__has_builtin(__builtin_is_virtual_base_of))
# define __glibcxx_is_virtual_base_of 202406L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_is_virtual_base_of)
# define __cpp_lib_is_virtual_base_of 202406L
# endif
# endif
#endif /* !defined(__cpp_lib_is_virtual_base_of) */
#undef __glibcxx_want_is_virtual_base_of
#if !defined(__cpp_lib_ranges_cache_latest)
# if (__cplusplus > 202302L)
# define __glibcxx_ranges_cache_latest 202411L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_cache_latest)
# define __cpp_lib_ranges_cache_latest 202411L
# endif
# endif
#endif /* !defined(__cpp_lib_ranges_cache_latest) */
#undef __glibcxx_want_ranges_cache_latest
#if !defined(__cpp_lib_ranges_concat)
# if (__cplusplus > 202302L) && (__cpp_pack_indexing)
# define __glibcxx_ranges_concat 202403L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_concat)
# define __cpp_lib_ranges_concat 202403L
# endif
# endif
#endif /* !defined(__cpp_lib_ranges_concat) */
#undef __glibcxx_want_ranges_concat
#if !defined(__cpp_lib_ratio)
# if (__cplusplus > 202302L)
# define __glibcxx_ratio 202306L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ratio)
# define __cpp_lib_ratio 202306L
# endif
# endif
#endif /* !defined(__cpp_lib_ratio) */
#undef __glibcxx_want_ratio
#if !defined(__cpp_lib_reference_wrapper)
# if (__cplusplus > 202302L)
# define __glibcxx_reference_wrapper 202403L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_reference_wrapper)
# define __cpp_lib_reference_wrapper 202403L
# endif
# endif
#endif /* !defined(__cpp_lib_reference_wrapper) */
#undef __glibcxx_want_reference_wrapper
#if !defined(__cpp_lib_saturation_arithmetic)
# if (__cplusplus > 202302L)
# define __glibcxx_saturation_arithmetic 202311L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_saturation_arithmetic)
# define __cpp_lib_saturation_arithmetic 202311L
# endif
# endif
#endif /* !defined(__cpp_lib_saturation_arithmetic) */
#undef __glibcxx_want_saturation_arithmetic
#if !defined(__cpp_lib_span_initializer_list)
# if (__cplusplus > 202302L)
# define __glibcxx_span_initializer_list 202311L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_span_initializer_list)
# define __cpp_lib_span_initializer_list 202311L
# endif
# endif
#endif /* !defined(__cpp_lib_span_initializer_list) */
#undef __glibcxx_want_span_initializer_list
#if !defined(__cpp_lib_text_encoding)
# if (__cplusplus > 202302L) && _GLIBCXX_HOSTED && (_GLIBCXX_USE_NL_LANGINFO_L)
# define __glibcxx_text_encoding 202306L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_text_encoding)
# define __cpp_lib_text_encoding 202306L
# endif
# endif
#endif /* !defined(__cpp_lib_text_encoding) */
#undef __glibcxx_want_text_encoding
#if !defined(__cpp_lib_ranges_to_input)
# if (__cplusplus > 202302L)
# define __glibcxx_ranges_to_input 202502L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_to_input)
# define __cpp_lib_ranges_to_input 202502L
# endif
# endif
#endif /* !defined(__cpp_lib_ranges_to_input) */
#undef __glibcxx_want_ranges_to_input
#if !defined(__cpp_lib_to_string)
# if (__cplusplus > 202302L) && _GLIBCXX_HOSTED && (__glibcxx_to_chars)
# define __glibcxx_to_string 202306L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_to_string)
# define __cpp_lib_to_string 202306L
# endif
# endif
#endif /* !defined(__cpp_lib_to_string) */
#undef __glibcxx_want_to_string
#if !defined(__cpp_lib_modules)
# if (__cplusplus >= 202002L) && (__cpp_modules)
# define __glibcxx_modules 202207L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_modules)
# define __cpp_lib_modules 202207L
# endif
# endif
#endif /* !defined(__cpp_lib_modules) */
#undef __glibcxx_want_modules
#if !defined(__cpp_lib_inplace_vector)
# if (__cplusplus > 202302L)
# define __glibcxx_inplace_vector 202406L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_inplace_vector)
# define __cpp_lib_inplace_vector 202406L
# endif
# endif
#endif /* !defined(__cpp_lib_inplace_vector) */
#undef __glibcxx_want_inplace_vector
#if !defined(__cpp_lib_indirect)
# if (__cplusplus > 202302L) && _GLIBCXX_HOSTED
# define __glibcxx_indirect 202502L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_indirect)
# define __cpp_lib_indirect 202502L
# endif
# endif
#endif /* !defined(__cpp_lib_indirect) */
#undef __glibcxx_want_indirect
#if !defined(__cpp_lib_polymorphic)
# if (__cplusplus > 202302L) && _GLIBCXX_HOSTED
# define __glibcxx_polymorphic 202502L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_polymorphic)
# define __cpp_lib_polymorphic 202502L
# endif
# endif
#endif /* !defined(__cpp_lib_polymorphic) */
#undef __glibcxx_want_polymorphic
#if !defined(__cpp_lib_smart_ptr_owner_equality)
# if (__cplusplus > 202302L) && _GLIBCXX_HOSTED
# define __glibcxx_smart_ptr_owner_equality 202306L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_smart_ptr_owner_equality)
# define __cpp_lib_smart_ptr_owner_equality 202306L
# endif
# endif
#endif /* !defined(__cpp_lib_smart_ptr_owner_equality) */
#undef __glibcxx_want_smart_ptr_owner_equality
#if !defined(__cpp_lib_sstream_from_string_view)
# if (__cplusplus > 202302L) && _GLIBCXX_HOSTED
# define __glibcxx_sstream_from_string_view 202306L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_sstream_from_string_view)
# define __cpp_lib_sstream_from_string_view 202306L
# endif
# endif
#endif /* !defined(__cpp_lib_sstream_from_string_view) */
#undef __glibcxx_want_sstream_from_string_view
#if !defined(__cpp_lib_type_order)
# if (__cplusplus > 202302L) && (__has_builtin(__builtin_type_order) && __cpp_lib_three_way_comparison >= 201907L)
# define __glibcxx_type_order 202506L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_type_order)
# define __cpp_lib_type_order 202506L
# endif
# endif
#endif /* !defined(__cpp_lib_type_order) */
#undef __glibcxx_want_type_order
#if !defined(__cpp_lib_exception_ptr_cast)
# if (__cplusplus > 202302L)
# define __glibcxx_exception_ptr_cast 202506L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_exception_ptr_cast)
# define __cpp_lib_exception_ptr_cast 202506L
# endif
# endif
#endif /* !defined(__cpp_lib_exception_ptr_cast) */
#undef __glibcxx_want_exception_ptr_cast
#if !defined(__cpp_lib_bitset)
# if (__cplusplus > 202302L)
# define __glibcxx_bitset 202306L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_bitset)
# define __cpp_lib_bitset 202306L
# endif
# endif
#endif /* !defined(__cpp_lib_bitset) */
#undef __glibcxx_want_bitset
#if !defined(__cpp_lib_constexpr_exceptions)
# if (__cplusplus > 202302L) && (__cpp_constexpr_exceptions >= 202411L)
# define __glibcxx_constexpr_exceptions 1L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_exceptions)
# endif
# endif
#endif /* !defined(__cpp_lib_constexpr_exceptions) */
#undef __glibcxx_want_constexpr_exceptions
#if !defined(__cpp_lib_philox_engine)
# if (__cplusplus > 202302L) && (__SIZEOF_INT128__)
# define __glibcxx_philox_engine 202406L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_philox_engine)
# define __cpp_lib_philox_engine 202406L
# endif
# endif
#endif /* !defined(__cpp_lib_philox_engine) */
#undef __glibcxx_want_philox_engine
#undef __glibcxx_want_all