From 838c50f9c835067dca035923bba7d4e83209207d Mon Sep 17 00:00:00 2001 From: Peng Liu Date: Fri, 28 Feb 2025 17:23:27 -0500 Subject: [PATCH 1/7] Make forward_list constexpr as part of P3372R3 --- libcxx/docs/FeatureTestMacroTable.rst | 4 + libcxx/include/__memory/allocation_guard.h | 20 +- libcxx/include/forward_list | 470 +- libcxx/include/version | 2 + .../forwardlist/compare.three_way.pass.cpp | 7 +- .../sequences/forwardlist/empty.pass.cpp | 13 +- .../forwardlist.access/front.pass.cpp | 16 +- .../forwardlist.cons/alloc.compile.fail.cpp | 13 +- .../forwardlist.cons/alloc.pass.cpp | 13 +- .../forwardlist.cons/assign_copy.pass.cpp | 13 +- .../forwardlist.cons/assign_init.pass.cpp | 13 +- .../forwardlist.cons/assign_move.pass.cpp | 13 +- .../forwardlist.cons/assign_op_init.pass.cpp | 13 +- .../forwardlist.cons/assign_range.pass.cpp | 13 +- .../assign_size_value.pass.cpp | 13 +- .../forwardlist.cons/copy.pass.cpp | 13 +- .../forwardlist.cons/copy_alloc.pass.cpp | 13 +- .../forwardlist.cons/default.pass.cpp | 13 +- .../forwardlist.cons/from_range.pass.cpp | 19 +- .../forwardlist.cons/init.pass.cpp | 13 +- .../forwardlist.cons/init_alloc.pass.cpp | 13 +- .../forwardlist.cons/move.pass.cpp | 13 +- .../forwardlist.cons/move_alloc.pass.cpp | 13 +- .../forwardlist.cons/range.pass.cpp | 13 +- .../forwardlist.cons/range_alloc.pass.cpp | 13 +- .../forwardlist.cons/size.pass.cpp | 4 +- .../forwardlist.cons/size_value.pass.cpp | 13 +- .../size_value_alloc.pass.cpp | 13 +- .../forwardlist.erasure/erase.pass.cpp | 18 +- .../forwardlist.erasure/erase_if.pass.cpp | 18 +- .../forwardlist.iter/before_begin.pass.cpp | 17 +- .../forwardlist.iter/iterators.pass.cpp | 27 +- .../assign_range.pass.cpp | 19 +- .../forwardlist.modifiers/clear.pass.cpp | 13 +- .../emplace_after.pass.cpp | 13 +- .../emplace_front.pass.cpp | 13 +- .../erase_after_many.pass.cpp | 13 +- .../erase_after_one.pass.cpp | 13 +- .../insert_after_const.pass.cpp | 13 +- .../insert_after_init.pass.cpp | 13 +- .../insert_after_range.pass.cpp | 13 +- .../insert_after_rv.pass.cpp | 13 +- .../insert_after_size_value.pass.cpp | 13 +- .../insert_range_after.pass.cpp | 23 +- .../forwardlist.modifiers/pop_front.pass.cpp | 13 +- .../prepend_range.pass.cpp | 19 +- .../push_front_const.pass.cpp | 13 +- .../push_front_exception_safety.pass.cpp | 2 +- .../push_front_rv.pass.cpp | 13 +- .../resize_size.pass.cpp | 17 +- .../resize_size_value.pass.cpp | 15 +- .../forwardlist.ops/merge_lvalue.pass.cpp | 17 +- .../merge_lvalue_pred.pass.cpp | 17 +- .../forwardlist.ops/merge_rvalue.pass.cpp | 17 +- .../merge_rvalue_pred.pass.cpp | 17 +- .../forwardlist.ops/remove.pass.cpp | 27 +- .../forwardlist.ops/remove_if.pass.cpp | 25 +- .../forwardlist.ops/reverse.pass.cpp | 19 +- .../splice_after_flist.pass.cpp | 23 +- .../forwardlist.ops/splice_after_one.pass.cpp | 25 +- .../splice_after_range.pass.cpp | 27 +- .../forwardlist.ops/unique.pass.cpp | 15 +- .../forwardlist.ops/unique_pred.pass.cpp | 25 +- .../forwardlist.spec/equal.pass.cpp | 17 +- .../forwardlist.spec/member_swap.pass.cpp | 13 +- .../forwardlist.spec/non_member_swap.pass.cpp | 13 +- .../forwardlist.spec/relational.pass.cpp | 21 +- .../forwardlist.spec/swap_noexcept.pass.cpp | 4 +- .../forwardlist/get_allocator.pass.cpp | 13 +- .../sequences/forwardlist/incomplete.pass.cpp | 17 +- .../sequences/forwardlist/max_size.pass.cpp | 13 +- .../version.version.compile.pass.cpp | 6650 +++++++++++++++++ libcxx/test/support/counting_predicates.h | 54 +- .../generate_feature_test_macro_components.py | 5 + 74 files changed, 7776 insertions(+), 444 deletions(-) mode change 100755 => 100644 libcxx/utils/generate_feature_test_macro_components.py diff --git a/libcxx/docs/FeatureTestMacroTable.rst b/libcxx/docs/FeatureTestMacroTable.rst index a89d4038785cd..aac4ee22989a1 100644 --- a/libcxx/docs/FeatureTestMacroTable.rst +++ b/libcxx/docs/FeatureTestMacroTable.rst @@ -418,7 +418,11 @@ Status ---------------------------------------------------------- ----------------- ``__cpp_lib_bitset`` ``202306L`` ---------------------------------------------------------- ----------------- +<<<<<<< HEAD ``__cpp_lib_constexpr_algorithms`` ``202306L`` +======= + ``__cpp_lib_constexpr_forward_list`` ``202502L`` +>>>>>>> 3e1b3b8f0316 (Make forward_list constexpr as part of P3372R3) ---------------------------------------------------------- ----------------- ``__cpp_lib_constexpr_new`` ``202406L`` ---------------------------------------------------------- ----------------- diff --git a/libcxx/include/__memory/allocation_guard.h b/libcxx/include/__memory/allocation_guard.h index 66edcd92ed618..2fc485f4ed0ed 100644 --- a/libcxx/include/__memory/allocation_guard.h +++ b/libcxx/include/__memory/allocation_guard.h @@ -49,24 +49,26 @@ struct __allocation_guard { using _Size _LIBCPP_NODEBUG = typename allocator_traits<_Alloc>::size_type; template // we perform the allocator conversion inside the constructor - _LIBCPP_HIDE_FROM_ABI explicit __allocation_guard(_AllocT __alloc, _Size __n) + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI explicit __allocation_guard(_AllocT __alloc, _Size __n) : __alloc_(std::move(__alloc)), __n_(__n), __ptr_(allocator_traits<_Alloc>::allocate(__alloc_, __n_)) // initialization order is important {} - _LIBCPP_HIDE_FROM_ABI ~__allocation_guard() _NOEXCEPT { __destroy(); } + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI ~__allocation_guard() _NOEXCEPT { __destroy(); } - _LIBCPP_HIDE_FROM_ABI __allocation_guard(const __allocation_guard&) = delete; - _LIBCPP_HIDE_FROM_ABI __allocation_guard(__allocation_guard&& __other) _NOEXCEPT + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI __allocation_guard(const __allocation_guard&) = delete; + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI __allocation_guard(__allocation_guard&& __other) _NOEXCEPT : __alloc_(std::move(__other.__alloc_)), __n_(__other.__n_), __ptr_(__other.__ptr_) { __other.__ptr_ = nullptr; } - _LIBCPP_HIDE_FROM_ABI __allocation_guard& operator=(const __allocation_guard& __other) = delete; - _LIBCPP_HIDE_FROM_ABI __allocation_guard& operator=(__allocation_guard&& __other) _NOEXCEPT { + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI __allocation_guard& + operator=(const __allocation_guard& __other) = delete; + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI __allocation_guard& + operator=(__allocation_guard&& __other) _NOEXCEPT { if (std::addressof(__other) != this) { __destroy(); @@ -79,17 +81,17 @@ struct __allocation_guard { return *this; } - _LIBCPP_HIDE_FROM_ABI _Pointer + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI _Pointer __release_ptr() _NOEXCEPT { // not called __release() because it's a keyword in objective-c++ _Pointer __tmp = __ptr_; __ptr_ = nullptr; return __tmp; } - _LIBCPP_HIDE_FROM_ABI _Pointer __get() const _NOEXCEPT { return __ptr_; } + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI _Pointer __get() const _NOEXCEPT { return __ptr_; } private: - _LIBCPP_HIDE_FROM_ABI void __destroy() _NOEXCEPT { + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI void __destroy() _NOEXCEPT { if (__ptr_ != nullptr) { allocator_traits<_Alloc>::deallocate(__alloc_, __ptr_, __n_); } diff --git a/libcxx/include/forward_list b/libcxx/include/forward_list index fc4a9949f37b3..124c195de9aa7 100644 --- a/libcxx/include/forward_list +++ b/libcxx/include/forward_list @@ -295,8 +295,8 @@ struct __forward_node_traits { "the _LIBCPP_ABI_FORWARD_LIST_REMOVE_NODE_POINTER_UB macro to silence this diagnostic."); # endif - _LIBCPP_HIDE_FROM_ABI static __begin_node_pointer __as_iter_node(__node_pointer __p) { - return static_cast<__begin_node_pointer>(static_cast<__void_pointer>(__p)); + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI static __begin_node_pointer __as_iter_node(__node_pointer __p) { + return __p ? pointer_traits<__begin_node_pointer>::pointer_to(*__p) : static_cast<__begin_node_pointer>(nullptr); } }; @@ -307,11 +307,12 @@ struct __forward_begin_node { pointer __next_; - _LIBCPP_HIDE_FROM_ABI __forward_begin_node() : __next_(nullptr) {} - _LIBCPP_HIDE_FROM_ABI explicit __forward_begin_node(pointer __n) : __next_(__n) {} + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI __forward_begin_node() : __next_(nullptr) {} + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI explicit __forward_begin_node(pointer __n) : __next_(__n) {} - _LIBCPP_HIDE_FROM_ABI __begin_node_pointer __next_as_begin() const { - return static_cast<__begin_node_pointer>(__next_); + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI __begin_node_pointer __next_as_begin() const { + return __next_ ? pointer_traits<__begin_node_pointer>::pointer_to(*__next_) + : static_cast<__begin_node_pointer>(nullptr); } }; @@ -335,18 +336,20 @@ private: }; public: - _LIBCPP_HIDE_FROM_ABI _Tp& __get_value() { return __value_; } + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI _Tp& __get_value() { return __value_; } # else private: _ALIGNAS_TYPE(_Tp) char __buffer_[sizeof(_Tp)]; public: - _LIBCPP_HIDE_FROM_ABI _Tp& __get_value() { return *std::__launder(reinterpret_cast<_Tp*>(&__buffer_)); } + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI _Tp& __get_value() { + return *std::__launder(reinterpret_cast<_Tp*>(&__buffer_)); + } # endif - _LIBCPP_HIDE_FROM_ABI explicit __forward_list_node(_NodePtr __next) : _Base(__next) {} - _LIBCPP_HIDE_FROM_ABI ~__forward_list_node() {} + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI explicit __forward_list_node(_NodePtr __next) : _Base(__next) {} + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI ~__forward_list_node() {} }; template > @@ -357,24 +360,27 @@ class __forward_list_const_iterator; template class __forward_list_iterator { typedef __forward_node_traits<_NodePtr> __traits; + typedef typename __traits::__node_type __node_type; typedef typename __traits::__node_pointer __node_pointer; typedef typename __traits::__begin_node_pointer __begin_node_pointer; typedef typename __traits::__void_pointer __void_pointer; __begin_node_pointer __ptr_; - _LIBCPP_HIDE_FROM_ABI __begin_node_pointer __get_begin() const { - return static_cast<__begin_node_pointer>(static_cast<__void_pointer>(__ptr_)); - } - _LIBCPP_HIDE_FROM_ABI __node_pointer __get_unsafe_node_pointer() const { - return static_cast<__node_pointer>(static_cast<__void_pointer>(__ptr_)); + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI __begin_node_pointer __get_begin() const { return __ptr_; } + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI __node_pointer __get_unsafe_node_pointer() const { + return __ptr_ ? pointer_traits<__node_pointer>::pointer_to( + const_cast<__node_type&>(static_cast(*__ptr_))) + : static_cast<__node_pointer>(nullptr); } - _LIBCPP_HIDE_FROM_ABI explicit __forward_list_iterator(nullptr_t) _NOEXCEPT : __ptr_(nullptr) {} + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI explicit __forward_list_iterator(nullptr_t) _NOEXCEPT + : __ptr_(nullptr) {} + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI explicit __forward_list_iterator(__begin_node_pointer __p) _NOEXCEPT : __ptr_(__p) {} - _LIBCPP_HIDE_FROM_ABI explicit __forward_list_iterator(__node_pointer __p) _NOEXCEPT + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI explicit __forward_list_iterator(__node_pointer __p) _NOEXCEPT : __ptr_(__traits::__as_iter_node(__p)) {} template @@ -389,27 +395,31 @@ public: typedef typename pointer_traits<__node_pointer>::difference_type difference_type; typedef __rebind_pointer_t<__node_pointer, value_type> pointer; - _LIBCPP_HIDE_FROM_ABI __forward_list_iterator() _NOEXCEPT : __ptr_(nullptr) {} + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI __forward_list_iterator() _NOEXCEPT : __ptr_(nullptr) {} - _LIBCPP_HIDE_FROM_ABI reference operator*() const { return __get_unsafe_node_pointer()->__get_value(); } - _LIBCPP_HIDE_FROM_ABI pointer operator->() const { + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI reference operator*() const { + return __get_unsafe_node_pointer()->__get_value(); + } + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI pointer operator->() const { return pointer_traits::pointer_to(__get_unsafe_node_pointer()->__get_value()); } - _LIBCPP_HIDE_FROM_ABI __forward_list_iterator& operator++() { + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI __forward_list_iterator& operator++() { __ptr_ = __traits::__as_iter_node(__ptr_->__next_); return *this; } - _LIBCPP_HIDE_FROM_ABI __forward_list_iterator operator++(int) { + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI __forward_list_iterator operator++(int) { __forward_list_iterator __t(*this); ++(*this); return __t; } - friend _LIBCPP_HIDE_FROM_ABI bool operator==(const __forward_list_iterator& __x, const __forward_list_iterator& __y) { + friend _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI bool + operator==(const __forward_list_iterator& __x, const __forward_list_iterator& __y) { return __x.__ptr_ == __y.__ptr_; } - friend _LIBCPP_HIDE_FROM_ABI bool operator!=(const __forward_list_iterator& __x, const __forward_list_iterator& __y) { + friend _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI bool + operator!=(const __forward_list_iterator& __x, const __forward_list_iterator& __y) { return !(__x == __y); } }; @@ -427,17 +437,20 @@ class __forward_list_const_iterator { __begin_node_pointer __ptr_; - _LIBCPP_HIDE_FROM_ABI __begin_node_pointer __get_begin() const { - return static_cast<__begin_node_pointer>(static_cast<__void_pointer>(__ptr_)); - } - _LIBCPP_HIDE_FROM_ABI __node_pointer __get_unsafe_node_pointer() const { - return static_cast<__node_pointer>(static_cast<__void_pointer>(__ptr_)); + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI __begin_node_pointer __get_begin() const { return __ptr_; } + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI __node_pointer __get_unsafe_node_pointer() const { + return __ptr_ ? pointer_traits<__node_pointer>::pointer_to( + const_cast<__node_type&>(static_cast(*__ptr_))) + : static_cast<__node_pointer>(nullptr); } - _LIBCPP_HIDE_FROM_ABI explicit __forward_list_const_iterator(nullptr_t) _NOEXCEPT : __ptr_(nullptr) {} + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI explicit __forward_list_const_iterator(nullptr_t) _NOEXCEPT + : __ptr_(nullptr) {} + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI explicit __forward_list_const_iterator(__begin_node_pointer __p) _NOEXCEPT : __ptr_(__p) {} + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI explicit __forward_list_const_iterator(__node_pointer __p) _NOEXCEPT : __ptr_(__traits::__as_iter_node(__p)) {} @@ -451,30 +464,32 @@ public: typedef typename pointer_traits<__node_pointer>::difference_type difference_type; typedef __rebind_pointer_t<__node_pointer, const value_type> pointer; - _LIBCPP_HIDE_FROM_ABI __forward_list_const_iterator() _NOEXCEPT : __ptr_(nullptr) {} - _LIBCPP_HIDE_FROM_ABI __forward_list_const_iterator(__forward_list_iterator<__node_pointer> __p) _NOEXCEPT - : __ptr_(__p.__ptr_) {} + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI __forward_list_const_iterator() _NOEXCEPT : __ptr_(nullptr) {} + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI + __forward_list_const_iterator(__forward_list_iterator<__node_pointer> __p) _NOEXCEPT : __ptr_(__p.__ptr_) {} - _LIBCPP_HIDE_FROM_ABI reference operator*() const { return __get_unsafe_node_pointer()->__get_value(); } - _LIBCPP_HIDE_FROM_ABI pointer operator->() const { + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI reference operator*() const { + return __get_unsafe_node_pointer()->__get_value(); + } + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI pointer operator->() const { return pointer_traits::pointer_to(__get_unsafe_node_pointer()->__get_value()); } - _LIBCPP_HIDE_FROM_ABI __forward_list_const_iterator& operator++() { + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI __forward_list_const_iterator& operator++() { __ptr_ = __traits::__as_iter_node(__ptr_->__next_); return *this; } - _LIBCPP_HIDE_FROM_ABI __forward_list_const_iterator operator++(int) { + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI __forward_list_const_iterator operator++(int) { __forward_list_const_iterator __t(*this); ++(*this); return __t; } - friend _LIBCPP_HIDE_FROM_ABI bool + friend _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI bool operator==(const __forward_list_const_iterator& __x, const __forward_list_const_iterator& __y) { return __x.__ptr_ == __y.__ptr_; } - friend _LIBCPP_HIDE_FROM_ABI bool + friend _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI bool operator!=(const __forward_list_const_iterator& __x, const __forward_list_const_iterator& __y) { return !(__x == __y); } @@ -498,48 +513,51 @@ protected: _LIBCPP_COMPRESSED_PAIR(__begin_node, __before_begin_, __node_allocator, __alloc_); - _LIBCPP_HIDE_FROM_ABI __begin_node_pointer __before_begin() _NOEXCEPT { + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI __begin_node_pointer __before_begin() _NOEXCEPT { return pointer_traits<__begin_node_pointer>::pointer_to(__before_begin_); } - _LIBCPP_HIDE_FROM_ABI __begin_node_pointer __before_begin() const _NOEXCEPT { + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI __begin_node_pointer __before_begin() const _NOEXCEPT { return pointer_traits<__begin_node_pointer>::pointer_to(const_cast<__begin_node&>(__before_begin_)); } typedef __forward_list_iterator<__node_pointer> iterator; typedef __forward_list_const_iterator<__node_pointer> const_iterator; - _LIBCPP_HIDE_FROM_ABI __forward_list_base() _NOEXCEPT_(is_nothrow_default_constructible<__node_allocator>::value) + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI __forward_list_base() + _NOEXCEPT_(is_nothrow_default_constructible<__node_allocator>::value) : __before_begin_(__begin_node()) {} - _LIBCPP_HIDE_FROM_ABI explicit __forward_list_base(const allocator_type& __a) + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI explicit __forward_list_base(const allocator_type& __a) : __before_begin_(__begin_node()), __alloc_(__node_allocator(__a)) {} - _LIBCPP_HIDE_FROM_ABI explicit __forward_list_base(const __node_allocator& __a) + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI explicit __forward_list_base(const __node_allocator& __a) : __before_begin_(__begin_node()), __alloc_(__a) {} public: # ifndef _LIBCPP_CXX03_LANG - _LIBCPP_HIDE_FROM_ABI + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI __forward_list_base(__forward_list_base&& __x) noexcept(is_nothrow_move_constructible<__node_allocator>::value); - _LIBCPP_HIDE_FROM_ABI __forward_list_base(__forward_list_base&& __x, const allocator_type& __a); + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI + __forward_list_base(__forward_list_base&& __x, const allocator_type& __a); # endif // _LIBCPP_CXX03_LANG __forward_list_base(const __forward_list_base&) = delete; __forward_list_base& operator=(const __forward_list_base&) = delete; - _LIBCPP_HIDE_FROM_ABI ~__forward_list_base(); + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI ~__forward_list_base(); protected: - _LIBCPP_HIDE_FROM_ABI void __copy_assign_alloc(const __forward_list_base& __x) { + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI void __copy_assign_alloc(const __forward_list_base& __x) { __copy_assign_alloc(__x, integral_constant()); } - _LIBCPP_HIDE_FROM_ABI void __move_assign_alloc(__forward_list_base& __x) + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI void __move_assign_alloc(__forward_list_base& __x) _NOEXCEPT_(!__node_traits::propagate_on_container_move_assignment::value || is_nothrow_move_assignable<__node_allocator>::value) { __move_assign_alloc(__x, integral_constant()); } template - _LIBCPP_HIDE_FROM_ABI __node_pointer __create_node(__node_pointer __next, _Args&&... __args) { + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI __node_pointer + __create_node(__node_pointer __next, _Args&&... __args) { __allocation_guard<__node_allocator> __guard(__alloc_, 1); // Begin the lifetime of the node itself. Note that this doesn't begin the lifetime of the value // held inside the node, since we need to use the allocator's construct() method for that. @@ -554,7 +572,7 @@ protected: return __guard.__release_ptr(); } - _LIBCPP_HIDE_FROM_ABI void __delete_node(__node_pointer __node) { + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI void __delete_node(__node_pointer __node) { // For the same reason as above, we use the allocator's destroy() method for the value_type, // but not for the node itself. __node_traits::destroy(__alloc_, std::addressof(__node->__get_value())); @@ -563,7 +581,7 @@ protected: } public: - _LIBCPP_HIDE_FROM_ABI void swap(__forward_list_base& __x) + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI void swap(__forward_list_base& __x) # if _LIBCPP_STD_VER >= 14 _NOEXCEPT; # else @@ -571,18 +589,21 @@ public: # endif protected: - _LIBCPP_HIDE_FROM_ABI void clear() _NOEXCEPT; + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI void clear() _NOEXCEPT; private: - _LIBCPP_HIDE_FROM_ABI void __copy_assign_alloc(const __forward_list_base&, false_type) {} - _LIBCPP_HIDE_FROM_ABI void __copy_assign_alloc(const __forward_list_base& __x, true_type) { + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI void __copy_assign_alloc(const __forward_list_base&, false_type) { + } + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI void + __copy_assign_alloc(const __forward_list_base& __x, true_type) { if (__alloc_ != __x.__alloc_) clear(); __alloc_ = __x.__alloc_; } - _LIBCPP_HIDE_FROM_ABI void __move_assign_alloc(__forward_list_base&, false_type) _NOEXCEPT {} - _LIBCPP_HIDE_FROM_ABI void __move_assign_alloc(__forward_list_base& __x, true_type) + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI void + __move_assign_alloc(__forward_list_base&, false_type) _NOEXCEPT {} + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI void __move_assign_alloc(__forward_list_base& __x, true_type) _NOEXCEPT_(is_nothrow_move_assignable<__node_allocator>::value) { __alloc_ = std::move(__x.__alloc_); } @@ -591,14 +612,15 @@ private: # ifndef _LIBCPP_CXX03_LANG template -inline __forward_list_base<_Tp, _Alloc>::__forward_list_base(__forward_list_base&& __x) noexcept( - is_nothrow_move_constructible<__node_allocator>::value) +_LIBCPP_CONSTEXPR_SINCE_CXX26 inline __forward_list_base<_Tp, _Alloc>::__forward_list_base( + __forward_list_base&& __x) noexcept(is_nothrow_move_constructible<__node_allocator>::value) : __before_begin_(std::move(__x.__before_begin_)), __alloc_(std::move(__x.__alloc_)) { __x.__before_begin()->__next_ = nullptr; } template -inline __forward_list_base<_Tp, _Alloc>::__forward_list_base(__forward_list_base&& __x, const allocator_type& __a) +_LIBCPP_CONSTEXPR_SINCE_CXX26 inline __forward_list_base<_Tp, _Alloc>::__forward_list_base( + __forward_list_base&& __x, const allocator_type& __a) : __before_begin_(__begin_node()), __alloc_(__node_allocator(__a)) { if (__alloc_ == __x.__alloc_) { __before_begin()->__next_ = __x.__before_begin()->__next_; @@ -609,12 +631,12 @@ inline __forward_list_base<_Tp, _Alloc>::__forward_list_base(__forward_list_base # endif // _LIBCPP_CXX03_LANG template -__forward_list_base<_Tp, _Alloc>::~__forward_list_base() { +_LIBCPP_CONSTEXPR_SINCE_CXX26 __forward_list_base<_Tp, _Alloc>::~__forward_list_base() { clear(); } template -inline void __forward_list_base<_Tp, _Alloc>::swap(__forward_list_base& __x) +_LIBCPP_CONSTEXPR_SINCE_CXX26 inline void __forward_list_base<_Tp, _Alloc>::swap(__forward_list_base& __x) # if _LIBCPP_STD_VER >= 14 _NOEXCEPT # else @@ -627,7 +649,7 @@ inline void __forward_list_base<_Tp, _Alloc>::swap(__forward_list_base& __x) } template -void __forward_list_base<_Tp, _Alloc>::clear() _NOEXCEPT { +_LIBCPP_CONSTEXPR_SINCE_CXX26 void __forward_list_base<_Tp, _Alloc>::clear() _NOEXCEPT { for (__node_pointer __p = __before_begin()->__next_; __p != nullptr;) { __node_pointer __next = __p->__next_; __delete_node(__p); @@ -672,105 +694,123 @@ public: typedef void __remove_return_type; # endif - _LIBCPP_HIDE_FROM_ABI forward_list() _NOEXCEPT_(is_nothrow_default_constructible<__node_allocator>::value) { - } // = default; - _LIBCPP_HIDE_FROM_ABI explicit forward_list(const allocator_type& __a); - _LIBCPP_HIDE_FROM_ABI explicit forward_list(size_type __n); + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI forward_list() + _NOEXCEPT_(is_nothrow_default_constructible<__node_allocator>::value) {} // = default; + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI explicit forward_list(const allocator_type& __a); + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI explicit forward_list(size_type __n); # if _LIBCPP_STD_VER >= 14 - _LIBCPP_HIDE_FROM_ABI explicit forward_list(size_type __n, const allocator_type& __a); + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI explicit forward_list(size_type __n, const allocator_type& __a); # endif - _LIBCPP_HIDE_FROM_ABI forward_list(size_type __n, const value_type& __v); + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI forward_list(size_type __n, const value_type& __v); template <__enable_if_t<__is_allocator<_Alloc>::value, int> = 0> - _LIBCPP_HIDE_FROM_ABI forward_list(size_type __n, const value_type& __v, const allocator_type& __a) : __base(__a) { + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI + forward_list(size_type __n, const value_type& __v, const allocator_type& __a) + : __base(__a) { insert_after(cbefore_begin(), __n, __v); } template ::value, int> = 0> - _LIBCPP_HIDE_FROM_ABI forward_list(_InputIterator __f, _InputIterator __l); + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI forward_list(_InputIterator __f, _InputIterator __l); template ::value, int> = 0> - _LIBCPP_HIDE_FROM_ABI forward_list(_InputIterator __f, _InputIterator __l, const allocator_type& __a); + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI + forward_list(_InputIterator __f, _InputIterator __l, const allocator_type& __a); # if _LIBCPP_STD_VER >= 23 template <_ContainerCompatibleRange<_Tp> _Range> - _LIBCPP_HIDE_FROM_ABI forward_list(from_range_t, _Range&& __range, const allocator_type& __a = allocator_type()) + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI + forward_list(from_range_t, _Range&& __range, const allocator_type& __a = allocator_type()) : __base(__a) { prepend_range(std::forward<_Range>(__range)); } # endif - _LIBCPP_HIDE_FROM_ABI forward_list(const forward_list& __x); - _LIBCPP_HIDE_FROM_ABI forward_list(const forward_list& __x, const __type_identity_t& __a); + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI forward_list(const forward_list& __x); + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI + forward_list(const forward_list& __x, const __type_identity_t& __a); - _LIBCPP_HIDE_FROM_ABI forward_list& operator=(const forward_list& __x); + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI forward_list& operator=(const forward_list& __x); # ifndef _LIBCPP_CXX03_LANG - _LIBCPP_HIDE_FROM_ABI forward_list(forward_list&& __x) noexcept(is_nothrow_move_constructible<__base>::value) + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI + forward_list(forward_list&& __x) noexcept(is_nothrow_move_constructible<__base>::value) : __base(std::move(__x)) {} - _LIBCPP_HIDE_FROM_ABI forward_list(forward_list&& __x, const __type_identity_t& __a); + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI + forward_list(forward_list&& __x, const __type_identity_t& __a); - _LIBCPP_HIDE_FROM_ABI forward_list(initializer_list __il); - _LIBCPP_HIDE_FROM_ABI forward_list(initializer_list __il, const allocator_type& __a); + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI forward_list(initializer_list __il); + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI + forward_list(initializer_list __il, const allocator_type& __a); - _LIBCPP_HIDE_FROM_ABI forward_list& operator=(forward_list&& __x) noexcept( + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI forward_list& operator=(forward_list&& __x) noexcept( (__node_traits::propagate_on_container_move_assignment::value && is_nothrow_move_assignable::value) || allocator_traits::is_always_equal::value); - _LIBCPP_HIDE_FROM_ABI forward_list& operator=(initializer_list __il); + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI forward_list& operator=(initializer_list __il); - _LIBCPP_HIDE_FROM_ABI void assign(initializer_list __il); + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI void assign(initializer_list __il); # endif // _LIBCPP_CXX03_LANG // ~forward_list() = default; template ::value, int> = 0> - void _LIBCPP_HIDE_FROM_ABI assign(_InputIterator __f, _InputIterator __l); + _LIBCPP_CONSTEXPR_SINCE_CXX26 void _LIBCPP_HIDE_FROM_ABI assign(_InputIterator __f, _InputIterator __l); # if _LIBCPP_STD_VER >= 23 template <_ContainerCompatibleRange<_Tp> _Range> - _LIBCPP_HIDE_FROM_ABI void assign_range(_Range&& __range) { + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI void assign_range(_Range&& __range) { __assign_with_sentinel(ranges::begin(__range), ranges::end(__range)); } # endif - _LIBCPP_HIDE_FROM_ABI void assign(size_type __n, const value_type& __v); + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI void assign(size_type __n, const value_type& __v); - _LIBCPP_HIDE_FROM_ABI allocator_type get_allocator() const _NOEXCEPT { return allocator_type(this->__alloc_); } + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI allocator_type get_allocator() const _NOEXCEPT { + return allocator_type(this->__alloc_); + } - _LIBCPP_HIDE_FROM_ABI iterator begin() _NOEXCEPT { return iterator(__base::__before_begin()->__next_); } - _LIBCPP_HIDE_FROM_ABI const_iterator begin() const _NOEXCEPT { + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI iterator begin() _NOEXCEPT { + return iterator(__base::__before_begin()->__next_); + } + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI const_iterator begin() const _NOEXCEPT { return const_iterator(__base::__before_begin()->__next_); } - _LIBCPP_HIDE_FROM_ABI iterator end() _NOEXCEPT { return iterator(nullptr); } - _LIBCPP_HIDE_FROM_ABI const_iterator end() const _NOEXCEPT { return const_iterator(nullptr); } + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI iterator end() _NOEXCEPT { return iterator(nullptr); } + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI const_iterator end() const _NOEXCEPT { + return const_iterator(nullptr); + } - _LIBCPP_HIDE_FROM_ABI const_iterator cbegin() const _NOEXCEPT { + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI const_iterator cbegin() const _NOEXCEPT { return const_iterator(__base::__before_begin()->__next_); } - _LIBCPP_HIDE_FROM_ABI const_iterator cend() const _NOEXCEPT { return const_iterator(nullptr); } + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI const_iterator cend() const _NOEXCEPT { + return const_iterator(nullptr); + } - _LIBCPP_HIDE_FROM_ABI iterator before_begin() _NOEXCEPT { return iterator(__base::__before_begin()); } - _LIBCPP_HIDE_FROM_ABI const_iterator before_begin() const _NOEXCEPT { + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI iterator before_begin() _NOEXCEPT { + return iterator(__base::__before_begin()); + } + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI const_iterator before_begin() const _NOEXCEPT { return const_iterator(__base::__before_begin()); } - _LIBCPP_HIDE_FROM_ABI const_iterator cbefore_begin() const _NOEXCEPT { + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI const_iterator cbefore_begin() const _NOEXCEPT { return const_iterator(__base::__before_begin()); } - [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI bool empty() const _NOEXCEPT { + [[__nodiscard__]] _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI bool empty() const _NOEXCEPT { return __base::__before_begin()->__next_ == nullptr; } - _LIBCPP_HIDE_FROM_ABI size_type max_size() const _NOEXCEPT { + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI size_type max_size() const _NOEXCEPT { return std::min(__node_traits::max_size(this->__alloc_), numeric_limits::max()); } - _LIBCPP_HIDE_FROM_ABI reference front() { + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI reference front() { _LIBCPP_ASSERT_NON_NULL(!empty(), "forward_list::front called on an empty list"); return __base::__before_begin()->__next_->__get_value(); } - _LIBCPP_HIDE_FROM_ABI const_reference front() const { + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI const_reference front() const { _LIBCPP_ASSERT_NON_NULL(!empty(), "forward_list::front called on an empty list"); return __base::__before_begin()->__next_->__get_value(); } @@ -778,54 +818,58 @@ public: # ifndef _LIBCPP_CXX03_LANG # if _LIBCPP_STD_VER >= 17 template - _LIBCPP_HIDE_FROM_ABI reference emplace_front(_Args&&... __args); + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI reference emplace_front(_Args&&... __args); # else template - _LIBCPP_HIDE_FROM_ABI void emplace_front(_Args&&... __args); + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI void emplace_front(_Args&&... __args); # endif - _LIBCPP_HIDE_FROM_ABI void push_front(value_type&& __v); + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI void push_front(value_type&& __v); # endif // _LIBCPP_CXX03_LANG - _LIBCPP_HIDE_FROM_ABI void push_front(const value_type& __v); + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI void push_front(const value_type& __v); # if _LIBCPP_STD_VER >= 23 template <_ContainerCompatibleRange<_Tp> _Range> - _LIBCPP_HIDE_FROM_ABI void prepend_range(_Range&& __range) { + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI void prepend_range(_Range&& __range) { insert_range_after(cbefore_begin(), std::forward<_Range>(__range)); } # endif - _LIBCPP_HIDE_FROM_ABI void pop_front(); + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI void pop_front(); # ifndef _LIBCPP_CXX03_LANG template - _LIBCPP_HIDE_FROM_ABI iterator emplace_after(const_iterator __p, _Args&&... __args); + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI iterator emplace_after(const_iterator __p, _Args&&... __args); - _LIBCPP_HIDE_FROM_ABI iterator insert_after(const_iterator __p, value_type&& __v); - _LIBCPP_HIDE_FROM_ABI iterator insert_after(const_iterator __p, initializer_list __il) { + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI iterator insert_after(const_iterator __p, value_type&& __v); + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI iterator + insert_after(const_iterator __p, initializer_list __il) { return insert_after(__p, __il.begin(), __il.end()); } # endif // _LIBCPP_CXX03_LANG - _LIBCPP_HIDE_FROM_ABI iterator insert_after(const_iterator __p, const value_type& __v); - _LIBCPP_HIDE_FROM_ABI iterator insert_after(const_iterator __p, size_type __n, const value_type& __v) { + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI iterator insert_after(const_iterator __p, const value_type& __v); + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI iterator insert_after(const_iterator __p, size_type __n, const value_type& __v) { return __insert_after(__p, __n, __v); } template ::value, int> = 0> - _LIBCPP_HIDE_FROM_ABI iterator insert_after(const_iterator __p, _InputIterator __f, _InputIterator __l); + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI iterator + insert_after(const_iterator __p, _InputIterator __f, _InputIterator __l); # if _LIBCPP_STD_VER >= 23 template <_ContainerCompatibleRange<_Tp> _Range> - _LIBCPP_HIDE_FROM_ABI iterator insert_range_after(const_iterator __position, _Range&& __range) { + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI iterator + insert_range_after(const_iterator __position, _Range&& __range) { return __insert_after_with_sentinel(__position, ranges::begin(__range), ranges::end(__range)); } # endif template - _LIBCPP_HIDE_FROM_ABI iterator __insert_after_with_sentinel(const_iterator __p, _InputIterator __f, _Sentinel __l); + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI iterator + __insert_after_with_sentinel(const_iterator __p, _InputIterator __f, _Sentinel __l); - _LIBCPP_HIDE_FROM_ABI iterator erase_after(const_iterator __p); - _LIBCPP_HIDE_FROM_ABI iterator erase_after(const_iterator __f, const_iterator __l); + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI iterator erase_after(const_iterator __p); + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI iterator erase_after(const_iterator __f, const_iterator __l); - _LIBCPP_HIDE_FROM_ABI void swap(forward_list& __x) + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI void swap(forward_list& __x) # if _LIBCPP_STD_VER >= 14 _NOEXCEPT # else @@ -835,58 +879,62 @@ public: __base::swap(__x); } - _LIBCPP_HIDE_FROM_ABI void resize(size_type __n); - _LIBCPP_HIDE_FROM_ABI void resize(size_type __n, const value_type& __v); - _LIBCPP_HIDE_FROM_ABI void clear() _NOEXCEPT { __base::clear(); } + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI void resize(size_type __n); + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI void resize(size_type __n, const value_type& __v); + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI void clear() _NOEXCEPT { __base::clear(); } - _LIBCPP_HIDE_FROM_ABI void splice_after(const_iterator __p, forward_list&& __x); - _LIBCPP_HIDE_FROM_ABI void splice_after(const_iterator __p, forward_list&& __x, const_iterator __i); - _LIBCPP_HIDE_FROM_ABI void + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI void splice_after(const_iterator __p, forward_list&& __x); + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI void + splice_after(const_iterator __p, forward_list&& __x, const_iterator __i); + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI void splice_after(const_iterator __p, forward_list&& __x, const_iterator __f, const_iterator __l); - _LIBCPP_HIDE_FROM_ABI void splice_after(const_iterator __p, forward_list& __x); - _LIBCPP_HIDE_FROM_ABI void splice_after(const_iterator __p, forward_list& __x, const_iterator __i); - _LIBCPP_HIDE_FROM_ABI void + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI void splice_after(const_iterator __p, forward_list& __x); + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI void + splice_after(const_iterator __p, forward_list& __x, const_iterator __i); + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI void splice_after(const_iterator __p, forward_list& __x, const_iterator __f, const_iterator __l); - _LIBCPP_HIDE_FROM_ABI __remove_return_type remove(const value_type& __v); + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI __remove_return_type remove(const value_type& __v); template - _LIBCPP_HIDE_FROM_ABI __remove_return_type remove_if(_Predicate __pred); - _LIBCPP_HIDE_FROM_ABI __remove_return_type unique() { return unique(__equal_to()); } + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI __remove_return_type remove_if(_Predicate __pred); + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI __remove_return_type unique() { return unique(__equal_to()); } template - _LIBCPP_HIDE_FROM_ABI __remove_return_type unique(_BinaryPredicate __binary_pred); + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI __remove_return_type unique(_BinaryPredicate __binary_pred); # ifndef _LIBCPP_CXX03_LANG - _LIBCPP_HIDE_FROM_ABI void merge(forward_list&& __x) { merge(__x, __less<>()); } + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI void merge(forward_list&& __x) { merge(__x, __less<>()); } template - _LIBCPP_HIDE_FROM_ABI void merge(forward_list&& __x, _Compare __comp) { + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI void merge(forward_list&& __x, _Compare __comp) { merge(__x, std::move(__comp)); } # endif // _LIBCPP_CXX03_LANG - _LIBCPP_HIDE_FROM_ABI void merge(forward_list& __x) { merge(__x, __less<>()); } + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI void merge(forward_list& __x) { merge(__x, __less<>()); } template - _LIBCPP_HIDE_FROM_ABI void merge(forward_list& __x, _Compare __comp); - _LIBCPP_HIDE_FROM_ABI void sort() { sort(__less<>()); } + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI void merge(forward_list& __x, _Compare __comp); + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI void sort() { sort(__less<>()); } template - _LIBCPP_HIDE_FROM_ABI void sort(_Compare __comp); - _LIBCPP_HIDE_FROM_ABI void reverse() _NOEXCEPT; + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI void sort(_Compare __comp); + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI void reverse() _NOEXCEPT; private: # ifndef _LIBCPP_CXX03_LANG - _LIBCPP_HIDE_FROM_ABI void __move_assign(forward_list& __x, true_type) + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI void __move_assign(forward_list& __x, true_type) _NOEXCEPT_(is_nothrow_move_assignable::value); - _LIBCPP_HIDE_FROM_ABI void __move_assign(forward_list& __x, false_type); + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI void __move_assign(forward_list& __x, false_type); # endif // _LIBCPP_CXX03_LANG template - _LIBCPP_HIDE_FROM_ABI void __assign_with_sentinel(_Iter __f, _Sent __l); + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI void __assign_with_sentinel(_Iter __f, _Sent __l); template _LIBCPP_HIDE_FROM_ABI iterator __insert_after(const_iterator __p, size_type __n, _Args&&... __args); template - static _LIBCPP_HIDE_FROM_ABI __node_pointer __merge(__node_pointer __f1, __node_pointer __f2, _Compare& __comp); + _LIBCPP_CONSTEXPR_SINCE_CXX26 static _LIBCPP_HIDE_FROM_ABI __node_pointer + __merge(__node_pointer __f1, __node_pointer __f2, _Compare& __comp); // TODO: Make this _LIBCPP_HIDE_FROM_ABI template - static _LIBCPP_HIDDEN __node_pointer __sort(__node_pointer __f, difference_type __sz, _Compare& __comp); + _LIBCPP_CONSTEXPR_SINCE_CXX26 static _LIBCPP_HIDDEN __node_pointer + __sort(__node_pointer __f, difference_type __sz, _Compare& __comp); }; # if _LIBCPP_STD_VER >= 17 @@ -911,10 +959,10 @@ forward_list(from_range_t, _Range&&, _Alloc = _Alloc()) -> forward_list -inline forward_list<_Tp, _Alloc>::forward_list(const allocator_type& __a) : __base(__a) {} +_LIBCPP_CONSTEXPR_SINCE_CXX26 inline forward_list<_Tp, _Alloc>::forward_list(const allocator_type& __a) : __base(__a) {} template -forward_list<_Tp, _Alloc>::forward_list(size_type __n) { +_LIBCPP_CONSTEXPR_SINCE_CXX26 forward_list<_Tp, _Alloc>::forward_list(size_type __n) { if (__n > 0) { for (__begin_node_pointer __p = __base::__before_begin(); __n > 0; --__n, __p = __p->__next_as_begin()) { __p->__next_ = this->__create_node(/* next = */ nullptr); @@ -924,7 +972,8 @@ forward_list<_Tp, _Alloc>::forward_list(size_type __n) { # if _LIBCPP_STD_VER >= 14 template -forward_list<_Tp, _Alloc>::forward_list(size_type __n, const allocator_type& __base_alloc) : __base(__base_alloc) { +_LIBCPP_CONSTEXPR_SINCE_CXX26 forward_list<_Tp, _Alloc>::forward_list(size_type __n, const allocator_type& __base_alloc) + : __base(__base_alloc) { if (__n > 0) { for (__begin_node_pointer __p = __base::__before_begin(); __n > 0; --__n, __p = __p->__next_as_begin()) { __p->__next_ = this->__create_node(/* next = */ nullptr); @@ -934,37 +983,39 @@ forward_list<_Tp, _Alloc>::forward_list(size_type __n, const allocator_type& __b # endif template -forward_list<_Tp, _Alloc>::forward_list(size_type __n, const value_type& __v) { +_LIBCPP_CONSTEXPR_SINCE_CXX26 forward_list<_Tp, _Alloc>::forward_list(size_type __n, const value_type& __v) { insert_after(cbefore_begin(), __n, __v); } template template ::value, int> > -forward_list<_Tp, _Alloc>::forward_list(_InputIterator __f, _InputIterator __l) { +_LIBCPP_CONSTEXPR_SINCE_CXX26 forward_list<_Tp, _Alloc>::forward_list(_InputIterator __f, _InputIterator __l) { insert_after(cbefore_begin(), __f, __l); } template template ::value, int> > +_LIBCPP_CONSTEXPR_SINCE_CXX26 forward_list<_Tp, _Alloc>::forward_list(_InputIterator __f, _InputIterator __l, const allocator_type& __a) : __base(__a) { insert_after(cbefore_begin(), __f, __l); } template -forward_list<_Tp, _Alloc>::forward_list(const forward_list& __x) +_LIBCPP_CONSTEXPR_SINCE_CXX26 forward_list<_Tp, _Alloc>::forward_list(const forward_list& __x) : __base(__node_traits::select_on_container_copy_construction(__x.__alloc_)) { insert_after(cbefore_begin(), __x.begin(), __x.end()); } template +_LIBCPP_CONSTEXPR_SINCE_CXX26 forward_list<_Tp, _Alloc>::forward_list(const forward_list& __x, const __type_identity_t& __a) : __base(__a) { insert_after(cbefore_begin(), __x.begin(), __x.end()); } template -forward_list<_Tp, _Alloc>& forward_list<_Tp, _Alloc>::operator=(const forward_list& __x) { +_LIBCPP_CONSTEXPR_SINCE_CXX26 forward_list<_Tp, _Alloc>& forward_list<_Tp, _Alloc>::operator=(const forward_list& __x) { if (this != std::addressof(__x)) { __base::__copy_assign_alloc(__x); assign(__x.begin(), __x.end()); @@ -974,6 +1025,7 @@ forward_list<_Tp, _Alloc>& forward_list<_Tp, _Alloc>::operator=(const forward_li # ifndef _LIBCPP_CXX03_LANG template +_LIBCPP_CONSTEXPR_SINCE_CXX26 forward_list<_Tp, _Alloc>::forward_list(forward_list&& __x, const __type_identity_t& __a) : __base(std::move(__x), __a) { if (this->__alloc_ != __x.__alloc_) { @@ -983,17 +1035,19 @@ forward_list<_Tp, _Alloc>::forward_list(forward_list&& __x, const __type_identit } template -forward_list<_Tp, _Alloc>::forward_list(initializer_list __il) { +_LIBCPP_CONSTEXPR_SINCE_CXX26 forward_list<_Tp, _Alloc>::forward_list(initializer_list __il) { insert_after(cbefore_begin(), __il.begin(), __il.end()); } template -forward_list<_Tp, _Alloc>::forward_list(initializer_list __il, const allocator_type& __a) : __base(__a) { +_LIBCPP_CONSTEXPR_SINCE_CXX26 +forward_list<_Tp, _Alloc>::forward_list(initializer_list __il, const allocator_type& __a) + : __base(__a) { insert_after(cbefore_begin(), __il.begin(), __il.end()); } template -void forward_list<_Tp, _Alloc>::__move_assign(forward_list& __x, true_type) +_LIBCPP_CONSTEXPR_SINCE_CXX26 void forward_list<_Tp, _Alloc>::__move_assign(forward_list& __x, true_type) _NOEXCEPT_(is_nothrow_move_assignable::value) { clear(); __base::__move_assign_alloc(__x); @@ -1002,7 +1056,7 @@ void forward_list<_Tp, _Alloc>::__move_assign(forward_list& __x, true_type) } template -void forward_list<_Tp, _Alloc>::__move_assign(forward_list& __x, false_type) { +_LIBCPP_CONSTEXPR_SINCE_CXX26 void forward_list<_Tp, _Alloc>::__move_assign(forward_list& __x, false_type) { if (this->__alloc_ == __x.__alloc_) __move_assign(__x, true_type()); else { @@ -1012,7 +1066,8 @@ void forward_list<_Tp, _Alloc>::__move_assign(forward_list& __x, false_type) { } template -inline forward_list<_Tp, _Alloc>& forward_list<_Tp, _Alloc>::operator=(forward_list&& __x) noexcept( +_LIBCPP_CONSTEXPR_SINCE_CXX26 inline forward_list<_Tp, _Alloc>& +forward_list<_Tp, _Alloc>::operator=(forward_list&& __x) noexcept( (__node_traits::propagate_on_container_move_assignment::value && is_nothrow_move_assignable::value) || allocator_traits::is_always_equal::value) { @@ -1021,7 +1076,8 @@ inline forward_list<_Tp, _Alloc>& forward_list<_Tp, _Alloc>::operator=(forward_l } template -inline forward_list<_Tp, _Alloc>& forward_list<_Tp, _Alloc>::operator=(initializer_list __il) { +_LIBCPP_CONSTEXPR_SINCE_CXX26 inline forward_list<_Tp, _Alloc>& +forward_list<_Tp, _Alloc>::operator=(initializer_list __il) { assign(__il.begin(), __il.end()); return *this; } @@ -1030,13 +1086,14 @@ inline forward_list<_Tp, _Alloc>& forward_list<_Tp, _Alloc>::operator=(initializ template template ::value, int> > -void forward_list<_Tp, _Alloc>::assign(_InputIterator __f, _InputIterator __l) { +_LIBCPP_CONSTEXPR_SINCE_CXX26 void forward_list<_Tp, _Alloc>::assign(_InputIterator __f, _InputIterator __l) { __assign_with_sentinel(__f, __l); } template template -_LIBCPP_HIDE_FROM_ABI void forward_list<_Tp, _Alloc>::__assign_with_sentinel(_Iter __f, _Sent __l) { +_LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI void +forward_list<_Tp, _Alloc>::__assign_with_sentinel(_Iter __f, _Sent __l) { iterator __i = before_begin(); iterator __j = std::next(__i); iterator __e = end(); @@ -1049,7 +1106,7 @@ _LIBCPP_HIDE_FROM_ABI void forward_list<_Tp, _Alloc>::__assign_with_sentinel(_It } template -void forward_list<_Tp, _Alloc>::assign(size_type __n, const value_type& __v) { +_LIBCPP_CONSTEXPR_SINCE_CXX26 void forward_list<_Tp, _Alloc>::assign(size_type __n, const value_type& __v) { iterator __i = before_begin(); iterator __j = std::next(__i); iterator __e = end(); @@ -1064,18 +1121,19 @@ void forward_list<_Tp, _Alloc>::assign(size_type __n, const value_type& __v) { # ifndef _LIBCPP_CXX03_LANG template -inline void forward_list<_Tp, _Alloc>::assign(initializer_list __il) { +_LIBCPP_CONSTEXPR_SINCE_CXX26 inline void forward_list<_Tp, _Alloc>::assign(initializer_list __il) { assign(__il.begin(), __il.end()); } template template +_LIBCPP_CONSTEXPR_SINCE_CXX26 # if _LIBCPP_STD_VER >= 17 -typename forward_list<_Tp, _Alloc>::reference + typename forward_list<_Tp, _Alloc>::reference # else -void + void # endif -forward_list<_Tp, _Alloc>::emplace_front(_Args&&... __args) { + forward_list<_Tp, _Alloc>::emplace_front(_Args&&... __args) { __base::__before_begin()->__next_ = this->__create_node(/* next = */ __base::__before_begin()->__next_, std::forward<_Args>(__args)...); # if _LIBCPP_STD_VER >= 17 @@ -1084,7 +1142,7 @@ forward_list<_Tp, _Alloc>::emplace_front(_Args&&... __args) { } template -void forward_list<_Tp, _Alloc>::push_front(value_type&& __v) { +_LIBCPP_CONSTEXPR_SINCE_CXX26 void forward_list<_Tp, _Alloc>::push_front(value_type&& __v) { __base::__before_begin()->__next_ = this->__create_node(/* next = */ __base::__before_begin()->__next_, std::move(__v)); } @@ -1092,12 +1150,12 @@ void forward_list<_Tp, _Alloc>::push_front(value_type&& __v) { # endif // _LIBCPP_CXX03_LANG template -void forward_list<_Tp, _Alloc>::push_front(const value_type& __v) { +_LIBCPP_CONSTEXPR_SINCE_CXX26 void forward_list<_Tp, _Alloc>::push_front(const value_type& __v) { __base::__before_begin()->__next_ = this->__create_node(/* next = */ __base::__before_begin()->__next_, __v); } template -void forward_list<_Tp, _Alloc>::pop_front() { +_LIBCPP_CONSTEXPR_SINCE_CXX26 void forward_list<_Tp, _Alloc>::pop_front() { _LIBCPP_ASSERT_NON_NULL(!empty(), "forward_list::pop_front called on an empty list"); __node_pointer __p = __base::__before_begin()->__next_; __base::__before_begin()->__next_ = __p->__next_; @@ -1108,7 +1166,7 @@ void forward_list<_Tp, _Alloc>::pop_front() { template template -typename forward_list<_Tp, _Alloc>::iterator +_LIBCPP_CONSTEXPR_SINCE_CXX26 typename forward_list<_Tp, _Alloc>::iterator forward_list<_Tp, _Alloc>::emplace_after(const_iterator __p, _Args&&... __args) { __begin_node_pointer const __r = __p.__get_begin(); __r->__next_ = this->__create_node(/* next = */ __r->__next_, std::forward<_Args>(__args)...); @@ -1116,7 +1174,7 @@ forward_list<_Tp, _Alloc>::emplace_after(const_iterator __p, _Args&&... __args) } template -typename forward_list<_Tp, _Alloc>::iterator +_LIBCPP_CONSTEXPR_SINCE_CXX26 typename forward_list<_Tp, _Alloc>::iterator forward_list<_Tp, _Alloc>::insert_after(const_iterator __p, value_type&& __v) { __begin_node_pointer const __r = __p.__get_begin(); __r->__next_ = this->__create_node(/* next = */ __r->__next_, std::move(__v)); @@ -1126,7 +1184,7 @@ forward_list<_Tp, _Alloc>::insert_after(const_iterator __p, value_type&& __v) { # endif // _LIBCPP_CXX03_LANG template -typename forward_list<_Tp, _Alloc>::iterator +_LIBCPP_CONSTEXPR_SINCE_CXX26 typename forward_list<_Tp, _Alloc>::iterator forward_list<_Tp, _Alloc>::insert_after(const_iterator __p, const value_type& __v) { __begin_node_pointer const __r = __p.__get_begin(); __r->__next_ = this->__create_node(/* next = */ __r->__next_, __v); @@ -1135,7 +1193,7 @@ forward_list<_Tp, _Alloc>::insert_after(const_iterator __p, const value_type& __ template template -typename forward_list<_Tp, _Alloc>::iterator +_LIBCPP_CONSTEXPR_SINCE_CXX26 typename forward_list<_Tp, _Alloc>::iterator forward_list<_Tp, _Alloc>::__insert_after(const_iterator __p, size_type __n, _Args&&... __args) { __begin_node_pointer __r = __p.__get_begin(); if (__n > 0) { @@ -1159,21 +1217,22 @@ forward_list<_Tp, _Alloc>::__insert_after(const_iterator __p, size_type __n, _Ar # endif // _LIBCPP_HAS_EXCEPTIONS __last->__next_ = __r->__next_; __r->__next_ = __first; - __r = static_cast<__begin_node_pointer>(__last); + __r = __forward_node_traits<__node_pointer>::__as_iter_node(__last); + // __r = static_cast<__begin_node_pointer>(__last); } return iterator(__r); } template template ::value, int> > -typename forward_list<_Tp, _Alloc>::iterator +_LIBCPP_CONSTEXPR_SINCE_CXX26 typename forward_list<_Tp, _Alloc>::iterator forward_list<_Tp, _Alloc>::insert_after(const_iterator __p, _InputIterator __f, _InputIterator __l) { return __insert_after_with_sentinel(__p, std::move(__f), std::move(__l)); } template template -_LIBCPP_HIDE_FROM_ABI typename forward_list<_Tp, _Alloc>::iterator +_LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI typename forward_list<_Tp, _Alloc>::iterator forward_list<_Tp, _Alloc>::__insert_after_with_sentinel(const_iterator __p, _InputIterator __f, _Sentinel __l) { __begin_node_pointer __r = __p.__get_begin(); @@ -1200,14 +1259,16 @@ forward_list<_Tp, _Alloc>::__insert_after_with_sentinel(const_iterator __p, _Inp __last->__next_ = __r->__next_; __r->__next_ = __first; - __r = static_cast<__begin_node_pointer>(__last); + __r = __forward_node_traits<__node_pointer>::__as_iter_node(__last); + // __r = static_cast<__begin_node_pointer>(__last); } return iterator(__r); } template -typename forward_list<_Tp, _Alloc>::iterator forward_list<_Tp, _Alloc>::erase_after(const_iterator __f) { +_LIBCPP_CONSTEXPR_SINCE_CXX26 typename forward_list<_Tp, _Alloc>::iterator +forward_list<_Tp, _Alloc>::erase_after(const_iterator __f) { __begin_node_pointer __p = __f.__get_begin(); __node_pointer __n = __p->__next_; __p->__next_ = __n->__next_; @@ -1216,7 +1277,7 @@ typename forward_list<_Tp, _Alloc>::iterator forward_list<_Tp, _Alloc>::erase_af } template -typename forward_list<_Tp, _Alloc>::iterator +_LIBCPP_CONSTEXPR_SINCE_CXX26 typename forward_list<_Tp, _Alloc>::iterator forward_list<_Tp, _Alloc>::erase_after(const_iterator __f, const_iterator __l) { __node_pointer __e = __l.__get_unsafe_node_pointer(); if (__f != __l) { @@ -1236,7 +1297,7 @@ forward_list<_Tp, _Alloc>::erase_after(const_iterator __f, const_iterator __l) { } template -void forward_list<_Tp, _Alloc>::resize(size_type __n) { +_LIBCPP_CONSTEXPR_SINCE_CXX26 void forward_list<_Tp, _Alloc>::resize(size_type __n) { size_type __sz = 0; iterator __p = before_begin(); iterator __i = begin(); @@ -1250,7 +1311,7 @@ void forward_list<_Tp, _Alloc>::resize(size_type __n) { } template -void forward_list<_Tp, _Alloc>::resize(size_type __n, const value_type& __v) { +_LIBCPP_CONSTEXPR_SINCE_CXX26 void forward_list<_Tp, _Alloc>::resize(size_type __n, const value_type& __v) { size_type __sz = 0; iterator __p = before_begin(); iterator __i = begin(); @@ -1264,7 +1325,7 @@ void forward_list<_Tp, _Alloc>::resize(size_type __n, const value_type& __v) { } template -void forward_list<_Tp, _Alloc>::splice_after(const_iterator __p, forward_list& __x) { +_LIBCPP_CONSTEXPR_SINCE_CXX26 void forward_list<_Tp, _Alloc>::splice_after(const_iterator __p, forward_list& __x) { if (!__x.empty()) { if (__p.__get_begin()->__next_ != nullptr) { const_iterator __lm1 = __x.before_begin(); @@ -1278,7 +1339,8 @@ void forward_list<_Tp, _Alloc>::splice_after(const_iterator __p, forward_list& _ } template -void forward_list<_Tp, _Alloc>::splice_after(const_iterator __p, forward_list& /*__other*/, const_iterator __i) { +_LIBCPP_CONSTEXPR_SINCE_CXX26 void +forward_list<_Tp, _Alloc>::splice_after(const_iterator __p, forward_list& /*__other*/, const_iterator __i) { const_iterator __lm1 = std::next(__i); if (__p != __i && __p != __lm1) { __i.__get_begin()->__next_ = __lm1.__get_begin()->__next_; @@ -1288,7 +1350,7 @@ void forward_list<_Tp, _Alloc>::splice_after(const_iterator __p, forward_list& / } template -void forward_list<_Tp, _Alloc>::splice_after( +_LIBCPP_CONSTEXPR_SINCE_CXX26 void forward_list<_Tp, _Alloc>::splice_after( const_iterator __p, forward_list& /*__other*/, const_iterator __f, const_iterator __l) { if (__f != __l && __p != __f) { const_iterator __lm1 = __f; @@ -1303,24 +1365,26 @@ void forward_list<_Tp, _Alloc>::splice_after( } template -inline _LIBCPP_HIDE_FROM_ABI void forward_list<_Tp, _Alloc>::splice_after(const_iterator __p, forward_list&& __x) { +_LIBCPP_CONSTEXPR_SINCE_CXX26 inline _LIBCPP_HIDE_FROM_ABI void +forward_list<_Tp, _Alloc>::splice_after(const_iterator __p, forward_list&& __x) { splice_after(__p, __x); } template -inline _LIBCPP_HIDE_FROM_ABI void +_LIBCPP_CONSTEXPR_SINCE_CXX26 inline _LIBCPP_HIDE_FROM_ABI void forward_list<_Tp, _Alloc>::splice_after(const_iterator __p, forward_list&& __x, const_iterator __i) { splice_after(__p, __x, __i); } template -inline _LIBCPP_HIDE_FROM_ABI void forward_list<_Tp, _Alloc>::splice_after( +_LIBCPP_CONSTEXPR_SINCE_CXX26 inline _LIBCPP_HIDE_FROM_ABI void forward_list<_Tp, _Alloc>::splice_after( const_iterator __p, forward_list&& __x, const_iterator __f, const_iterator __l) { splice_after(__p, __x, __f, __l); } template -typename forward_list<_Tp, _Alloc>::__remove_return_type forward_list<_Tp, _Alloc>::remove(const value_type& __v) { +_LIBCPP_CONSTEXPR_SINCE_CXX26 typename forward_list<_Tp, _Alloc>::__remove_return_type +forward_list<_Tp, _Alloc>::remove(const value_type& __v) { forward_list<_Tp, _Alloc> __deleted_nodes(get_allocator()); // collect the nodes we're removing typename forward_list<_Tp, _Alloc>::size_type __count_removed = 0; const iterator __e = end(); @@ -1343,7 +1407,8 @@ typename forward_list<_Tp, _Alloc>::__remove_return_type forward_list<_Tp, _Allo template template -typename forward_list<_Tp, _Alloc>::__remove_return_type forward_list<_Tp, _Alloc>::remove_if(_Predicate __pred) { +_LIBCPP_CONSTEXPR_SINCE_CXX26 typename forward_list<_Tp, _Alloc>::__remove_return_type +forward_list<_Tp, _Alloc>::remove_if(_Predicate __pred) { forward_list<_Tp, _Alloc> __deleted_nodes(get_allocator()); // collect the nodes we're removing typename forward_list<_Tp, _Alloc>::size_type __count_removed = 0; const iterator __e = end(); @@ -1366,7 +1431,7 @@ typename forward_list<_Tp, _Alloc>::__remove_return_type forward_list<_Tp, _Allo template template -typename forward_list<_Tp, _Alloc>::__remove_return_type +_LIBCPP_CONSTEXPR_SINCE_CXX26 typename forward_list<_Tp, _Alloc>::__remove_return_type forward_list<_Tp, _Alloc>::unique(_BinaryPredicate __binary_pred) { forward_list<_Tp, _Alloc> __deleted_nodes(get_allocator()); // collect the nodes we're removing typename forward_list<_Tp, _Alloc>::size_type __count_removed = 0; @@ -1384,7 +1449,7 @@ forward_list<_Tp, _Alloc>::unique(_BinaryPredicate __binary_pred) { template template -void forward_list<_Tp, _Alloc>::merge(forward_list& __x, _Compare __comp) { +_LIBCPP_CONSTEXPR_SINCE_CXX26 void forward_list<_Tp, _Alloc>::merge(forward_list& __x, _Compare __comp) { if (this != std::addressof(__x)) { __base::__before_begin()->__next_ = __merge(__base::__before_begin()->__next_, __x.__before_begin()->__next_, __comp); @@ -1394,7 +1459,7 @@ void forward_list<_Tp, _Alloc>::merge(forward_list& __x, _Compare __comp) { template template -typename forward_list<_Tp, _Alloc>::__node_pointer +_LIBCPP_CONSTEXPR_SINCE_CXX26 typename forward_list<_Tp, _Alloc>::__node_pointer forward_list<_Tp, _Alloc>::__merge(__node_pointer __f1, __node_pointer __f2, _Compare& __comp) { if (__f1 == nullptr) return __f2; @@ -1431,13 +1496,13 @@ forward_list<_Tp, _Alloc>::__merge(__node_pointer __f1, __node_pointer __f2, _Co template template -inline void forward_list<_Tp, _Alloc>::sort(_Compare __comp) { +_LIBCPP_CONSTEXPR_SINCE_CXX26 inline void forward_list<_Tp, _Alloc>::sort(_Compare __comp) { __base::__before_begin()->__next_ = __sort(__base::__before_begin()->__next_, std::distance(begin(), end()), __comp); } template template -typename forward_list<_Tp, _Alloc>::__node_pointer +_LIBCPP_CONSTEXPR_SINCE_CXX26 typename forward_list<_Tp, _Alloc>::__node_pointer forward_list<_Tp, _Alloc>::__sort(__node_pointer __f1, difference_type __sz, _Compare& __comp) { switch (__sz) { case 0: @@ -1461,7 +1526,7 @@ forward_list<_Tp, _Alloc>::__sort(__node_pointer __f1, difference_type __sz, _Co } template -void forward_list<_Tp, _Alloc>::reverse() _NOEXCEPT { +_LIBCPP_CONSTEXPR_SINCE_CXX26 void forward_list<_Tp, _Alloc>::reverse() _NOEXCEPT { __node_pointer __p = __base::__before_begin()->__next_; if (__p != nullptr) { __node_pointer __f = __p->__next_; @@ -1477,7 +1542,8 @@ void forward_list<_Tp, _Alloc>::reverse() _NOEXCEPT { } template -_LIBCPP_HIDE_FROM_ABI bool operator==(const forward_list<_Tp, _Alloc>& __x, const forward_list<_Tp, _Alloc>& __y) { +_LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI bool +operator==(const forward_list<_Tp, _Alloc>& __x, const forward_list<_Tp, _Alloc>& __y) { typedef forward_list<_Tp, _Alloc> _Cp; typedef typename _Cp::const_iterator _Ip; _Ip __ix = __x.begin(); @@ -1493,31 +1559,31 @@ _LIBCPP_HIDE_FROM_ABI bool operator==(const forward_list<_Tp, _Alloc>& __x, cons # if _LIBCPP_STD_VER <= 17 template -inline _LIBCPP_HIDE_FROM_ABI bool +_LIBCPP_CONSTEXPR_SINCE_CXX26 inline _LIBCPP_HIDE_FROM_ABI bool operator!=(const forward_list<_Tp, _Alloc>& __x, const forward_list<_Tp, _Alloc>& __y) { return !(__x == __y); } template -inline _LIBCPP_HIDE_FROM_ABI bool +_LIBCPP_CONSTEXPR_SINCE_CXX26 inline _LIBCPP_HIDE_FROM_ABI bool operator<(const forward_list<_Tp, _Alloc>& __x, const forward_list<_Tp, _Alloc>& __y) { return std::lexicographical_compare(__x.begin(), __x.end(), __y.begin(), __y.end()); } template -inline _LIBCPP_HIDE_FROM_ABI bool +_LIBCPP_CONSTEXPR_SINCE_CXX26 inline _LIBCPP_HIDE_FROM_ABI bool operator>(const forward_list<_Tp, _Alloc>& __x, const forward_list<_Tp, _Alloc>& __y) { return __y < __x; } template -inline _LIBCPP_HIDE_FROM_ABI bool +_LIBCPP_CONSTEXPR_SINCE_CXX26 inline _LIBCPP_HIDE_FROM_ABI bool operator>=(const forward_list<_Tp, _Alloc>& __x, const forward_list<_Tp, _Alloc>& __y) { return !(__x < __y); } template -inline _LIBCPP_HIDE_FROM_ABI bool +_LIBCPP_CONSTEXPR_SINCE_CXX26 inline _LIBCPP_HIDE_FROM_ABI bool operator<=(const forward_list<_Tp, _Alloc>& __x, const forward_list<_Tp, _Alloc>& __y) { return !(__y < __x); } @@ -1525,7 +1591,7 @@ operator<=(const forward_list<_Tp, _Alloc>& __x, const forward_list<_Tp, _Alloc> # else // #if _LIBCPP_STD_VER <= 17 template -_LIBCPP_HIDE_FROM_ABI __synth_three_way_result<_Tp> +_LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI __synth_three_way_result<_Tp> operator<=>(const forward_list<_Tp, _Allocator>& __x, const forward_list<_Tp, _Allocator>& __y) { return std::lexicographical_compare_three_way(__x.begin(), __x.end(), __y.begin(), __y.end(), std::__synth_three_way); } @@ -1533,20 +1599,20 @@ operator<=>(const forward_list<_Tp, _Allocator>& __x, const forward_list<_Tp, _A # endif // #if _LIBCPP_STD_VER <= 17 template -inline _LIBCPP_HIDE_FROM_ABI void swap(forward_list<_Tp, _Alloc>& __x, forward_list<_Tp, _Alloc>& __y) - _NOEXCEPT_(_NOEXCEPT_(__x.swap(__y))) { +_LIBCPP_CONSTEXPR_SINCE_CXX26 inline _LIBCPP_HIDE_FROM_ABI void +swap(forward_list<_Tp, _Alloc>& __x, forward_list<_Tp, _Alloc>& __y) _NOEXCEPT_(_NOEXCEPT_(__x.swap(__y))) { __x.swap(__y); } # if _LIBCPP_STD_VER >= 20 template -inline _LIBCPP_HIDE_FROM_ABI typename forward_list<_Tp, _Allocator>::size_type +_LIBCPP_CONSTEXPR_SINCE_CXX26 inline _LIBCPP_HIDE_FROM_ABI typename forward_list<_Tp, _Allocator>::size_type erase_if(forward_list<_Tp, _Allocator>& __c, _Predicate __pred) { return __c.remove_if(__pred); } template -inline _LIBCPP_HIDE_FROM_ABI typename forward_list<_Tp, _Allocator>::size_type +_LIBCPP_CONSTEXPR_SINCE_CXX26 inline _LIBCPP_HIDE_FROM_ABI typename forward_list<_Tp, _Allocator>::size_type erase(forward_list<_Tp, _Allocator>& __c, const _Up& __v) { return std::erase_if(__c, [&](const auto& __elem) -> bool { return __elem == __v; }); } diff --git a/libcxx/include/version b/libcxx/include/version index 65fae111dc8ed..87c4ede9a7e59 100644 --- a/libcxx/include/version +++ b/libcxx/include/version @@ -68,6 +68,7 @@ __cpp_lib_constexpr_charconv 202207L __cpp_lib_constexpr_cmath 202202L __cpp_lib_constexpr_complex 201711L __cpp_lib_constexpr_dynamic_alloc 201907L +__cpp_lib_constexpr_forward_list 202502L __cpp_lib_constexpr_functional 201907L __cpp_lib_constexpr_iterator 201811L __cpp_lib_constexpr_memory 202202L @@ -543,6 +544,7 @@ __cpp_lib_void_t 201411L # define __cpp_lib_bitset 202306L # undef __cpp_lib_constexpr_algorithms # define __cpp_lib_constexpr_algorithms 202306L +# define __cpp_lib_constexpr_forward_list 202502L # if !defined(_LIBCPP_ABI_VCRUNTIME) # define __cpp_lib_constexpr_new 202406L # endif diff --git a/libcxx/test/std/containers/sequences/forwardlist/compare.three_way.pass.cpp b/libcxx/test/std/containers/sequences/forwardlist/compare.three_way.pass.cpp index 52adfc4d85985..a9ef855e9a73e 100644 --- a/libcxx/test/std/containers/sequences/forwardlist/compare.three_way.pass.cpp +++ b/libcxx/test/std/containers/sequences/forwardlist/compare.three_way.pass.cpp @@ -11,7 +11,7 @@ // template // synth-three-way-result operator<=>(const forward_list& x, -// const forward_list& y); +// const forward_list& y); // constexpr since C++26 #include #include @@ -20,6 +20,9 @@ int main(int, char**) { assert(test_sequence_container_spaceship()); - // `std::forward_list` is not constexpr, so no `static_assert` test here. +#if TEST_STD_VER >= 26 + static_assert(test_sequence_container_spaceship()); +#endif + return 0; } diff --git a/libcxx/test/std/containers/sequences/forwardlist/empty.pass.cpp b/libcxx/test/std/containers/sequences/forwardlist/empty.pass.cpp index dbc0631d11930..4482d26f308a6 100644 --- a/libcxx/test/std/containers/sequences/forwardlist/empty.pass.cpp +++ b/libcxx/test/std/containers/sequences/forwardlist/empty.pass.cpp @@ -10,7 +10,7 @@ // class forward_list -// bool empty() const noexcept; +// bool empty() const noexcept; // constexpr since C++26 #include #include @@ -18,7 +18,7 @@ #include "test_macros.h" #include "min_allocator.h" -int main(int, char**) { +TEST_CONSTEXPR_CXX26 bool test() { { typedef std::forward_list C; C c; @@ -42,5 +42,14 @@ int main(int, char**) { } #endif + return true; +} + +int main(int, char**) { + assert(test()); +#if TEST_STD_VER >= 26 + static_assert(test()); +#endif + return 0; } diff --git a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.access/front.pass.cpp b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.access/front.pass.cpp index 757db7d957f5f..50b549f17d561 100644 --- a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.access/front.pass.cpp +++ b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.access/front.pass.cpp @@ -8,17 +8,18 @@ // -// reference front(); -// const_reference front() const; +// reference front(); // constexpr since C++26 +// const_reference front() const; // constexpr since C++26 #include #include #include +#include "test_allocator.h" #include "test_macros.h" #include "min_allocator.h" -int main(int, char**) { +TEST_CONSTEXPR_CXX26 bool test() { { typedef int T; typedef std::forward_list C; @@ -58,5 +59,14 @@ int main(int, char**) { } #endif + return true; +} + +int main(int, char**) { + assert(test()); +#if TEST_STD_VER >= 26 + static_assert(test()); +#endif + return 0; } diff --git a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/alloc.compile.fail.cpp b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/alloc.compile.fail.cpp index 31893a1b95994..4645560048cf6 100644 --- a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/alloc.compile.fail.cpp +++ b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/alloc.compile.fail.cpp @@ -8,7 +8,7 @@ // -// explicit forward_list(const allocator_type& a); +// explicit forward_list(const allocator_type& a); // constexpr since C++26 #include #include @@ -16,7 +16,7 @@ #include "test_allocator.h" #include "../../../NotConstructible.h" -int main(int, char**) { +TEST_CONSTEXPR_CXX26 bool test() { { typedef test_allocator A; typedef A::value_type T; @@ -26,5 +26,14 @@ int main(int, char**) { assert(c.empty()); } + return true; +} + +int main(int, char**) { + test(); +#if TEST_STD_VER >= 26 + static_assert(test()); +#endif + return 0; } diff --git a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/alloc.pass.cpp b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/alloc.pass.cpp index bfb330fdaf9fc..ffc6d37f28160 100644 --- a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/alloc.pass.cpp +++ b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/alloc.pass.cpp @@ -8,7 +8,7 @@ // -// explicit forward_list(const allocator_type& a); +// explicit forward_list(const allocator_type& a); // constexpr since C++26 #include #include @@ -18,7 +18,7 @@ #include "../../../NotConstructible.h" #include "min_allocator.h" -int main(int, char**) { +TEST_CONSTEXPR_CXX26 bool test() { { typedef test_allocator A; typedef A::value_type T; @@ -46,5 +46,14 @@ int main(int, char**) { } #endif + return true; +} + +int main(int, char**) { + assert(test()); +#if TEST_STD_VER >= 26 + static_assert(test()); +#endif + return 0; } diff --git a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/assign_copy.pass.cpp b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/assign_copy.pass.cpp index 27d450c63dcae..b99af4ccb79ec 100644 --- a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/assign_copy.pass.cpp +++ b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/assign_copy.pass.cpp @@ -8,7 +8,7 @@ // -// forward_list& operator=(const forward_list& x); +// forward_list& operator=(const forward_list& x); // constexpr since C++26 #include #include @@ -18,7 +18,7 @@ #include "test_allocator.h" #include "min_allocator.h" -int main(int, char**) { +TEST_CONSTEXPR_CXX26 bool test() { { typedef int T; typedef test_allocator A; @@ -143,5 +143,14 @@ int main(int, char**) { } #endif + return true; +} + +int main(int, char**) { + assert(test()); +#if TEST_STD_VER >= 26 + static_assert(test()); +#endif + return 0; } diff --git a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/assign_init.pass.cpp b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/assign_init.pass.cpp index 1cdcca82d3352..ea2802b323a91 100644 --- a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/assign_init.pass.cpp +++ b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/assign_init.pass.cpp @@ -10,7 +10,7 @@ // -// void assign(initializer_list il); +// void assign(initializer_list il); // constexpr since C++26 #include #include @@ -19,7 +19,7 @@ #include "test_macros.h" #include "min_allocator.h" -int main(int, char**) { +TEST_CONSTEXPR_CXX26 bool test() { { typedef int T; typedef std::forward_list C; @@ -65,5 +65,14 @@ int main(int, char**) { assert(n == 4); } + return true; +} + +int main(int, char**) { + assert(test()); +#if TEST_STD_VER >= 26 + static_assert(test()); +#endif + return 0; } diff --git a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/assign_move.pass.cpp b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/assign_move.pass.cpp index 998a7e11ef343..9c88db6166ba7 100644 --- a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/assign_move.pass.cpp +++ b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/assign_move.pass.cpp @@ -10,7 +10,7 @@ // -// forward_list& operator=(forward_list&& x); +// forward_list& operator=(forward_list&& x); // constexpr since C++26 #include #include @@ -21,7 +21,7 @@ #include "MoveOnly.h" #include "min_allocator.h" -int main(int, char**) { +TEST_CONSTEXPR_CXX26 bool test() { { typedef MoveOnly T; typedef test_allocator A; @@ -194,5 +194,14 @@ int main(int, char**) { assert(c0.empty()); } + return true; +} + +int main(int, char**) { + assert(test()); +#if TEST_STD_VER >= 26 + static_assert(test()); +#endif + return 0; } diff --git a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/assign_op_init.pass.cpp b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/assign_op_init.pass.cpp index a22d6c4985bc5..d21898dc4663a 100644 --- a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/assign_op_init.pass.cpp +++ b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/assign_op_init.pass.cpp @@ -10,7 +10,7 @@ // -// forward_list& operator=(initializer_list il); +// forward_list& operator=(initializer_list il); // constexpr since C++26 #include #include @@ -19,7 +19,7 @@ #include "test_macros.h" #include "min_allocator.h" -int main(int, char**) { +TEST_CONSTEXPR_CXX26 bool test() { { typedef int T; typedef std::forward_list C; @@ -65,5 +65,14 @@ int main(int, char**) { assert(n == 4); } + return true; +} + +int main(int, char**) { + assert(test()); +#if TEST_STD_VER >= 26 + static_assert(test()); +#endif + return 0; } diff --git a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/assign_range.pass.cpp b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/assign_range.pass.cpp index 9a35328740790..1601b4b47acd1 100644 --- a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/assign_range.pass.cpp +++ b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/assign_range.pass.cpp @@ -9,7 +9,7 @@ // // template -// void assign(InputIterator first, InputIterator last); +// void assign(InputIterator first, InputIterator last); // constexpr since C++26 #include #include @@ -19,7 +19,7 @@ #include "test_iterators.h" #include "min_allocator.h" -int main(int, char**) { +TEST_CONSTEXPR_CXX26 bool test() { { typedef int T; typedef std::forward_list C; @@ -75,5 +75,14 @@ int main(int, char**) { } #endif + return true; +} + +int main(int, char**) { + assert(test()); +#if TEST_STD_VER >= 26 + static_assert(test()); +#endif + return 0; } diff --git a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/assign_size_value.pass.cpp b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/assign_size_value.pass.cpp index b0fbfa3249e5e..75626b47c5273 100644 --- a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/assign_size_value.pass.cpp +++ b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/assign_size_value.pass.cpp @@ -8,7 +8,7 @@ // -// void assign(size_type n, const value_type& v); +// void assign(size_type n, const value_type& v); // constexpr since C++26 #include #include @@ -17,7 +17,7 @@ #include "test_macros.h" #include "min_allocator.h" -int main(int, char**) { +TEST_CONSTEXPR_CXX26 bool test() { { typedef int T; typedef std::forward_list C; @@ -65,5 +65,14 @@ int main(int, char**) { } #endif + return true; +} + +int main(int, char**) { + assert(test()); +#if TEST_STD_VER >= 26 + static_assert(test()); +#endif + return 0; } diff --git a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/copy.pass.cpp b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/copy.pass.cpp index 22d5054b9ae18..12d701bff4b68 100644 --- a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/copy.pass.cpp +++ b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/copy.pass.cpp @@ -8,7 +8,7 @@ // -// forward_list(const forward_list& x); +// forward_list(const forward_list& x); // constexpr since C++26 #include #include @@ -18,7 +18,7 @@ #include "test_allocator.h" #include "min_allocator.h" -int main(int, char**) { +TEST_CONSTEXPR_CXX26 bool test() { { typedef int T; typedef test_allocator A; @@ -64,5 +64,14 @@ int main(int, char**) { } #endif + return true; +} + +int main(int, char**) { + assert(test()); +#if TEST_STD_VER >= 26 + static_assert(test()); +#endif + return 0; } diff --git a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/copy_alloc.pass.cpp b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/copy_alloc.pass.cpp index a61233e4b5d22..fc3ff485b0667 100644 --- a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/copy_alloc.pass.cpp +++ b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/copy_alloc.pass.cpp @@ -8,7 +8,7 @@ // -// forward_list(const forward_list& x, const allocator_type& a); +// forward_list(const forward_list& x, const allocator_type& a); // constexpr since C++26 #include #include @@ -18,7 +18,7 @@ #include "test_allocator.h" #include "min_allocator.h" -int main(int, char**) { +TEST_CONSTEXPR_CXX26 bool test() { { typedef int T; typedef test_allocator A; @@ -64,5 +64,14 @@ int main(int, char**) { } #endif + return true; +} + +int main(int, char**) { + assert(test()); +#if TEST_STD_VER >= 26 + static_assert(test()); +#endif + return 0; } diff --git a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/default.pass.cpp b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/default.pass.cpp index b493a89b78003..e0ea8bf66cb3b 100644 --- a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/default.pass.cpp +++ b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/default.pass.cpp @@ -8,7 +8,7 @@ // -// forward_list(); +// forward_list(); // constexpr since C++26 #include #include @@ -16,7 +16,7 @@ #include "test_macros.h" #include "min_allocator.h" -int main(int, char**) { +TEST_CONSTEXPR_CXX26 bool test() { { typedef int T; typedef std::forward_list C; @@ -38,5 +38,14 @@ int main(int, char**) { } #endif + return true; +} + +int main(int, char**) { + assert(test()); +#if TEST_STD_VER >= 26 + static_assert(test()); +#endif + return 0; } diff --git a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/from_range.pass.cpp b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/from_range.pass.cpp index 312f6dbad3550..d1e1734e86f9f 100644 --- a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/from_range.pass.cpp +++ b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/from_range.pass.cpp @@ -9,14 +9,14 @@ // UNSUPPORTED: c++03, c++11, c++14, c++17, c++20 // template R> -// forward_list(from_range_t, R&& rg, const Allocator& = Allocator()); // C++23 +// forward_list(from_range_t, R&& rg, const Allocator& = Allocator()); // C++23; constexpr since C++26 #include #include "../../from_range_sequence_containers.h" #include "test_macros.h" -int main(int, char**) { +TEST_CONSTEXPR_CXX26 bool test() { for_all_iterators_and_allocators([]() { test_sequence_container([](const auto&) { // No additional validation to do. @@ -26,8 +26,19 @@ int main(int, char**) { static_assert(test_constraints()); - test_exception_safety_throwing_copy(); - test_exception_safety_throwing_allocator(); + if (!TEST_IS_CONSTANT_EVALUATED) { + test_exception_safety_throwing_copy(); + test_exception_safety_throwing_allocator(); + } + + return true; +} + +int main(int, char**) { + assert(test()); +#if TEST_STD_VER >= 26 + static_assert(test()); +#endif return 0; } diff --git a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/init.pass.cpp b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/init.pass.cpp index b42242b0a83d4..b7acf60aa70cc 100644 --- a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/init.pass.cpp +++ b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/init.pass.cpp @@ -10,7 +10,7 @@ // -// forward_list(initializer_list il); +// forward_list(initializer_list il); // constexpr since C++26 #include #include @@ -18,7 +18,7 @@ #include "test_macros.h" #include "min_allocator.h" -int main(int, char**) { +TEST_CONSTEXPR_CXX26 bool test() { { typedef int T; typedef std::forward_list C; @@ -38,5 +38,14 @@ int main(int, char**) { assert(n == 10); } + return true; +} + +int main(int, char**) { + assert(test()); +#if TEST_STD_VER >= 26 + static_assert(test()); +#endif + return 0; } diff --git a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/init_alloc.pass.cpp b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/init_alloc.pass.cpp index 0b29cbfa9254d..33d569c921a94 100644 --- a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/init_alloc.pass.cpp +++ b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/init_alloc.pass.cpp @@ -10,7 +10,7 @@ // -// forward_list(initializer_list il, const allocator_type& a); +// forward_list(initializer_list il, const allocator_type& a); // constexpr since C++26 #include #include @@ -19,7 +19,7 @@ #include "test_allocator.h" #include "min_allocator.h" -int main(int, char**) { +TEST_CONSTEXPR_CXX26 bool test() { { typedef int T; typedef test_allocator A; @@ -43,5 +43,14 @@ int main(int, char**) { assert(c.get_allocator() == A()); } + return true; +} + +int main(int, char**) { + assert(test()); +#if TEST_STD_VER >= 26 + static_assert(test()); +#endif + return 0; } diff --git a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/move.pass.cpp b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/move.pass.cpp index 762e252ca76fe..20575479f7357 100644 --- a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/move.pass.cpp +++ b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/move.pass.cpp @@ -10,7 +10,7 @@ // -// forward_list(forward_list&& x); +// forward_list(forward_list&& x); // constexpr since C++26 #include #include @@ -21,7 +21,7 @@ #include "MoveOnly.h" #include "min_allocator.h" -int main(int, char**) { +TEST_CONSTEXPR_CXX26 bool test() { { typedef MoveOnly T; typedef test_allocator A; @@ -68,5 +68,14 @@ int main(int, char**) { assert(c.get_allocator() == A()); } + return true; +} + +int main(int, char**) { + assert(test()); +#if TEST_STD_VER >= 26 + static_assert(test()); +#endif + return 0; } diff --git a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/move_alloc.pass.cpp b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/move_alloc.pass.cpp index a9bc2cb12f288..219505bf4fd17 100644 --- a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/move_alloc.pass.cpp +++ b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/move_alloc.pass.cpp @@ -10,7 +10,7 @@ // -// forward_list(forward_list&& x, const allocator_type& a); +// forward_list(forward_list&& x, const allocator_type& a); // constexpr since C++26 #include #include @@ -21,7 +21,7 @@ #include "MoveOnly.h" #include "min_allocator.h" -int main(int, char**) { +TEST_CONSTEXPR_CXX26 bool test() { { typedef MoveOnly T; typedef test_allocator A; @@ -68,5 +68,14 @@ int main(int, char**) { assert(c.get_allocator() == A()); } + return true; +} + +int main(int, char**) { + assert(test()); +#if TEST_STD_VER >= 26 + static_assert(test()); +#endif + return 0; } diff --git a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/range.pass.cpp b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/range.pass.cpp index ebd0e6a5bd1e0..61393eb28938e 100644 --- a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/range.pass.cpp +++ b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/range.pass.cpp @@ -9,7 +9,7 @@ // // template -// forward_list(InputIterator first, InputIterator last); +// forward_list(InputIterator first, InputIterator last); // constexpr since C++26 #include #include @@ -19,7 +19,7 @@ #include "test_iterators.h" #include "min_allocator.h" -int main(int, char**) { +TEST_CONSTEXPR_CXX26 bool test() { { typedef int T; typedef std::forward_list C; @@ -45,5 +45,14 @@ int main(int, char**) { } #endif + return true; +} + +int main(int, char**) { + assert(test()); +#if TEST_STD_VER >= 26 + static_assert(test()); +#endif + return 0; } diff --git a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/range_alloc.pass.cpp b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/range_alloc.pass.cpp index 4a28041ad2cbc..c0637420e328a 100644 --- a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/range_alloc.pass.cpp +++ b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/range_alloc.pass.cpp @@ -10,7 +10,7 @@ // template // forward_list(InputIterator first, InputIterator last, -// const allocator_type& a); +// const allocator_type& a); // constexpr since C++26 #include #include @@ -21,7 +21,7 @@ #include "test_iterators.h" #include "min_allocator.h" -int main(int, char**) { +TEST_CONSTEXPR_CXX26 bool test() { { typedef int T; typedef test_allocator A; @@ -51,5 +51,14 @@ int main(int, char**) { } #endif + return true; +} + +int main(int, char**) { + assert(test()); +#if TEST_STD_VER >= 26 + static_assert(test()); +#endif + return 0; } diff --git a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/size.pass.cpp b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/size.pass.cpp index 81b128d2149e3..206854560c19f 100644 --- a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/size.pass.cpp +++ b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/size.pass.cpp @@ -8,8 +8,8 @@ // -// explicit forward_list(size_type n); -// explicit forward_list(size_type n, const Alloc& a); +// explicit forward_list(size_type n); // constexpr since C++26 +// explicit forward_list(size_type n, const Alloc& a); // constexpr since C++26 #include #include diff --git a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/size_value.pass.cpp b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/size_value.pass.cpp index 663422d1c3c30..85d11e3f40a2f 100644 --- a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/size_value.pass.cpp +++ b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/size_value.pass.cpp @@ -8,7 +8,7 @@ // -// forward_list(size_type n, const value_type& v); +// forward_list(size_type n, const value_type& v); // constexpr since C++26 #include #include @@ -16,7 +16,7 @@ #include "test_macros.h" #include "min_allocator.h" -int main(int, char**) { +TEST_CONSTEXPR_CXX26 bool test() { { typedef int T; typedef std::forward_list C; @@ -42,5 +42,14 @@ int main(int, char**) { } #endif + return true; +} + +int main(int, char**) { + assert(test()); +#if TEST_STD_VER >= 26 + static_assert(test()); +#endif + return 0; } diff --git a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/size_value_alloc.pass.cpp b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/size_value_alloc.pass.cpp index af7f7471d4c98..abcdf62452b89 100644 --- a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/size_value_alloc.pass.cpp +++ b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/size_value_alloc.pass.cpp @@ -8,7 +8,7 @@ // -// forward_list(size_type n, const value_type& v, const allocator_type& a); +// forward_list(size_type n, const value_type& v, const allocator_type& a); // constexpr since C++26 #include #include @@ -17,7 +17,7 @@ #include "test_allocator.h" #include "min_allocator.h" -int main(int, char**) { +TEST_CONSTEXPR_CXX26 bool test() { { typedef test_allocator A; typedef A::value_type T; @@ -47,5 +47,14 @@ int main(int, char**) { } #endif + return true; +} + +int main(int, char**) { + assert(test()); +#if TEST_STD_VER >= 26 + static_assert(test()); +#endif + return 0; } diff --git a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.erasure/erase.pass.cpp b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.erasure/erase.pass.cpp index 1044d779220ee..86d7769fe16ee 100644 --- a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.erasure/erase.pass.cpp +++ b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.erasure/erase.pass.cpp @@ -11,7 +11,7 @@ // template // typename forward_list::size_type -// erase(forward_list& c, const U& value); +// erase(forward_list& c, const U& value); // constexpr since C++26 #include #include @@ -21,14 +21,14 @@ #include "min_allocator.h" template -void test0(S s, U val, S expected, std::size_t expected_erased_count) { +TEST_CONSTEXPR_CXX26 void test0(S s, U val, S expected, std::size_t expected_erased_count) { ASSERT_SAME_TYPE(typename S::size_type, decltype(std::erase(s, val))); assert(expected_erased_count == std::erase(s, val)); assert(s == expected); } template -void test() { +TEST_CONSTEXPR_CXX26 void test() { test0(S(), 1, S(), 0); test0(S({1}), 1, S(), 1); @@ -62,13 +62,21 @@ void test() { test0(S({1, 2, 1}), opt(3), S({1, 2, 1}), 0); } -int main(int, char**) { +TEST_CONSTEXPR_CXX26 bool test() { test>(); test>>(); test>>(); - test>(); test>(); + return true; +} + +int main(int, char**) { + assert(test()); +#if TEST_STD_VER >= 26 + static_assert(test()); +#endif + return 0; } diff --git a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.erasure/erase_if.pass.cpp b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.erasure/erase_if.pass.cpp index c4f45a1069a2b..c665f9cccbf0a 100644 --- a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.erasure/erase_if.pass.cpp +++ b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.erasure/erase_if.pass.cpp @@ -11,7 +11,7 @@ // template // typename forward_list::size_type -// erase_if(forward_list& c, Predicate pred); +// erase_if(forward_list& c, Predicate pred); // constexpr since C++26 #include @@ -20,14 +20,14 @@ #include "min_allocator.h" template -void test0(S s, Pred p, S expected, std::size_t expected_erased_count) { +TEST_CONSTEXPR_CXX26 void test0(S s, Pred p, S expected, std::size_t expected_erased_count) { ASSERT_SAME_TYPE(typename S::size_type, decltype(std::erase_if(s, p))); assert(expected_erased_count == std::erase_if(s, p)); assert(s == expected); } template -void test() { +TEST_CONSTEXPR_CXX26 void test() { auto is1 = [](auto v) { return v == 1; }; auto is2 = [](auto v) { return v == 2; }; auto is3 = [](auto v) { return v == 3; }; @@ -64,13 +64,21 @@ void test() { test0(S({1, 2, 3}), False, S({1, 2, 3}), 0); } -int main(int, char**) { +TEST_CONSTEXPR_CXX26 bool test() { test>(); test>>(); test>>(); - test>(); test>(); + return true; +} + +int main(int, char**) { + assert(test()); +#if TEST_STD_VER >= 26 + static_assert(test()); +#endif + return 0; } diff --git a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.iter/before_begin.pass.cpp b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.iter/before_begin.pass.cpp index d66d2cd879515..52b5d87860aab 100644 --- a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.iter/before_begin.pass.cpp +++ b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.iter/before_begin.pass.cpp @@ -8,9 +8,9 @@ // -// iterator before_begin(); -// const_iterator before_begin() const; -// const_iterator cbefore_begin() const; +// iterator before_begin(); // constexpr since C++26 +// const_iterator before_begin() const; // constexpr since C++26 +// const_iterator cbefore_begin() const; // constexpr since C++26 #include #include @@ -19,7 +19,7 @@ #include "test_macros.h" #include "min_allocator.h" -int main(int, char**) { +TEST_CONSTEXPR_CXX26 bool test() { { typedef int T; typedef std::forward_list C; @@ -101,5 +101,14 @@ int main(int, char**) { } #endif + return true; +} + +int main(int, char**) { + assert(test()); +#if TEST_STD_VER >= 26 + static_assert(test()); +#endif + return 0; } diff --git a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.iter/iterators.pass.cpp b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.iter/iterators.pass.cpp index 135689b2321c3..560c47b17958f 100644 --- a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.iter/iterators.pass.cpp +++ b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.iter/iterators.pass.cpp @@ -8,12 +8,12 @@ // -// iterator begin(); -// iterator end(); -// const_iterator begin() const; -// const_iterator end() const; -// const_iterator cbegin() const; -// const_iterator cend() const; +// iterator begin(); // constexpr since C++26 +// iterator end(); // constexpr since C++26 +// const_iterator begin() const; // constexpr since C++26 +// const_iterator end() const; // constexpr since C++26 +// const_iterator cbegin() const; // constexpr since C++26 +// const_iterator cend() const; // constexpr since C++26 #include #include @@ -22,7 +22,7 @@ #include "test_macros.h" #include "min_allocator.h" -int main(int, char**) { +TEST_CONSTEXPR_CXX26 bool test() { { typedef int T; typedef std::forward_list C; @@ -69,6 +69,8 @@ int main(int, char**) { typedef std::forward_list C; C::iterator i; C::const_iterator j; + (void)i; + (void)j; } #if TEST_STD_VER >= 11 { @@ -117,6 +119,8 @@ int main(int, char**) { typedef std::forward_list> C; C::iterator i; C::const_iterator j; + (void)i; + (void)j; } #endif #if TEST_STD_VER > 11 @@ -142,5 +146,14 @@ int main(int, char**) { } #endif + return true; +} + +int main(int, char**) { + assert(test()); +#if TEST_STD_VER >= 26 + static_assert(test()); +#endif + return 0; } diff --git a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/assign_range.pass.cpp b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/assign_range.pass.cpp index a27cc757025b5..9a3adec1d9756 100644 --- a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/assign_range.pass.cpp +++ b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/assign_range.pass.cpp @@ -9,7 +9,7 @@ // UNSUPPORTED: c++03, c++11, c++14, c++17, c++20 // template R> -// constexpr void prepend_range(R&& rg); // C++23 +// constexpr void prepend_range(R&& rg); // C++23; constexpr since C++26 #include @@ -21,7 +21,7 @@ // {empty/one-element/full} container); // - prepending move-only elements; // - an exception is thrown when copying the elements or when allocating new elements. -int main(int, char**) { +TEST_CONSTEXPR_CXX26 bool test() { static_assert(test_constraints_assign_range()); for_all_iterators_and_allocators([]() { @@ -31,8 +31,19 @@ int main(int, char**) { }); test_sequence_prepend_range_move_only(); - test_prepend_range_exception_safety_throwing_copy(); - test_prepend_range_exception_safety_throwing_allocator(); + if (!TEST_IS_CONSTANT_EVALUATED) { + test_prepend_range_exception_safety_throwing_copy(); + test_prepend_range_exception_safety_throwing_allocator(); + } + + return true; +} + +int main(int, char**) { + assert(test()); +#if TEST_STD_VER >= 26 + static_assert(test()); +#endif return 0; } diff --git a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/clear.pass.cpp b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/clear.pass.cpp index 9f6d34b701df7..2e1768cf8bad9 100644 --- a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/clear.pass.cpp +++ b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/clear.pass.cpp @@ -8,7 +8,7 @@ // -// void clear() noexcept; +// void clear() noexcept; // constexpr since C++26 #include #include @@ -18,7 +18,7 @@ #include "../../../NotConstructible.h" #include "min_allocator.h" -int main(int, char**) { +TEST_CONSTEXPR_CXX26 bool test() { { typedef NotConstructible T; typedef std::forward_list C; @@ -64,5 +64,14 @@ int main(int, char**) { } #endif + return true; +} + +int main(int, char**) { + assert(test()); +#if TEST_STD_VER >= 26 + static_assert(test()); +#endif + return 0; } diff --git a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/emplace_after.pass.cpp b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/emplace_after.pass.cpp index f77d47ee7c74f..6433607af9b39 100644 --- a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/emplace_after.pass.cpp +++ b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/emplace_after.pass.cpp @@ -11,7 +11,7 @@ // // template -// iterator emplace_after(const_iterator p, Args&&... args); +// iterator emplace_after(const_iterator p, Args&&... args); // constexpr since C++26 #include #include @@ -20,7 +20,7 @@ #include "../../../Emplaceable.h" #include "min_allocator.h" -int main(int, char**) { +TEST_CONSTEXPR_CXX26 bool test() { { typedef Emplaceable T; typedef std::forward_list C; @@ -84,5 +84,14 @@ int main(int, char**) { assert(std::distance(c.begin(), c.end()) == 4); } + return true; +} + +int main(int, char**) { + assert(test()); +#if TEST_STD_VER >= 26 + static_assert(test()); +#endif + return 0; } diff --git a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/emplace_front.pass.cpp b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/emplace_front.pass.cpp index cd3bb20c52ae5..46ae27b43622e 100644 --- a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/emplace_front.pass.cpp +++ b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/emplace_front.pass.cpp @@ -10,7 +10,7 @@ // -// template reference emplace_front(Args&&... args); +// template reference emplace_front(Args&&... args); // constexpr since C++26 // return type is 'reference' in C++17; 'void' before #include @@ -21,7 +21,7 @@ #include "../../../Emplaceable.h" #include "min_allocator.h" -int main(int, char**) { +TEST_CONSTEXPR_CXX26 bool test() { { typedef Emplaceable T; typedef std::forward_list C; @@ -67,5 +67,14 @@ int main(int, char**) { assert(std::distance(c.begin(), c.end()) == 2); } + return true; +} + +int main(int, char**) { + assert(test()); +#if TEST_STD_VER >= 26 + static_assert(test()); +#endif + return 0; } diff --git a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/erase_after_many.pass.cpp b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/erase_after_many.pass.cpp index e85951798526d..73cb03c2cb7d2 100644 --- a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/erase_after_many.pass.cpp +++ b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/erase_after_many.pass.cpp @@ -8,7 +8,7 @@ // -// iterator erase_after(const_iterator first, const_iterator last); +// iterator erase_after(const_iterator first, const_iterator last); // constexpr since C++26 #include #include @@ -17,7 +17,7 @@ #include "test_macros.h" #include "min_allocator.h" -int main(int, char**) { +TEST_CONSTEXPR_CXX26 bool test() { { typedef int T; typedef std::forward_list C; @@ -153,5 +153,14 @@ int main(int, char**) { } #endif + return true; +} + +int main(int, char**) { + assert(test()); +#if TEST_STD_VER >= 26 + static_assert(test()); +#endif + return 0; } diff --git a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/erase_after_one.pass.cpp b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/erase_after_one.pass.cpp index 892228e76def7..12997f1dad3b9 100644 --- a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/erase_after_one.pass.cpp +++ b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/erase_after_one.pass.cpp @@ -8,7 +8,7 @@ // -// iterator erase_after(const_iterator p); +// iterator erase_after(const_iterator p); // constexpr since C++26 #include #include @@ -17,7 +17,7 @@ #include "test_macros.h" #include "min_allocator.h" -int main(int, char**) { +TEST_CONSTEXPR_CXX26 bool test() { { typedef int T; typedef std::forward_list C; @@ -95,5 +95,14 @@ int main(int, char**) { } #endif + return true; +} + +int main(int, char**) { + assert(test()); +#if TEST_STD_VER >= 26 + static_assert(test()); +#endif + return 0; } diff --git a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/insert_after_const.pass.cpp b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/insert_after_const.pass.cpp index 8443158413e7f..d93789dd6bb5c 100644 --- a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/insert_after_const.pass.cpp +++ b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/insert_after_const.pass.cpp @@ -8,7 +8,7 @@ // -// iterator insert_after(const_iterator p, const value_type& v); +// iterator insert_after(const_iterator p, const value_type& v); // constexpr since C++26 #include #include @@ -16,7 +16,7 @@ #include "test_macros.h" #include "min_allocator.h" -int main(int, char**) { +TEST_CONSTEXPR_CXX26 bool test() { { typedef int T; typedef std::forward_list C; @@ -84,5 +84,14 @@ int main(int, char**) { } #endif + return true; +} + +int main(int, char**) { + assert(test()); +#if TEST_STD_VER >= 26 + static_assert(test()); +#endif + return 0; } diff --git a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/insert_after_init.pass.cpp b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/insert_after_init.pass.cpp index de924a10c18f0..54be47f4264ff 100644 --- a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/insert_after_init.pass.cpp +++ b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/insert_after_init.pass.cpp @@ -10,7 +10,7 @@ // -// iterator insert_after(const_iterator p, initializer_list il); +// iterator insert_after(const_iterator p, initializer_list il); // constexpr since C++26 #include #include @@ -18,7 +18,7 @@ #include "test_macros.h" #include "min_allocator.h" -int main(int, char**) { +TEST_CONSTEXPR_CXX26 bool test() { { typedef int T; typedef std::forward_list C; @@ -70,5 +70,14 @@ int main(int, char**) { assert(*std::next(c.begin(), 4) == 2); } + return true; +} + +int main(int, char**) { + assert(test()); +#if TEST_STD_VER >= 26 + static_assert(test()); +#endif + return 0; } diff --git a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/insert_after_range.pass.cpp b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/insert_after_range.pass.cpp index af810d0f6961c..f89fbd7619da2 100644 --- a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/insert_after_range.pass.cpp +++ b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/insert_after_range.pass.cpp @@ -10,7 +10,7 @@ // template // iterator insert_after(const_iterator p, -// InputIterator first, InputIterator last); +// InputIterator first, InputIterator last); // constexpr since C++26 #include #include @@ -19,7 +19,7 @@ #include "test_iterators.h" #include "min_allocator.h" -int main(int, char**) { +TEST_CONSTEXPR_CXX26 bool test() { { typedef int T; typedef std::forward_list C; @@ -77,5 +77,14 @@ int main(int, char**) { } #endif + return true; +} + +int main(int, char**) { + assert(test()); +#if TEST_STD_VER >= 26 + static_assert(test()); +#endif + return 0; } diff --git a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/insert_after_rv.pass.cpp b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/insert_after_rv.pass.cpp index acd4bc73f724e..01b76f5cd64f1 100644 --- a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/insert_after_rv.pass.cpp +++ b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/insert_after_rv.pass.cpp @@ -10,7 +10,7 @@ // -// iterator insert_after(const_iterator p, value_type&& v); +// iterator insert_after(const_iterator p, value_type&& v); // constexpr since C++26 #include #include @@ -19,7 +19,7 @@ #include "MoveOnly.h" #include "min_allocator.h" -int main(int, char**) { +TEST_CONSTEXPR_CXX26 bool test() { { typedef MoveOnly T; typedef std::forward_list C; @@ -85,5 +85,14 @@ int main(int, char**) { assert(std::distance(c.begin(), c.end()) == 4); } + return true; +} + +int main(int, char**) { + assert(test()); +#if TEST_STD_VER >= 26 + static_assert(test()); +#endif + return 0; } diff --git a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/insert_after_size_value.pass.cpp b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/insert_after_size_value.pass.cpp index 2506f04311e0e..f4f0521ad2371 100644 --- a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/insert_after_size_value.pass.cpp +++ b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/insert_after_size_value.pass.cpp @@ -8,7 +8,7 @@ // -// iterator insert_after(const_iterator p, size_type n, const value_type& v); +// iterator insert_after(const_iterator p, size_type n, const value_type& v); // constexpr since C++26 #include #include @@ -16,7 +16,7 @@ #include "test_macros.h" #include "min_allocator.h" -int main(int, char**) { +TEST_CONSTEXPR_CXX26 bool test() { { typedef int T; typedef std::forward_list C; @@ -70,5 +70,14 @@ int main(int, char**) { } #endif + return true; +} + +int main(int, char**) { + assert(test()); +#if TEST_STD_VER >= 26 + static_assert(test()); +#endif + return 0; } diff --git a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/insert_range_after.pass.cpp b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/insert_range_after.pass.cpp index 25f4c43f38486..71a291430b435 100644 --- a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/insert_range_after.pass.cpp +++ b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/insert_range_after.pass.cpp @@ -8,8 +8,10 @@ // UNSUPPORTED: c++03, c++11, c++14, c++17, c++20 +// ADDITIONAL_COMPILE_FLAGS(has-fconstexpr-steps): -fconstexpr-steps=20000000 + // template R> -// constexpr iterator insert_range_after(const_iterator position, R&& rg); // C++23 +// constexpr iterator insert_range_after(const_iterator position, R&& rg); // C++23; constexpr since C++26 #include @@ -321,7 +323,7 @@ constexpr void test_sequence_insert_range_after() { } } -void test_sequence_insert_range_after_move_only() { +TEST_CONSTEXPR_CXX26 void test_sequence_insert_range_after_move_only() { MoveOnly input[5]; std::ranges::subrange in(std::move_iterator{input}, std::move_iterator{input + 5}); @@ -366,7 +368,7 @@ void test_insert_range_after_exception_safety_throwing_allocator() { #endif } -int main(int, char**) { +TEST_CONSTEXPR_CXX26 bool test() { static_assert(test_constraints_insert_range_after()); for_all_iterators_and_allocators([]() { @@ -374,8 +376,19 @@ int main(int, char**) { }); test_sequence_insert_range_after_move_only(); - test_insert_range_after_exception_safety_throwing_copy(); - test_insert_range_after_exception_safety_throwing_allocator(); + if (!TEST_IS_CONSTANT_EVALUATED) { + test_insert_range_after_exception_safety_throwing_copy(); + test_insert_range_after_exception_safety_throwing_allocator(); + } + + return true; +} + +int main(int, char**) { + assert(test()); +#if TEST_STD_VER >= 26 + static_assert(test()); +#endif return 0; } diff --git a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/pop_front.pass.cpp b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/pop_front.pass.cpp index 98c7a26341179..9fcade7ff6bba 100644 --- a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/pop_front.pass.cpp +++ b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/pop_front.pass.cpp @@ -8,7 +8,7 @@ // -// void pop_front(); +// void pop_front(); // constexpr since C++26 #include #include @@ -17,7 +17,7 @@ #include "MoveOnly.h" #include "min_allocator.h" -int main(int, char**) { +TEST_CONSTEXPR_CXX26 bool test() { { typedef int T; typedef std::forward_list C; @@ -71,5 +71,14 @@ int main(int, char**) { } #endif + return true; +} + +int main(int, char**) { + assert(test()); +#if TEST_STD_VER >= 26 + static_assert(test()); +#endif + return 0; } diff --git a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/prepend_range.pass.cpp b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/prepend_range.pass.cpp index 418aa72052ba9..c4b9cd9bdfc41 100644 --- a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/prepend_range.pass.cpp +++ b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/prepend_range.pass.cpp @@ -9,7 +9,7 @@ // UNSUPPORTED: c++03, c++11, c++14, c++17, c++20 // template R> -// constexpr void prepend_range(R&& rg); // C++23 +// constexpr void prepend_range(R&& rg); // C++23; constexpr since C++26 #include @@ -21,7 +21,7 @@ // {empty/one-element/full} container); // - prepending move-only elements; // - an exception is thrown when copying the elements or when allocating new elements. -int main(int, char**) { +TEST_CONSTEXPR_CXX26 bool test() { static_assert(test_constraints_prepend_range()); for_all_iterators_and_allocators([]() { @@ -31,8 +31,19 @@ int main(int, char**) { }); test_sequence_prepend_range_move_only(); - test_prepend_range_exception_safety_throwing_copy(); - test_prepend_range_exception_safety_throwing_allocator(); + if (!TEST_IS_CONSTANT_EVALUATED) { + test_prepend_range_exception_safety_throwing_copy(); + test_prepend_range_exception_safety_throwing_allocator(); + } + + return true; +} + +int main(int, char**) { + assert(test()); +#if TEST_STD_VER >= 26 + static_assert(test()); +#endif return 0; } diff --git a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/push_front_const.pass.cpp b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/push_front_const.pass.cpp index f99c40fa0c1a0..61c5dcac0545e 100644 --- a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/push_front_const.pass.cpp +++ b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/push_front_const.pass.cpp @@ -8,7 +8,7 @@ // -// void push_front(const value_type& v); +// void push_front(const value_type& v); // constexpr since C++26 #include #include @@ -16,7 +16,7 @@ #include "test_macros.h" #include "min_allocator.h" -int main(int, char**) { +TEST_CONSTEXPR_CXX26 bool test() { { typedef int T; typedef std::forward_list C; @@ -44,5 +44,14 @@ int main(int, char**) { } #endif + return true; +} + +int main(int, char**) { + assert(test()); +#if TEST_STD_VER >= 26 + static_assert(test()); +#endif + return 0; } diff --git a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/push_front_exception_safety.pass.cpp b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/push_front_exception_safety.pass.cpp index 467037465eedd..cd24d6ff6af06 100644 --- a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/push_front_exception_safety.pass.cpp +++ b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/push_front_exception_safety.pass.cpp @@ -9,7 +9,7 @@ // UNSUPPORTED: no-exceptions // -// void push_front(const value_type& x); +// void push_front(const value_type& x); // constexpr since C++26 #include #include diff --git a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/push_front_rv.pass.cpp b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/push_front_rv.pass.cpp index d3156c5fdd38a..b30ff7a0189e2 100644 --- a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/push_front_rv.pass.cpp +++ b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/push_front_rv.pass.cpp @@ -10,7 +10,7 @@ // -// void push_front(value_type&& v); +// void push_front(value_type&& v); // constexpr since C++26 #include #include @@ -19,7 +19,7 @@ #include "MoveOnly.h" #include "min_allocator.h" -int main(int, char**) { +TEST_CONSTEXPR_CXX26 bool test() { { typedef MoveOnly T; typedef std::forward_list C; @@ -45,5 +45,14 @@ int main(int, char**) { assert(std::distance(c.begin(), c.end()) == 2); } + return true; +} + +int main(int, char**) { + assert(test()); +#if TEST_STD_VER >= 26 + static_assert(test()); +#endif + return 0; } diff --git a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/resize_size.pass.cpp b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/resize_size.pass.cpp index 2dacf458d7d9d..f80886113bf25 100644 --- a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/resize_size.pass.cpp +++ b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/resize_size.pass.cpp @@ -8,7 +8,7 @@ // -// void resize(size_type n); +// void resize(size_type n); // constexpr since C++26 #include #include @@ -18,8 +18,8 @@ #include "DefaultOnly.h" #include "min_allocator.h" -int main(int, char**) { - { +TEST_CONSTEXPR_CXX26 bool test() { + if (!TEST_IS_CONSTANT_EVALUATED) { typedef DefaultOnly T; typedef std::forward_list C; C c; @@ -65,7 +65,7 @@ int main(int, char**) { assert(*std::next(c.begin(), 5) == 0); } #if TEST_STD_VER >= 11 - { + if (!TEST_IS_CONSTANT_EVALUATED) { typedef DefaultOnly T; typedef std::forward_list> C; C c; @@ -112,5 +112,14 @@ int main(int, char**) { } #endif + return true; +} + +int main(int, char**) { + assert(test()); +#if TEST_STD_VER >= 26 + static_assert(test()); +#endif + return 0; } diff --git a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/resize_size_value.pass.cpp b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/resize_size_value.pass.cpp index a6af763e6937f..4ec859b36336d 100644 --- a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/resize_size_value.pass.cpp +++ b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/resize_size_value.pass.cpp @@ -8,7 +8,7 @@ // -// void resize(size_type n, const value_type& v); +// void resize(size_type n, const value_type& v); // constexpr since C++26 #include #include @@ -22,7 +22,7 @@ # include "container_test_types.h" #endif -int main(int, char**) { +TEST_CONSTEXPR_CXX26 bool test() { { typedef int T; typedef std::forward_list C; @@ -84,7 +84,7 @@ int main(int, char**) { assert(*std::next(c.begin(), 4) == 10); assert(*std::next(c.begin(), 5) == 10); } - { + if (!TEST_IS_CONSTANT_EVALUATED) { // Test that the allocator's construct method is being used to // construct the new elements and that it's called exactly N times. typedef std::forward_list> Container; @@ -99,5 +99,14 @@ int main(int, char**) { } #endif + return true; +} + +int main(int, char**) { + assert(test()); +#if TEST_STD_VER >= 26 + static_assert(test()); +#endif + return 0; } diff --git a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.ops/merge_lvalue.pass.cpp b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.ops/merge_lvalue.pass.cpp index 9a162789569d3..d8e80c56bf392 100644 --- a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.ops/merge_lvalue.pass.cpp +++ b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.ops/merge_lvalue.pass.cpp @@ -8,7 +8,7 @@ // -// void merge(forward_list& x); +// void merge(forward_list& x); // constexpr since C++26 #include #include @@ -30,11 +30,11 @@ struct value { int a; int b; - friend bool operator<(const value& lhs, const value& rhs) { return lhs.a < rhs.a; } - friend bool operator==(const value& lhs, const value& rhs) { return lhs.a == rhs.a && lhs.b == rhs.b; } + friend TEST_CONSTEXPR bool operator<(const value& lhs, const value& rhs) { return lhs.a < rhs.a; } + friend TEST_CONSTEXPR bool operator==(const value& lhs, const value& rhs) { return lhs.a == rhs.a && lhs.b == rhs.b; } }; -int main(int, char**) { +TEST_CONSTEXPR_CXX26 bool test() { { // Basic merge operation. typedef int T; typedef std::forward_list C; @@ -116,5 +116,14 @@ int main(int, char**) { assert(c == std::forward_list(std::begin(a), std::end(a))); } + return true; +} + +int main(int, char**) { + assert(test()); +#if TEST_STD_VER >= 26 + static_assert(test()); +#endif + return 0; } diff --git a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.ops/merge_lvalue_pred.pass.cpp b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.ops/merge_lvalue_pred.pass.cpp index 4e1814044808c..0adadb2dd092f 100644 --- a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.ops/merge_lvalue_pred.pass.cpp +++ b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.ops/merge_lvalue_pred.pass.cpp @@ -8,7 +8,7 @@ // -// template void merge(forward_list& x, Compare comp); +// template void merge(forward_list& x, Compare comp); // constexpr since C++26 #include #include @@ -30,11 +30,11 @@ struct value { int a; int b; - friend bool operator>(const value& lhs, const value& rhs) { return lhs.a > rhs.a; } - friend bool operator==(const value& lhs, const value& rhs) { return lhs.a == rhs.a && lhs.b == rhs.b; } + friend TEST_CONSTEXPR bool operator>(const value& lhs, const value& rhs) { return lhs.a > rhs.a; } + friend TEST_CONSTEXPR bool operator==(const value& lhs, const value& rhs) { return lhs.a == rhs.a && lhs.b == rhs.b; } }; -int main(int, char**) { +TEST_CONSTEXPR_CXX26 bool test() { { // Basic merge operation. typedef int T; typedef std::forward_list C; @@ -117,5 +117,14 @@ int main(int, char**) { assert(c == std::forward_list(std::begin(a), std::end(a))); } + return true; +} + +int main(int, char**) { + assert(test()); +#if TEST_STD_VER >= 26 + static_assert(test()); +#endif + return 0; } diff --git a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.ops/merge_rvalue.pass.cpp b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.ops/merge_rvalue.pass.cpp index acfa014fe2546..906748ec2702b 100644 --- a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.ops/merge_rvalue.pass.cpp +++ b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.ops/merge_rvalue.pass.cpp @@ -10,7 +10,7 @@ // -// void merge(forward_list&& x); +// void merge(forward_list&& x); // constexpr since C++26 #include #include @@ -29,11 +29,11 @@ struct value { int a; int b; - friend bool operator<(const value& lhs, const value& rhs) { return lhs.a < rhs.a; } - friend bool operator==(const value& lhs, const value& rhs) { return lhs.a == rhs.a && lhs.b == rhs.b; } + friend TEST_CONSTEXPR bool operator<(const value& lhs, const value& rhs) { return lhs.a < rhs.a; } + friend TEST_CONSTEXPR bool operator==(const value& lhs, const value& rhs) { return lhs.a == rhs.a && lhs.b == rhs.b; } }; -int main(int, char**) { +TEST_CONSTEXPR_CXX26 bool test() { { // Basic merge operation. typedef int T; typedef std::forward_list C; @@ -109,5 +109,14 @@ int main(int, char**) { assert(c == std::forward_list(std::begin(a), std::end(a))); } + return true; +} + +int main(int, char**) { + assert(test()); +#if TEST_STD_VER >= 26 + static_assert(test()); +#endif + return 0; } diff --git a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.ops/merge_rvalue_pred.pass.cpp b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.ops/merge_rvalue_pred.pass.cpp index 41b56ce7a2884..2ced0b1596e4d 100644 --- a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.ops/merge_rvalue_pred.pass.cpp +++ b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.ops/merge_rvalue_pred.pass.cpp @@ -10,7 +10,7 @@ // -// template void merge(forward_list&& x, Compare comp); +// template void merge(forward_list&& x, Compare comp); // constexpr since C++26 #include #include @@ -29,11 +29,11 @@ struct value { int a; int b; - friend bool operator>(const value& lhs, const value& rhs) { return lhs.a > rhs.a; } - friend bool operator==(const value& lhs, const value& rhs) { return lhs.a == rhs.a && lhs.b == rhs.b; } + friend TEST_CONSTEXPR bool operator>(const value& lhs, const value& rhs) { return lhs.a > rhs.a; } + friend TEST_CONSTEXPR bool operator==(const value& lhs, const value& rhs) { return lhs.a == rhs.a && lhs.b == rhs.b; } }; -int main(int, char**) { +TEST_CONSTEXPR_CXX26 bool test() { { // Basic merge operation. typedef int T; typedef std::forward_list C; @@ -110,5 +110,14 @@ int main(int, char**) { assert(c == std::forward_list(std::begin(a), std::end(a))); } + return true; +} + +int main(int, char**) { + assert(test()); +#if TEST_STD_VER >= 26 + static_assert(test()); +#endif + return 0; } diff --git a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.ops/remove.pass.cpp b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.ops/remove.pass.cpp index ec3bf845dcc5a..b17708ba60ee6 100644 --- a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.ops/remove.pass.cpp +++ b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.ops/remove.pass.cpp @@ -9,7 +9,7 @@ // // void remove(const value_type& v); // C++17 and before -// size_type remove(const value_type& v); // C++20 and after +// size_type remove(const value_type& v); // C++20 and after; // constexpr since C++26 #include #include @@ -19,7 +19,7 @@ #include "min_allocator.h" template -void do_remove(L& l, const typename L::value_type& value, typename L::size_type expected) { +TEST_CONSTEXPR_CXX26 void do_remove(L& l, const typename L::value_type& value, typename L::size_type expected) { typename L::size_type old_size = std::distance(l.begin(), l.end()); #if TEST_STD_VER > 17 ASSERT_SAME_TYPE(decltype(l.remove(value)), typename L::size_type); @@ -32,22 +32,22 @@ void do_remove(L& l, const typename L::value_type& value, typename L::size_type } struct S { - S(int i) : i_(new int(i)) {} - S(const S& rhs) : i_(new int(*rhs.i_)) {} - S& operator=(const S& rhs) { + TEST_CONSTEXPR_CXX20 S(int i) : i_(new int(i)) {} + TEST_CONSTEXPR_CXX20 S(const S& rhs) : i_(new int(*rhs.i_)) {} + TEST_CONSTEXPR_CXX20 S& operator=(const S& rhs) { *i_ = *rhs.i_; return *this; } - ~S() { + TEST_CONSTEXPR_CXX20 ~S() { delete i_; i_ = NULL; } - bool operator==(const S& rhs) const { return *i_ == *rhs.i_; } - int get() const { return *i_; } + TEST_CONSTEXPR bool operator==(const S& rhs) const { return *i_ == *rhs.i_; } + TEST_CONSTEXPR int get() const { return *i_; } int* i_; }; -int main(int, char**) { +TEST_CONSTEXPR_CXX26 bool test() { { typedef int T; typedef std::forward_list C; @@ -171,5 +171,14 @@ int main(int, char**) { } #endif + return true; +} + +int main(int, char**) { + assert(test()); +#if TEST_STD_VER >= 26 + static_assert(test()); +#endif + return 0; } diff --git a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.ops/remove_if.pass.cpp b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.ops/remove_if.pass.cpp index c6325baea2590..f26205d03f645 100644 --- a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.ops/remove_if.pass.cpp +++ b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.ops/remove_if.pass.cpp @@ -9,7 +9,7 @@ // // template void remove_if(Predicate pred); // C++17 and before -// template size_type remove_if(Predicate pred); // C++20 and after +// template size_type remove_if(Predicate pred); // C++20 and after; constexpr since C++26 #include #include @@ -22,7 +22,7 @@ #include "counting_predicates.h" template -void do_remove_if(L& l, Predicate pred, typename L::size_type expected) { +TEST_CONSTEXPR_CXX26 void do_remove_if(L& l, Predicate pred, typename L::size_type expected) { typename L::size_type old_size = std::distance(l.begin(), l.end()); #if TEST_STD_VER > 17 ASSERT_SAME_TYPE(decltype(l.remove_if(pred)), typename L::size_type); @@ -34,18 +34,18 @@ void do_remove_if(L& l, Predicate pred, typename L::size_type expected) { assert(old_size - std::distance(l.begin(), l.end()) == expected); } -bool g(int i) { return i < 3; } +TEST_CONSTEXPR bool g(int i) { return i < 3; } struct PredLWG526 { - PredLWG526(int i) : i_(i) {} - ~PredLWG526() { i_ = -32767; } - bool operator()(const PredLWG526& p) const { return p.i_ == i_; } + TEST_CONSTEXPR_CXX20 PredLWG526(int i) : i_(i) {} + TEST_CONSTEXPR_CXX20 ~PredLWG526() { i_ = -32767; } + TEST_CONSTEXPR bool operator()(const PredLWG526& p) const { return p.i_ == i_; } - bool operator==(int i) const { return i == i_; } + TEST_CONSTEXPR bool operator==(int i) const { return i == i_; } int i_; }; -int main(int, char**) { +TEST_CONSTEXPR_CXX26 bool test() { { typedef int T; typedef unary_counting_predicate Predicate; @@ -187,5 +187,14 @@ int main(int, char**) { } #endif + return true; +} + +int main(int, char**) { + assert(test()); +#if TEST_STD_VER >= 26 + static_assert(test()); +#endif + return 0; } diff --git a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.ops/reverse.pass.cpp b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.ops/reverse.pass.cpp index 0d0656897f34e..38f0e74f66323 100644 --- a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.ops/reverse.pass.cpp +++ b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.ops/reverse.pass.cpp @@ -8,7 +8,7 @@ // -// void reverse(); +// void reverse(); // constexpr since C++26 #include #include @@ -19,7 +19,7 @@ #include "min_allocator.h" template -void test(int N) { +TEST_CONSTEXPR_CXX26 void test1(int N) { C c; for (int i = 0; i < N; ++i) c.push_front(i); @@ -30,12 +30,21 @@ void test(int N) { assert(*j == i); } -int main(int, char**) { +TEST_CONSTEXPR_CXX26 bool test() { for (int i = 0; i < 10; ++i) - test >(i); + test1 >(i); #if TEST_STD_VER >= 11 for (int i = 0; i < 10; ++i) - test> >(i); + test1> >(i); +#endif + + return true; +} + +int main(int, char**) { + assert(test()); +#if TEST_STD_VER >= 26 + static_assert(test()); #endif return 0; diff --git a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.ops/splice_after_flist.pass.cpp b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.ops/splice_after_flist.pass.cpp index 4c91d7397adf0..f8787d70784d1 100644 --- a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.ops/splice_after_flist.pass.cpp +++ b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.ops/splice_after_flist.pass.cpp @@ -8,7 +8,7 @@ // -// void splice_after(const_iterator p, forward_list&& x); +// void splice_after(const_iterator p, forward_list&& x); // constexpr since C++26 #include #include @@ -19,13 +19,13 @@ #include "min_allocator.h" typedef int T; -const T t1[] = {0, 1, 2, 3, 4, 5, 6, 7}; -const T t2[] = {10, 11, 12, 13, 14, 15}; -const std::ptrdiff_t size_t1 = std::end(t1) - std::begin(t1); -const std::ptrdiff_t size_t2 = std::end(t2) - std::begin(t2); +TEST_CONSTEXPR const T t1[] = {0, 1, 2, 3, 4, 5, 6, 7}; +TEST_CONSTEXPR const T t2[] = {10, 11, 12, 13, 14, 15}; +TEST_CONSTEXPR const std::ptrdiff_t size_t1 = std::end(t1) - std::begin(t1); +TEST_CONSTEXPR const std::ptrdiff_t size_t2 = std::end(t2) - std::begin(t2); template -void testd(const C& c, int p, int l) { +TEST_CONSTEXPR_CXX26 void testd(const C& c, int p, int l) { typename C::const_iterator i = c.begin(); int n1 = 0; for (; n1 < p; ++n1, ++i) @@ -37,7 +37,7 @@ void testd(const C& c, int p, int l) { assert(std::distance(c.begin(), c.end()) == size_t1 + l); } -int main(int, char**) { +TEST_CONSTEXPR_CXX26 bool test() { { // splicing different containers typedef std::forward_list C; @@ -67,5 +67,14 @@ int main(int, char**) { } #endif + return true; +} + +int main(int, char**) { + assert(test()); +#if TEST_STD_VER >= 26 + static_assert(test()); +#endif + return 0; } diff --git a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.ops/splice_after_one.pass.cpp b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.ops/splice_after_one.pass.cpp index bb8bdea632547..7202b0e153627 100644 --- a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.ops/splice_after_one.pass.cpp +++ b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.ops/splice_after_one.pass.cpp @@ -8,7 +8,7 @@ // -// void splice_after(const_iterator p, forward_list&& x, const_iterator i); +// void splice_after(const_iterator p, forward_list&& x, const_iterator i); // constexpr since C++26 #include #include @@ -19,13 +19,13 @@ #include "min_allocator.h" typedef int T; -const T t1[] = {0, 1, 2, 3, 4, 5, 6, 7}; -const T t2[] = {10, 11, 12}; -const std::ptrdiff_t size_t1 = std::end(t1) - std::begin(t1); -const std::ptrdiff_t size_t2 = std::end(t2) - std::begin(t2); +TEST_CONSTEXPR const T t1[] = {0, 1, 2, 3, 4, 5, 6, 7}; +TEST_CONSTEXPR const T t2[] = {10, 11, 12}; +TEST_CONSTEXPR const std::ptrdiff_t size_t1 = std::end(t1) - std::begin(t1); +TEST_CONSTEXPR const std::ptrdiff_t size_t2 = std::end(t2) - std::begin(t2); template -void testd(const C& c, int p, int f) { +TEST_CONSTEXPR_CXX26 void testd(const C& c, int p, int f) { typename C::const_iterator i = c.begin(); int n1 = 0; for (; n1 < p; ++n1, ++i) @@ -38,7 +38,7 @@ void testd(const C& c, int p, int f) { } template -void tests(const C& c, int p, int f) { +TEST_CONSTEXPR_CXX26 void tests(const C& c, int p, int f) { typename C::const_iterator i = c.begin(); int n = 0; if (p == f || p == f + 1) { @@ -67,7 +67,7 @@ void tests(const C& c, int p, int f) { assert(std::distance(c.begin(), c.end()) == size_t1); } -int main(int, char**) { +TEST_CONSTEXPR_CXX26 bool test() { { // splicing different containers typedef std::forward_list C; @@ -117,5 +117,14 @@ int main(int, char**) { } #endif + return true; +} + +int main(int, char**) { + assert(test()); +#if TEST_STD_VER >= 26 + static_assert(test()); +#endif + return 0; } diff --git a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.ops/splice_after_range.pass.cpp b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.ops/splice_after_range.pass.cpp index 99b3ed1c7836b..18da6f12b28da 100644 --- a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.ops/splice_after_range.pass.cpp +++ b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.ops/splice_after_range.pass.cpp @@ -8,8 +8,10 @@ // +// ADDITIONAL_COMPILE_FLAGS(has-fconstexpr-steps): -fconstexpr-steps=3000000 + // void splice_after(const_iterator p, forward_list&& x, -// const_iterator first, const_iterator last); +// const_iterator first, const_iterator last); // constexpr since C++26 #include #include @@ -20,13 +22,13 @@ #include "min_allocator.h" typedef std::ptrdiff_t T; -const T t1[] = {0, 1, 2, 3, 4, 5, 6, 7}; -const T t2[] = {10, 11, 12, 13, 14, 15}; -const std::ptrdiff_t size_t1 = std::end(t1) - std::begin(t1); -const std::ptrdiff_t size_t2 = std::end(t2) - std::begin(t2); +TEST_CONSTEXPR const T t1[] = {0, 1, 2, 3, 4, 5, 6, 7}; +TEST_CONSTEXPR const T t2[] = {10, 11, 12, 13, 14, 15}; +TEST_CONSTEXPR const std::ptrdiff_t size_t1 = std::end(t1) - std::begin(t1); +TEST_CONSTEXPR const std::ptrdiff_t size_t2 = std::end(t2) - std::begin(t2); template -void testd(const C& c, std::ptrdiff_t p, ptrdiff_t f, ptrdiff_t l) { +TEST_CONSTEXPR_CXX26 void testd(const C& c, std::ptrdiff_t p, ptrdiff_t f, ptrdiff_t l) { typename C::const_iterator i = c.begin(); std::ptrdiff_t n1 = 0; for (; n1 < p; ++n1, ++i) @@ -39,7 +41,7 @@ void testd(const C& c, std::ptrdiff_t p, ptrdiff_t f, ptrdiff_t l) { } template -void tests(const C& c, std::ptrdiff_t p, ptrdiff_t f, ptrdiff_t l) { +TEST_CONSTEXPR_CXX26 void tests(const C& c, std::ptrdiff_t p, ptrdiff_t f, ptrdiff_t l) { typename C::const_iterator i = c.begin(); std::ptrdiff_t n = 0; std::ptrdiff_t d = l > f + 1 ? l - 1 - f : 0; @@ -69,7 +71,7 @@ void tests(const C& c, std::ptrdiff_t p, ptrdiff_t f, ptrdiff_t l) { assert(std::distance(c.begin(), c.end()) == size_t1); } -int main(int, char**) { +TEST_CONSTEXPR_CXX26 bool test() { { // splicing different containers typedef std::forward_list C; @@ -157,5 +159,14 @@ int main(int, char**) { } #endif + return true; +} + +int main(int, char**) { + assert(test()); +#if TEST_STD_VER >= 26 + static_assert(test()); +#endif + return 0; } diff --git a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.ops/unique.pass.cpp b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.ops/unique.pass.cpp index ebd1a79cdb4bc..28efff3849e68 100644 --- a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.ops/unique.pass.cpp +++ b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.ops/unique.pass.cpp @@ -9,7 +9,7 @@ // // void unique(); // C++17 and before -// size_type unique(); // C++20 and after +// size_type unique(); // C++20 and after; constexpr since C++26 #include #include @@ -19,7 +19,7 @@ #include "min_allocator.h" template -void do_unique(L& l, typename L::size_type expected) { +TEST_CONSTEXPR_CXX26 void do_unique(L& l, typename L::size_type expected) { typename L::size_type old_size = std::distance(l.begin(), l.end()); #if TEST_STD_VER > 17 ASSERT_SAME_TYPE(decltype(l.unique()), typename L::size_type); @@ -31,7 +31,7 @@ void do_unique(L& l, typename L::size_type expected) { assert(old_size - std::distance(l.begin(), l.end()) == expected); } -int main(int, char**) { +TEST_CONSTEXPR_CXX26 bool test() { { typedef int T; typedef std::forward_list C; @@ -131,5 +131,14 @@ int main(int, char**) { } #endif + return true; +} + +int main(int, char**) { + assert(test()); +#if TEST_STD_VER >= 26 + static_assert(test()); +#endif + return 0; } diff --git a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.ops/unique_pred.pass.cpp b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.ops/unique_pred.pass.cpp index 408cbf6ae9c20..f07142dffe9d9 100644 --- a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.ops/unique_pred.pass.cpp +++ b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.ops/unique_pred.pass.cpp @@ -9,7 +9,7 @@ // // template void unique(BinaryPredicate binary_pred); // C++17 and before -// template size_type unique(BinaryPredicate binary_pred); // C++20 and after +// template size_type unique(BinaryPredicate binary_pred); // C++20 and after; constexpr since C++26 #include #include @@ -20,7 +20,7 @@ #include "min_allocator.h" template -void do_unique(L& l, Predicate pred, typename L::size_type expected) { +TEST_CONSTEXPR_CXX26 void do_unique(L& l, Predicate pred, typename L::size_type expected) { typename L::size_type old_size = std::distance(l.begin(), l.end()); #if TEST_STD_VER > 17 ASSERT_SAME_TYPE(decltype(l.unique(pred)), typename L::size_type); @@ -33,17 +33,17 @@ void do_unique(L& l, Predicate pred, typename L::size_type expected) { } struct PredLWG526 { - PredLWG526(int i) : i_(i) {} - ~PredLWG526() { i_ = -32767; } - bool operator()(const PredLWG526& lhs, const PredLWG526& rhs) const { return lhs.i_ == rhs.i_; } + TEST_CONSTEXPR_CXX20 PredLWG526(int i) : i_(i) {} + TEST_CONSTEXPR_CXX20 ~PredLWG526() { i_ = -32767; } + TEST_CONSTEXPR bool operator()(const PredLWG526& lhs, const PredLWG526& rhs) const { return lhs.i_ == rhs.i_; } - bool operator==(int i) const { return i == i_; } + TEST_CONSTEXPR bool operator==(int i) const { return i == i_; } int i_; }; -bool g(int x, int y) { return x == y; } +TEST_CONSTEXPR bool g(int x, int y) { return x == y; } -int main(int, char**) { +TEST_CONSTEXPR_CXX26 bool test() { { typedef int T; typedef std::forward_list C; @@ -157,5 +157,14 @@ int main(int, char**) { } #endif + return true; +} + +int main(int, char**) { + assert(test()); +#if TEST_STD_VER >= 26 + static_assert(test()); +#endif + return 0; } diff --git a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.spec/equal.pass.cpp b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.spec/equal.pass.cpp index ef6b72ee360a9..cb57b094a077d 100644 --- a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.spec/equal.pass.cpp +++ b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.spec/equal.pass.cpp @@ -10,11 +10,11 @@ // template // bool operator==(const forward_list& x, -// const forward_list& y); +// const forward_list& y); // constexpr since C++26 // // template // bool operator!=(const forward_list& x, -// const forward_list& y); +// const forward_list& y); // constexpr since C++26 #include #include @@ -25,7 +25,7 @@ #include "min_allocator.h" template -void test(int N, int M) { +TEST_CONSTEXPR_CXX26 void test(int N, int M) { C c1; for (int i = 0; i < N; ++i) c1.push_front(i); @@ -44,7 +44,7 @@ void test(int N, int M) { } } -int main(int, char**) { +TEST_CONSTEXPR_CXX26 bool test() { for (int i = 0; i < 10; ++i) for (int j = 0; j < 10; ++j) test >(i, j); @@ -54,5 +54,14 @@ int main(int, char**) { test> >(i, j); #endif + return true; +} + +int main(int, char**) { + assert(test()); +#if TEST_STD_VER >= 26 + static_assert(test()); +#endif + return 0; } diff --git a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.spec/member_swap.pass.cpp b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.spec/member_swap.pass.cpp index e50f9e6e9e473..f4f7c6d1f7e53 100644 --- a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.spec/member_swap.pass.cpp +++ b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.spec/member_swap.pass.cpp @@ -8,7 +8,7 @@ // -// void swap(forward_list& x); +// void swap(forward_list& x); // constexpr since C++26 #include #include @@ -18,7 +18,7 @@ #include "test_allocator.h" #include "min_allocator.h" -int main(int, char**) { +TEST_CONSTEXPR_CXX26 bool test() { { typedef int T; typedef test_allocator A; @@ -257,5 +257,14 @@ int main(int, char**) { } #endif + return true; +} + +int main(int, char**) { + assert(test()); +#if TEST_STD_VER >= 26 + static_assert(test()); +#endif + return 0; } diff --git a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.spec/non_member_swap.pass.cpp b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.spec/non_member_swap.pass.cpp index cae6950436dee..ce25479781547 100644 --- a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.spec/non_member_swap.pass.cpp +++ b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.spec/non_member_swap.pass.cpp @@ -9,7 +9,7 @@ // // template -// void swap(forward_list& x, forward_list& y); +// void swap(forward_list& x, forward_list& y); // constexpr since C++26 #include #include @@ -19,7 +19,7 @@ #include "test_allocator.h" #include "min_allocator.h" -int main(int, char**) { +TEST_CONSTEXPR_CXX26 bool test() { { typedef int T; typedef test_allocator A; @@ -258,5 +258,14 @@ int main(int, char**) { } #endif + return true; +} + +int main(int, char**) { + assert(test()); +#if TEST_STD_VER >= 26 + static_assert(test()); +#endif + return 0; } diff --git a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.spec/relational.pass.cpp b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.spec/relational.pass.cpp index d16acadaeb893..7bf80ca026e8e 100644 --- a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.spec/relational.pass.cpp +++ b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.spec/relational.pass.cpp @@ -10,19 +10,19 @@ // template // bool operator< (const forward_list& x, -// const forward_list& y); +// const forward_list& y); // constexpr since C++26 // // template // bool operator> (const forward_list& x, -// const forward_list& y); +// const forward_list& y); // constexpr since C++26 // // template // bool operator>=(const forward_list& x, -// const forward_list& y); +// const forward_list& y); // constexpr since C++26 // // template // bool operator<=(const forward_list& x, -// const forward_list& y); +// const forward_list& y); // constexpr since C++26 #include #include @@ -33,7 +33,7 @@ #include "min_allocator.h" template -void test(int N, int M) { +TEST_CONSTEXPR_CXX26 void test(int N, int M) { C c1; for (int i = 0; i < N; ++i) c1.push_front(i); @@ -50,7 +50,7 @@ void test(int N, int M) { assert(c1 > c2); } -int main(int, char**) { +TEST_CONSTEXPR_CXX26 bool test() { for (int i = 0; i < 10; ++i) for (int j = 0; j < 10; ++j) test >(i, j); @@ -60,5 +60,14 @@ int main(int, char**) { test> >(i, j); #endif + return true; +} + +int main(int, char**) { + assert(test()); +#if TEST_STD_VER >= 26 + static_assert(test()); +#endif + return 0; } diff --git a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.spec/swap_noexcept.pass.cpp b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.spec/swap_noexcept.pass.cpp index b83ec3c3c1210..1fea0a2ab8eb3 100644 --- a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.spec/swap_noexcept.pass.cpp +++ b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.spec/swap_noexcept.pass.cpp @@ -12,10 +12,10 @@ // void swap(forward_list& c) // noexcept(!allocator_type::propagate_on_container_swap::value || -// __is_nothrow_swappable::value); +// __is_nothrow_swappable::value); // constexpr since C++26 // // In C++17, the standard says that swap shall have: -// noexcept(is_always_equal::value); +// noexcept(is_always_equal::value); // constexpr since C++26 // This tests a conforming extension diff --git a/libcxx/test/std/containers/sequences/forwardlist/get_allocator.pass.cpp b/libcxx/test/std/containers/sequences/forwardlist/get_allocator.pass.cpp index f37f5c2f513bd..624eeb17799c0 100644 --- a/libcxx/test/std/containers/sequences/forwardlist/get_allocator.pass.cpp +++ b/libcxx/test/std/containers/sequences/forwardlist/get_allocator.pass.cpp @@ -10,7 +10,7 @@ // class forward_list -// allocator_type get_allocator() const +// allocator_type get_allocator() const // constexpr since C++26 #include #include @@ -18,7 +18,7 @@ #include "test_allocator.h" #include "test_macros.h" -int main(int, char**) { +TEST_CONSTEXPR_CXX26 bool test() { { std::allocator alloc; const std::forward_list fl(alloc); @@ -30,5 +30,14 @@ int main(int, char**) { assert(fl.get_allocator() == alloc); } + return true; +} + +int main(int, char**) { + assert(test()); +#if TEST_STD_VER >= 26 + static_assert(test()); +#endif + return 0; } diff --git a/libcxx/test/std/containers/sequences/forwardlist/incomplete.pass.cpp b/libcxx/test/std/containers/sequences/forwardlist/incomplete.pass.cpp index b7be03f1062dc..16c6f0b90f96d 100644 --- a/libcxx/test/std/containers/sequences/forwardlist/incomplete.pass.cpp +++ b/libcxx/test/std/containers/sequences/forwardlist/incomplete.pass.cpp @@ -8,9 +8,9 @@ // -// forward_list() -// forward_list::iterator() -// forward_list::const_iterator() +// forward_list() // constexpr since C++26 +// forward_list::iterator() // constexpr since C++26 +// forward_list::const_iterator() // constexpr since C++26 #include #include @@ -33,7 +33,7 @@ struct B { }; #endif -int main(int, char**) { +TEST_CONSTEXPR_CXX26 bool test() { { A a; assert(a.d.empty()); @@ -49,5 +49,14 @@ int main(int, char**) { } #endif + return true; +} + +int main(int, char**) { + assert(test()); +#if TEST_STD_VER >= 26 + static_assert(test()); +#endif + return 0; } diff --git a/libcxx/test/std/containers/sequences/forwardlist/max_size.pass.cpp b/libcxx/test/std/containers/sequences/forwardlist/max_size.pass.cpp index 5ba0d61f104e0..aab53351f00e2 100644 --- a/libcxx/test/std/containers/sequences/forwardlist/max_size.pass.cpp +++ b/libcxx/test/std/containers/sequences/forwardlist/max_size.pass.cpp @@ -8,7 +8,7 @@ // -// size_type max_size() const; +// size_type max_size() const; // constexpr since C++26 #include #include @@ -18,7 +18,7 @@ #include "test_allocator.h" #include "test_macros.h" -int main(int, char**) { +TEST_CONSTEXPR_CXX26 bool test() { { typedef limited_allocator A; typedef std::forward_list C; @@ -42,5 +42,14 @@ int main(int, char**) { assert(c.max_size() <= alloc_max_size(c.get_allocator())); } + return true; +} + +int main(int, char**) { + assert(test()); +#if TEST_STD_VER >= 26 + static_assert(test()); +#endif + return 0; } diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/version.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/version.version.compile.pass.cpp index b1cc4afd30696..a8774e6ac76e1 100644 --- a/libcxx/test/std/language.support/support.limits/support.limits.general/version.version.compile.pass.cpp +++ b/libcxx/test/std/language.support/support.limits/support.limits.general/version.version.compile.pass.cpp @@ -13,7 +13,248 @@ // Test the feature test macros defined by +<<<<<<< HEAD // clang-format off +======= +/* Constant Value + __cpp_lib_adaptor_iterator_pair_constructor 202106L [C++23] + __cpp_lib_addressof_constexpr 201603L [C++17] + __cpp_lib_allocate_at_least 202302L [C++23] + __cpp_lib_allocator_traits_is_always_equal 201411L [C++17] + __cpp_lib_any 201606L [C++17] + __cpp_lib_apply 201603L [C++17] + __cpp_lib_array_constexpr 201603L [C++17] + 201811L [C++20] + __cpp_lib_as_const 201510L [C++17] + __cpp_lib_associative_heterogeneous_erasure 202110L [C++23] + __cpp_lib_associative_heterogeneous_insertion 202306L [C++26] + __cpp_lib_assume_aligned 201811L [C++20] + __cpp_lib_atomic_flag_test 201907L [C++20] + __cpp_lib_atomic_float 201711L [C++20] + __cpp_lib_atomic_is_always_lock_free 201603L [C++17] + __cpp_lib_atomic_lock_free_type_aliases 201907L [C++20] + __cpp_lib_atomic_min_max 202403L [C++26] + __cpp_lib_atomic_ref 201806L [C++20] + __cpp_lib_atomic_shared_ptr 201711L [C++20] + __cpp_lib_atomic_value_initialization 201911L [C++20] + __cpp_lib_atomic_wait 201907L [C++20] + __cpp_lib_barrier 201907L [C++20] + __cpp_lib_bind_back 202202L [C++23] + __cpp_lib_bind_front 201907L [C++20] + 202306L [C++26] + __cpp_lib_bit_cast 201806L [C++20] + __cpp_lib_bitops 201907L [C++20] + __cpp_lib_bitset 202306L [C++26] + __cpp_lib_bool_constant 201505L [C++17] + __cpp_lib_bounded_array_traits 201902L [C++20] + __cpp_lib_boyer_moore_searcher 201603L [C++17] + __cpp_lib_byte 201603L [C++17] + __cpp_lib_byteswap 202110L [C++23] + __cpp_lib_char8_t 201907L [C++20] + __cpp_lib_chrono 201611L [C++17] + __cpp_lib_chrono_udls 201304L [C++14] + __cpp_lib_clamp 201603L [C++17] + __cpp_lib_complex_udls 201309L [C++14] + __cpp_lib_concepts 202002L [C++20] + __cpp_lib_constexpr_algorithms 201806L [C++20] + __cpp_lib_constexpr_bitset 202207L [C++23] + __cpp_lib_constexpr_charconv 202207L [C++23] + __cpp_lib_constexpr_cmath 202202L [C++23] + __cpp_lib_constexpr_complex 201711L [C++20] + __cpp_lib_constexpr_dynamic_alloc 201907L [C++20] + __cpp_lib_constexpr_forward_list 202502L [C++26] + __cpp_lib_constexpr_functional 201907L [C++20] + __cpp_lib_constexpr_iterator 201811L [C++20] + __cpp_lib_constexpr_memory 201811L [C++20] + 202202L [C++23] + __cpp_lib_constexpr_new 202406L [C++26] + __cpp_lib_constexpr_numeric 201911L [C++20] + __cpp_lib_constexpr_string 201907L [C++20] + __cpp_lib_constexpr_string_view 201811L [C++20] + __cpp_lib_constexpr_tuple 201811L [C++20] + __cpp_lib_constexpr_typeinfo 202106L [C++23] + __cpp_lib_constexpr_utility 201811L [C++20] + __cpp_lib_constexpr_vector 201907L [C++20] + __cpp_lib_constrained_equality 202403L [C++26] + __cpp_lib_containers_ranges 202202L [C++23] + __cpp_lib_copyable_function 202306L [C++26] + __cpp_lib_coroutine 201902L [C++20] + __cpp_lib_debugging 202311L [C++26] + __cpp_lib_default_template_type_for_algorithm_values 202403L [C++26] + __cpp_lib_destroying_delete 201806L [C++20] + __cpp_lib_enable_shared_from_this 201603L [C++17] + __cpp_lib_endian 201907L [C++20] + __cpp_lib_erase_if 202002L [C++20] + __cpp_lib_exchange_function 201304L [C++14] + __cpp_lib_execution 201603L [C++17] + 201902L [C++20] + __cpp_lib_expected 202211L [C++23] + __cpp_lib_filesystem 201703L [C++17] + __cpp_lib_flat_map 202207L [C++23] + __cpp_lib_flat_set 202207L [C++23] + __cpp_lib_format 202110L [C++20] + __cpp_lib_format_path 202403L [C++26] + __cpp_lib_format_ranges 202207L [C++23] + __cpp_lib_format_uchar 202311L [C++20] + __cpp_lib_formatters 202302L [C++23] + __cpp_lib_forward_like 202207L [C++23] + __cpp_lib_freestanding_algorithm 202311L [C++26] + __cpp_lib_freestanding_array 202311L [C++26] + __cpp_lib_freestanding_cstring 202306L [C++26] + __cpp_lib_freestanding_expected 202311L [C++26] + __cpp_lib_freestanding_mdspan 202311L [C++26] + __cpp_lib_freestanding_optional 202311L [C++26] + __cpp_lib_freestanding_string_view 202311L [C++26] + __cpp_lib_freestanding_variant 202311L [C++26] + __cpp_lib_fstream_native_handle 202306L [C++26] + __cpp_lib_function_ref 202306L [C++26] + __cpp_lib_gcd_lcm 201606L [C++17] + __cpp_lib_generate_random 202403L [C++26] + __cpp_lib_generic_associative_lookup 201304L [C++14] + __cpp_lib_generic_unordered_lookup 201811L [C++20] + __cpp_lib_hardware_interference_size 201703L [C++17] + __cpp_lib_has_unique_object_representations 201606L [C++17] + __cpp_lib_hazard_pointer 202306L [C++26] + __cpp_lib_hypot 201603L [C++17] + __cpp_lib_incomplete_container_elements 201505L [C++17] + __cpp_lib_inplace_vector 202406L [C++26] + __cpp_lib_int_pow2 202002L [C++20] + __cpp_lib_integer_comparison_functions 202002L [C++20] + __cpp_lib_integer_sequence 201304L [C++14] + __cpp_lib_integral_constant_callable 201304L [C++14] + __cpp_lib_interpolate 201902L [C++20] + __cpp_lib_invoke 201411L [C++17] + __cpp_lib_invoke_r 202106L [C++23] + __cpp_lib_ios_noreplace 202207L [C++23] + __cpp_lib_is_aggregate 201703L [C++17] + __cpp_lib_is_constant_evaluated 201811L [C++20] + __cpp_lib_is_final 201402L [C++14] + __cpp_lib_is_implicit_lifetime 202302L [C++23] + __cpp_lib_is_invocable 201703L [C++17] + __cpp_lib_is_layout_compatible 201907L [C++20] + __cpp_lib_is_nothrow_convertible 201806L [C++20] + __cpp_lib_is_null_pointer 201309L [C++14] + __cpp_lib_is_pointer_interconvertible 201907L [C++20] + __cpp_lib_is_scoped_enum 202011L [C++23] + __cpp_lib_is_swappable 201603L [C++17] + __cpp_lib_is_virtual_base_of 202406L [C++26] + __cpp_lib_is_within_lifetime 202306L [C++26] + __cpp_lib_jthread 201911L [C++20] + __cpp_lib_latch 201907L [C++20] + __cpp_lib_launder 201606L [C++17] + __cpp_lib_linalg 202311L [C++26] + __cpp_lib_list_remove_return_type 201806L [C++20] + __cpp_lib_logical_traits 201510L [C++17] + __cpp_lib_make_from_tuple 201606L [C++17] + __cpp_lib_make_reverse_iterator 201402L [C++14] + __cpp_lib_make_unique 201304L [C++14] + __cpp_lib_map_try_emplace 201411L [C++17] + __cpp_lib_math_constants 201907L [C++20] + __cpp_lib_math_special_functions 201603L [C++17] + __cpp_lib_mdspan 202207L [C++23] + 202406L [C++26] + __cpp_lib_memory_resource 201603L [C++17] + __cpp_lib_modules 202207L [C++23] + __cpp_lib_move_iterator_concept 202207L [C++20] + __cpp_lib_move_only_function 202110L [C++23] + __cpp_lib_node_extract 201606L [C++17] + __cpp_lib_nonmember_container_access 201411L [C++17] + __cpp_lib_not_fn 201603L [C++17] + 202306L [C++26] + __cpp_lib_null_iterators 201304L [C++14] + __cpp_lib_optional 201606L [C++17] + 202106L [C++20] + 202110L [C++23] + __cpp_lib_optional_range_support 202406L [C++26] + __cpp_lib_out_ptr 202106L [C++23] + 202311L [C++26] + __cpp_lib_parallel_algorithm 201603L [C++17] + __cpp_lib_philox_engine 202406L [C++26] + __cpp_lib_polymorphic_allocator 201902L [C++20] + __cpp_lib_print 202207L [C++23] + __cpp_lib_quoted_string_io 201304L [C++14] + __cpp_lib_ranges 202110L [C++20] + 202406L [C++23] + __cpp_lib_ranges_as_const 202207L [C++23] + __cpp_lib_ranges_as_rvalue 202207L [C++23] + __cpp_lib_ranges_chunk 202202L [C++23] + __cpp_lib_ranges_chunk_by 202202L [C++23] + __cpp_lib_ranges_concat 202403L [C++26] + __cpp_lib_ranges_contains 202207L [C++23] + __cpp_lib_ranges_find_last 202207L [C++23] + __cpp_lib_ranges_iota 202202L [C++23] + __cpp_lib_ranges_join_with 202202L [C++23] + __cpp_lib_ranges_repeat 202207L [C++23] + __cpp_lib_ranges_slide 202202L [C++23] + __cpp_lib_ranges_starts_ends_with 202106L [C++23] + __cpp_lib_ranges_to_container 202202L [C++23] + __cpp_lib_ranges_zip 202110L [C++23] + __cpp_lib_ratio 202306L [C++26] + __cpp_lib_raw_memory_algorithms 201606L [C++17] + __cpp_lib_rcu 202306L [C++26] + __cpp_lib_reference_from_temporary 202202L [C++23] + __cpp_lib_reference_wrapper 202403L [C++26] + __cpp_lib_remove_cvref 201711L [C++20] + __cpp_lib_result_of_sfinae 201210L [C++14] + __cpp_lib_robust_nonmodifying_seq_ops 201304L [C++14] + __cpp_lib_sample 201603L [C++17] + __cpp_lib_saturation_arithmetic 202311L [C++26] + __cpp_lib_scoped_lock 201703L [C++17] + __cpp_lib_semaphore 201907L [C++20] + __cpp_lib_senders 202406L [C++26] + __cpp_lib_shared_mutex 201505L [C++17] + __cpp_lib_shared_ptr_arrays 201611L [C++17] + 201707L [C++20] + __cpp_lib_shared_ptr_weak_type 201606L [C++17] + __cpp_lib_shared_timed_mutex 201402L [C++14] + __cpp_lib_shift 201806L [C++20] + __cpp_lib_smart_ptr_for_overwrite 202002L [C++20] + __cpp_lib_smart_ptr_owner_equality 202306L [C++26] + __cpp_lib_source_location 201907L [C++20] + __cpp_lib_span 202002L [C++20] + __cpp_lib_span_at 202311L [C++26] + __cpp_lib_span_initializer_list 202311L [C++26] + __cpp_lib_spanstream 202106L [C++23] + __cpp_lib_ssize 201902L [C++20] + __cpp_lib_sstream_from_string_view 202306L [C++26] + __cpp_lib_stacktrace 202011L [C++23] + __cpp_lib_starts_ends_with 201711L [C++20] + __cpp_lib_stdatomic_h 202011L [C++23] + __cpp_lib_string_contains 202011L [C++23] + __cpp_lib_string_resize_and_overwrite 202110L [C++23] + __cpp_lib_string_udls 201304L [C++14] + __cpp_lib_string_view 201606L [C++17] + 201803L [C++20] + 202403L [C++26] + __cpp_lib_submdspan 202306L [C++26] + __cpp_lib_syncbuf 201803L [C++20] + __cpp_lib_text_encoding 202306L [C++26] + __cpp_lib_three_way_comparison 201907L [C++20] + __cpp_lib_to_address 201711L [C++20] + __cpp_lib_to_array 201907L [C++20] + __cpp_lib_to_chars 201611L [C++17] + 202306L [C++26] + __cpp_lib_to_string 202306L [C++26] + __cpp_lib_to_underlying 202102L [C++23] + __cpp_lib_transformation_trait_aliases 201304L [C++14] + __cpp_lib_transparent_operators 201210L [C++14] + 201510L [C++17] + __cpp_lib_tuple_element_t 201402L [C++14] + __cpp_lib_tuple_like 202207L [C++23] + 202311L [C++26] + __cpp_lib_tuples_by_type 201304L [C++14] + __cpp_lib_type_identity 201806L [C++20] + __cpp_lib_type_trait_variable_templates 201510L [C++17] + __cpp_lib_uncaught_exceptions 201411L [C++17] + __cpp_lib_unordered_map_try_emplace 201411L [C++17] + __cpp_lib_unreachable 202202L [C++23] + __cpp_lib_unwrap_ref 201811L [C++20] + __cpp_lib_variant 202102L [C++17] + 202106L [C++20] + 202306L [C++26] + __cpp_lib_void_t 201411L [C++17] +*/ +>>>>>>> 3e1b3b8f0316 (Make forward_list constexpr as part of P3372R3) #include #include "test_macros.h" @@ -192,9 +433,19 @@ # error "__cpp_lib_constexpr_complex should not be defined before c++20" # endif +<<<<<<< HEAD # ifdef __cpp_lib_constexpr_dynamic_alloc # error "__cpp_lib_constexpr_dynamic_alloc should not be defined before c++20" # endif +======= +# ifdef __cpp_lib_constexpr_forward_list +# error "__cpp_lib_constexpr_forward_list should not be defined before c++26" +# endif + +# ifdef __cpp_lib_constexpr_functional +# error "__cpp_lib_constexpr_functional should not be defined before c++20" +# endif +>>>>>>> 3e1b3b8f0316 (Make forward_list constexpr as part of P3372R3) # ifdef __cpp_lib_constexpr_functional # error "__cpp_lib_constexpr_functional should not be defined before c++20" @@ -934,9 +1185,233 @@ # error "__cpp_lib_array_constexpr should not be defined before c++17" # endif +<<<<<<< HEAD # ifdef __cpp_lib_as_const # error "__cpp_lib_as_const should not be defined before c++17" # endif +======= +# ifdef __cpp_lib_associative_heterogeneous_erasure +# error "__cpp_lib_associative_heterogeneous_erasure should not be defined before c++23" +# endif + +# ifdef __cpp_lib_associative_heterogeneous_insertion +# error "__cpp_lib_associative_heterogeneous_insertion should not be defined before c++26" +# endif + +# ifdef __cpp_lib_assume_aligned +# error "__cpp_lib_assume_aligned should not be defined before c++20" +# endif + +# ifdef __cpp_lib_atomic_flag_test +# error "__cpp_lib_atomic_flag_test should not be defined before c++20" +# endif + +# ifdef __cpp_lib_atomic_float +# error "__cpp_lib_atomic_float should not be defined before c++20" +# endif + +# ifdef __cpp_lib_atomic_is_always_lock_free +# error "__cpp_lib_atomic_is_always_lock_free should not be defined before c++17" +# endif + +# ifdef __cpp_lib_atomic_lock_free_type_aliases +# error "__cpp_lib_atomic_lock_free_type_aliases should not be defined before c++20" +# endif + +# ifdef __cpp_lib_atomic_min_max +# error "__cpp_lib_atomic_min_max should not be defined before c++26" +# endif + +# ifdef __cpp_lib_atomic_ref +# error "__cpp_lib_atomic_ref should not be defined before c++20" +# endif + +# ifdef __cpp_lib_atomic_shared_ptr +# error "__cpp_lib_atomic_shared_ptr should not be defined before c++20" +# endif + +# ifdef __cpp_lib_atomic_value_initialization +# error "__cpp_lib_atomic_value_initialization should not be defined before c++20" +# endif + +# ifdef __cpp_lib_atomic_wait +# error "__cpp_lib_atomic_wait should not be defined before c++20" +# endif + +# ifdef __cpp_lib_barrier +# error "__cpp_lib_barrier should not be defined before c++20" +# endif + +# ifdef __cpp_lib_bind_back +# error "__cpp_lib_bind_back should not be defined before c++23" +# endif + +# ifdef __cpp_lib_bind_front +# error "__cpp_lib_bind_front should not be defined before c++20" +# endif + +# ifdef __cpp_lib_bit_cast +# error "__cpp_lib_bit_cast should not be defined before c++20" +# endif + +# ifdef __cpp_lib_bitops +# error "__cpp_lib_bitops should not be defined before c++20" +# endif + +# ifdef __cpp_lib_bitset +# error "__cpp_lib_bitset should not be defined before c++26" +# endif + +# ifdef __cpp_lib_bool_constant +# error "__cpp_lib_bool_constant should not be defined before c++17" +# endif + +# ifdef __cpp_lib_bounded_array_traits +# error "__cpp_lib_bounded_array_traits should not be defined before c++20" +# endif + +# ifdef __cpp_lib_boyer_moore_searcher +# error "__cpp_lib_boyer_moore_searcher should not be defined before c++17" +# endif + +# ifdef __cpp_lib_byte +# error "__cpp_lib_byte should not be defined before c++17" +# endif + +# ifdef __cpp_lib_byteswap +# error "__cpp_lib_byteswap should not be defined before c++23" +# endif + +# ifdef __cpp_lib_char8_t +# error "__cpp_lib_char8_t should not be defined before c++20" +# endif + +# ifdef __cpp_lib_chrono +# error "__cpp_lib_chrono should not be defined before c++17" +# endif + +# ifndef __cpp_lib_chrono_udls +# error "__cpp_lib_chrono_udls should be defined in c++14" +# endif +# if __cpp_lib_chrono_udls != 201304L +# error "__cpp_lib_chrono_udls should have the value 201304L in c++14" +# endif + +# ifdef __cpp_lib_clamp +# error "__cpp_lib_clamp should not be defined before c++17" +# endif + +# ifndef __cpp_lib_complex_udls +# error "__cpp_lib_complex_udls should be defined in c++14" +# endif +# if __cpp_lib_complex_udls != 201309L +# error "__cpp_lib_complex_udls should have the value 201309L in c++14" +# endif + +# ifdef __cpp_lib_concepts +# error "__cpp_lib_concepts should not be defined before c++20" +# endif + +# ifdef __cpp_lib_constexpr_algorithms +# error "__cpp_lib_constexpr_algorithms should not be defined before c++20" +# endif + +# ifdef __cpp_lib_constexpr_bitset +# error "__cpp_lib_constexpr_bitset should not be defined before c++23" +# endif + +# ifdef __cpp_lib_constexpr_charconv +# error "__cpp_lib_constexpr_charconv should not be defined before c++23" +# endif + +# ifdef __cpp_lib_constexpr_cmath +# error "__cpp_lib_constexpr_cmath should not be defined before c++23" +# endif + +# ifdef __cpp_lib_constexpr_complex +# error "__cpp_lib_constexpr_complex should not be defined before c++20" +# endif + +# ifdef __cpp_lib_constexpr_dynamic_alloc +# error "__cpp_lib_constexpr_dynamic_alloc should not be defined before c++20" +# endif + +# ifdef __cpp_lib_constexpr_forward_list +# error "__cpp_lib_constexpr_forward_list should not be defined before c++26" +# endif + +# ifdef __cpp_lib_constexpr_functional +# error "__cpp_lib_constexpr_functional should not be defined before c++20" +# endif + +# ifdef __cpp_lib_constexpr_iterator +# error "__cpp_lib_constexpr_iterator should not be defined before c++20" +# endif + +# ifdef __cpp_lib_constexpr_memory +# error "__cpp_lib_constexpr_memory should not be defined before c++20" +# endif + +# ifdef __cpp_lib_constexpr_new +# error "__cpp_lib_constexpr_new should not be defined before c++26" +# endif + +# ifdef __cpp_lib_constexpr_numeric +# error "__cpp_lib_constexpr_numeric should not be defined before c++20" +# endif + +# ifdef __cpp_lib_constexpr_string +# error "__cpp_lib_constexpr_string should not be defined before c++20" +# endif + +# ifdef __cpp_lib_constexpr_string_view +# error "__cpp_lib_constexpr_string_view should not be defined before c++20" +# endif + +# ifdef __cpp_lib_constexpr_tuple +# error "__cpp_lib_constexpr_tuple should not be defined before c++20" +# endif + +# ifdef __cpp_lib_constexpr_typeinfo +# error "__cpp_lib_constexpr_typeinfo should not be defined before c++23" +# endif + +# ifdef __cpp_lib_constexpr_utility +# error "__cpp_lib_constexpr_utility should not be defined before c++20" +# endif + +# ifdef __cpp_lib_constexpr_vector +# error "__cpp_lib_constexpr_vector should not be defined before c++20" +# endif + +# ifdef __cpp_lib_constrained_equality +# error "__cpp_lib_constrained_equality should not be defined before c++26" +# endif + +# ifdef __cpp_lib_containers_ranges +# error "__cpp_lib_containers_ranges should not be defined before c++23" +# endif + +# ifdef __cpp_lib_copyable_function +# error "__cpp_lib_copyable_function should not be defined before c++26" +# endif + +# ifdef __cpp_lib_coroutine +# error "__cpp_lib_coroutine should not be defined before c++20" +# endif + +# ifdef __cpp_lib_debugging +# error "__cpp_lib_debugging should not be defined before c++26" +# endif + +# ifdef __cpp_lib_default_template_type_for_algorithm_values +# error "__cpp_lib_default_template_type_for_algorithm_values should not be defined before c++26" +# endif + +# ifdef __cpp_lib_destroying_delete +# error "__cpp_lib_destroying_delete should not be defined before c++20" +# endif +>>>>>>> 3e1b3b8f0316 (Make forward_list constexpr as part of P3372R3) # ifdef __cpp_lib_associative_heterogeneous_erasure # error "__cpp_lib_associative_heterogeneous_erasure should not be defined before c++23" @@ -1856,6 +2331,7 @@ #elif TEST_STD_VER == 17 +<<<<<<< HEAD # ifdef __cpp_lib_adaptor_iterator_pair_constructor # error "__cpp_lib_adaptor_iterator_pair_constructor should not be defined before c++23" # endif @@ -8042,6 +8518,6180 @@ # if __cpp_lib_void_t != 201411L # error "__cpp_lib_void_t should have the value 201411L in c++26" # endif +======= +# ifdef __cpp_lib_adaptor_iterator_pair_constructor +# error "__cpp_lib_adaptor_iterator_pair_constructor should not be defined before c++23" +# endif + +# ifndef __cpp_lib_addressof_constexpr +# error "__cpp_lib_addressof_constexpr should be defined in c++17" +# endif +# if __cpp_lib_addressof_constexpr != 201603L +# error "__cpp_lib_addressof_constexpr should have the value 201603L in c++17" +# endif + +# ifdef __cpp_lib_allocate_at_least +# error "__cpp_lib_allocate_at_least should not be defined before c++23" +# endif + +# ifndef __cpp_lib_allocator_traits_is_always_equal +# error "__cpp_lib_allocator_traits_is_always_equal should be defined in c++17" +# endif +# if __cpp_lib_allocator_traits_is_always_equal != 201411L +# error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++17" +# endif + +# ifndef __cpp_lib_any +# error "__cpp_lib_any should be defined in c++17" +# endif +# if __cpp_lib_any != 201606L +# error "__cpp_lib_any should have the value 201606L in c++17" +# endif + +# ifndef __cpp_lib_apply +# error "__cpp_lib_apply should be defined in c++17" +# endif +# if __cpp_lib_apply != 201603L +# error "__cpp_lib_apply should have the value 201603L in c++17" +# endif + +# ifndef __cpp_lib_array_constexpr +# error "__cpp_lib_array_constexpr should be defined in c++17" +# endif +# if __cpp_lib_array_constexpr != 201603L +# error "__cpp_lib_array_constexpr should have the value 201603L in c++17" +# endif + +# ifndef __cpp_lib_as_const +# error "__cpp_lib_as_const should be defined in c++17" +# endif +# if __cpp_lib_as_const != 201510L +# error "__cpp_lib_as_const should have the value 201510L in c++17" +# endif + +# ifdef __cpp_lib_associative_heterogeneous_erasure +# error "__cpp_lib_associative_heterogeneous_erasure should not be defined before c++23" +# endif + +# ifdef __cpp_lib_associative_heterogeneous_insertion +# error "__cpp_lib_associative_heterogeneous_insertion should not be defined before c++26" +# endif + +# ifdef __cpp_lib_assume_aligned +# error "__cpp_lib_assume_aligned should not be defined before c++20" +# endif + +# ifdef __cpp_lib_atomic_flag_test +# error "__cpp_lib_atomic_flag_test should not be defined before c++20" +# endif + +# ifdef __cpp_lib_atomic_float +# error "__cpp_lib_atomic_float should not be defined before c++20" +# endif + +# ifndef __cpp_lib_atomic_is_always_lock_free +# error "__cpp_lib_atomic_is_always_lock_free should be defined in c++17" +# endif +# if __cpp_lib_atomic_is_always_lock_free != 201603L +# error "__cpp_lib_atomic_is_always_lock_free should have the value 201603L in c++17" +# endif + +# ifdef __cpp_lib_atomic_lock_free_type_aliases +# error "__cpp_lib_atomic_lock_free_type_aliases should not be defined before c++20" +# endif + +# ifdef __cpp_lib_atomic_min_max +# error "__cpp_lib_atomic_min_max should not be defined before c++26" +# endif + +# ifdef __cpp_lib_atomic_ref +# error "__cpp_lib_atomic_ref should not be defined before c++20" +# endif + +# ifdef __cpp_lib_atomic_shared_ptr +# error "__cpp_lib_atomic_shared_ptr should not be defined before c++20" +# endif + +# ifdef __cpp_lib_atomic_value_initialization +# error "__cpp_lib_atomic_value_initialization should not be defined before c++20" +# endif + +# ifdef __cpp_lib_atomic_wait +# error "__cpp_lib_atomic_wait should not be defined before c++20" +# endif + +# ifdef __cpp_lib_barrier +# error "__cpp_lib_barrier should not be defined before c++20" +# endif + +# ifdef __cpp_lib_bind_back +# error "__cpp_lib_bind_back should not be defined before c++23" +# endif + +# ifdef __cpp_lib_bind_front +# error "__cpp_lib_bind_front should not be defined before c++20" +# endif + +# ifdef __cpp_lib_bit_cast +# error "__cpp_lib_bit_cast should not be defined before c++20" +# endif + +# ifdef __cpp_lib_bitops +# error "__cpp_lib_bitops should not be defined before c++20" +# endif + +# ifdef __cpp_lib_bitset +# error "__cpp_lib_bitset should not be defined before c++26" +# endif + +# ifndef __cpp_lib_bool_constant +# error "__cpp_lib_bool_constant should be defined in c++17" +# endif +# if __cpp_lib_bool_constant != 201505L +# error "__cpp_lib_bool_constant should have the value 201505L in c++17" +# endif + +# ifdef __cpp_lib_bounded_array_traits +# error "__cpp_lib_bounded_array_traits should not be defined before c++20" +# endif + +# ifndef __cpp_lib_boyer_moore_searcher +# error "__cpp_lib_boyer_moore_searcher should be defined in c++17" +# endif +# if __cpp_lib_boyer_moore_searcher != 201603L +# error "__cpp_lib_boyer_moore_searcher should have the value 201603L in c++17" +# endif + +# ifndef __cpp_lib_byte +# error "__cpp_lib_byte should be defined in c++17" +# endif +# if __cpp_lib_byte != 201603L +# error "__cpp_lib_byte should have the value 201603L in c++17" +# endif + +# ifdef __cpp_lib_byteswap +# error "__cpp_lib_byteswap should not be defined before c++23" +# endif + +# ifdef __cpp_lib_char8_t +# error "__cpp_lib_char8_t should not be defined before c++20" +# endif + +# ifndef __cpp_lib_chrono +# error "__cpp_lib_chrono should be defined in c++17" +# endif +# if __cpp_lib_chrono != 201611L +# error "__cpp_lib_chrono should have the value 201611L in c++17" +# endif + +# ifndef __cpp_lib_chrono_udls +# error "__cpp_lib_chrono_udls should be defined in c++17" +# endif +# if __cpp_lib_chrono_udls != 201304L +# error "__cpp_lib_chrono_udls should have the value 201304L in c++17" +# endif + +# ifndef __cpp_lib_clamp +# error "__cpp_lib_clamp should be defined in c++17" +# endif +# if __cpp_lib_clamp != 201603L +# error "__cpp_lib_clamp should have the value 201603L in c++17" +# endif + +# ifndef __cpp_lib_complex_udls +# error "__cpp_lib_complex_udls should be defined in c++17" +# endif +# if __cpp_lib_complex_udls != 201309L +# error "__cpp_lib_complex_udls should have the value 201309L in c++17" +# endif + +# ifdef __cpp_lib_concepts +# error "__cpp_lib_concepts should not be defined before c++20" +# endif + +# ifdef __cpp_lib_constexpr_algorithms +# error "__cpp_lib_constexpr_algorithms should not be defined before c++20" +# endif + +# ifdef __cpp_lib_constexpr_bitset +# error "__cpp_lib_constexpr_bitset should not be defined before c++23" +# endif + +# ifdef __cpp_lib_constexpr_charconv +# error "__cpp_lib_constexpr_charconv should not be defined before c++23" +# endif + +# ifdef __cpp_lib_constexpr_cmath +# error "__cpp_lib_constexpr_cmath should not be defined before c++23" +# endif + +# ifdef __cpp_lib_constexpr_complex +# error "__cpp_lib_constexpr_complex should not be defined before c++20" +# endif + +# ifdef __cpp_lib_constexpr_dynamic_alloc +# error "__cpp_lib_constexpr_dynamic_alloc should not be defined before c++20" +# endif + +# ifdef __cpp_lib_constexpr_forward_list +# error "__cpp_lib_constexpr_forward_list should not be defined before c++26" +# endif + +# ifdef __cpp_lib_constexpr_functional +# error "__cpp_lib_constexpr_functional should not be defined before c++20" +# endif + +# ifdef __cpp_lib_constexpr_iterator +# error "__cpp_lib_constexpr_iterator should not be defined before c++20" +# endif + +# ifdef __cpp_lib_constexpr_memory +# error "__cpp_lib_constexpr_memory should not be defined before c++20" +# endif + +# ifdef __cpp_lib_constexpr_new +# error "__cpp_lib_constexpr_new should not be defined before c++26" +# endif + +# ifdef __cpp_lib_constexpr_numeric +# error "__cpp_lib_constexpr_numeric should not be defined before c++20" +# endif + +# ifdef __cpp_lib_constexpr_string +# error "__cpp_lib_constexpr_string should not be defined before c++20" +# endif + +# ifdef __cpp_lib_constexpr_string_view +# error "__cpp_lib_constexpr_string_view should not be defined before c++20" +# endif + +# ifdef __cpp_lib_constexpr_tuple +# error "__cpp_lib_constexpr_tuple should not be defined before c++20" +# endif + +# ifdef __cpp_lib_constexpr_typeinfo +# error "__cpp_lib_constexpr_typeinfo should not be defined before c++23" +# endif + +# ifdef __cpp_lib_constexpr_utility +# error "__cpp_lib_constexpr_utility should not be defined before c++20" +# endif + +# ifdef __cpp_lib_constexpr_vector +# error "__cpp_lib_constexpr_vector should not be defined before c++20" +# endif + +# ifdef __cpp_lib_constrained_equality +# error "__cpp_lib_constrained_equality should not be defined before c++26" +# endif + +# ifdef __cpp_lib_containers_ranges +# error "__cpp_lib_containers_ranges should not be defined before c++23" +# endif + +# ifdef __cpp_lib_copyable_function +# error "__cpp_lib_copyable_function should not be defined before c++26" +# endif + +# ifdef __cpp_lib_coroutine +# error "__cpp_lib_coroutine should not be defined before c++20" +# endif + +# ifdef __cpp_lib_debugging +# error "__cpp_lib_debugging should not be defined before c++26" +# endif + +# ifdef __cpp_lib_default_template_type_for_algorithm_values +# error "__cpp_lib_default_template_type_for_algorithm_values should not be defined before c++26" +# endif + +# ifdef __cpp_lib_destroying_delete +# error "__cpp_lib_destroying_delete should not be defined before c++20" +# endif + +# ifndef __cpp_lib_enable_shared_from_this +# error "__cpp_lib_enable_shared_from_this should be defined in c++17" +# endif +# if __cpp_lib_enable_shared_from_this != 201603L +# error "__cpp_lib_enable_shared_from_this should have the value 201603L in c++17" +# endif + +# ifdef __cpp_lib_endian +# error "__cpp_lib_endian should not be defined before c++20" +# endif + +# ifdef __cpp_lib_erase_if +# error "__cpp_lib_erase_if should not be defined before c++20" +# endif + +# ifndef __cpp_lib_exchange_function +# error "__cpp_lib_exchange_function should be defined in c++17" +# endif +# if __cpp_lib_exchange_function != 201304L +# error "__cpp_lib_exchange_function should have the value 201304L in c++17" +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_execution +# error "__cpp_lib_execution should be defined in c++17" +# endif +# if __cpp_lib_execution != 201603L +# error "__cpp_lib_execution should have the value 201603L in c++17" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_execution +# error "__cpp_lib_execution should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# ifdef __cpp_lib_expected +# error "__cpp_lib_expected should not be defined before c++23" +# endif + +# if !defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_FILESYSTEM && _LIBCPP_AVAILABILITY_HAS_FILESYSTEM_LIBRARY) +# ifndef __cpp_lib_filesystem +# error "__cpp_lib_filesystem should be defined in c++17" +# endif +# if __cpp_lib_filesystem != 201703L +# error "__cpp_lib_filesystem should have the value 201703L in c++17" +# endif +# else +# ifdef __cpp_lib_filesystem +# error "__cpp_lib_filesystem should not be defined when the requirement '!defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_FILESYSTEM && _LIBCPP_AVAILABILITY_HAS_FILESYSTEM_LIBRARY)' is not met!" +# endif +# endif + +# ifdef __cpp_lib_flat_map +# error "__cpp_lib_flat_map should not be defined before c++23" +# endif + +# ifdef __cpp_lib_flat_set +# error "__cpp_lib_flat_set should not be defined before c++23" +# endif + +# ifdef __cpp_lib_format +# error "__cpp_lib_format should not be defined before c++20" +# endif + +# ifdef __cpp_lib_format_path +# error "__cpp_lib_format_path should not be defined before c++26" +# endif + +# ifdef __cpp_lib_format_ranges +# error "__cpp_lib_format_ranges should not be defined before c++23" +# endif + +# ifdef __cpp_lib_format_uchar +# error "__cpp_lib_format_uchar should not be defined before c++20" +# endif + +# ifdef __cpp_lib_formatters +# error "__cpp_lib_formatters should not be defined before c++23" +# endif + +# ifdef __cpp_lib_forward_like +# error "__cpp_lib_forward_like should not be defined before c++23" +# endif + +# ifdef __cpp_lib_freestanding_algorithm +# error "__cpp_lib_freestanding_algorithm should not be defined before c++26" +# endif + +# ifdef __cpp_lib_freestanding_array +# error "__cpp_lib_freestanding_array should not be defined before c++26" +# endif + +# ifdef __cpp_lib_freestanding_cstring +# error "__cpp_lib_freestanding_cstring should not be defined before c++26" +# endif + +# ifdef __cpp_lib_freestanding_expected +# error "__cpp_lib_freestanding_expected should not be defined before c++26" +# endif + +# ifdef __cpp_lib_freestanding_mdspan +# error "__cpp_lib_freestanding_mdspan should not be defined before c++26" +# endif + +# ifdef __cpp_lib_freestanding_optional +# error "__cpp_lib_freestanding_optional should not be defined before c++26" +# endif + +# ifdef __cpp_lib_freestanding_string_view +# error "__cpp_lib_freestanding_string_view should not be defined before c++26" +# endif + +# ifdef __cpp_lib_freestanding_variant +# error "__cpp_lib_freestanding_variant should not be defined before c++26" +# endif + +# ifdef __cpp_lib_fstream_native_handle +# error "__cpp_lib_fstream_native_handle should not be defined before c++26" +# endif + +# ifdef __cpp_lib_function_ref +# error "__cpp_lib_function_ref should not be defined before c++26" +# endif + +# ifndef __cpp_lib_gcd_lcm +# error "__cpp_lib_gcd_lcm should be defined in c++17" +# endif +# if __cpp_lib_gcd_lcm != 201606L +# error "__cpp_lib_gcd_lcm should have the value 201606L in c++17" +# endif + +# ifdef __cpp_lib_generate_random +# error "__cpp_lib_generate_random should not be defined before c++26" +# endif + +# ifndef __cpp_lib_generic_associative_lookup +# error "__cpp_lib_generic_associative_lookup should be defined in c++17" +# endif +# if __cpp_lib_generic_associative_lookup != 201304L +# error "__cpp_lib_generic_associative_lookup should have the value 201304L in c++17" +# endif + +# ifdef __cpp_lib_generic_unordered_lookup +# error "__cpp_lib_generic_unordered_lookup should not be defined before c++20" +# endif + +# if !defined(_LIBCPP_VERSION) || (defined(__GCC_DESTRUCTIVE_SIZE) && defined(__GCC_CONSTRUCTIVE_SIZE)) +# ifndef __cpp_lib_hardware_interference_size +# error "__cpp_lib_hardware_interference_size should be defined in c++17" +# endif +# if __cpp_lib_hardware_interference_size != 201703L +# error "__cpp_lib_hardware_interference_size should have the value 201703L in c++17" +# endif +# else +# ifdef __cpp_lib_hardware_interference_size +# error "__cpp_lib_hardware_interference_size should not be defined when the requirement '!defined(_LIBCPP_VERSION) || (defined(__GCC_DESTRUCTIVE_SIZE) && defined(__GCC_CONSTRUCTIVE_SIZE))' is not met!" +# endif +# endif + +# ifndef __cpp_lib_has_unique_object_representations +# error "__cpp_lib_has_unique_object_representations should be defined in c++17" +# endif +# if __cpp_lib_has_unique_object_representations != 201606L +# error "__cpp_lib_has_unique_object_representations should have the value 201606L in c++17" +# endif + +# ifdef __cpp_lib_hazard_pointer +# error "__cpp_lib_hazard_pointer should not be defined before c++26" +# endif + +# ifndef __cpp_lib_hypot +# error "__cpp_lib_hypot should be defined in c++17" +# endif +# if __cpp_lib_hypot != 201603L +# error "__cpp_lib_hypot should have the value 201603L in c++17" +# endif + +# ifndef __cpp_lib_incomplete_container_elements +# error "__cpp_lib_incomplete_container_elements should be defined in c++17" +# endif +# if __cpp_lib_incomplete_container_elements != 201505L +# error "__cpp_lib_incomplete_container_elements should have the value 201505L in c++17" +# endif + +# ifdef __cpp_lib_inplace_vector +# error "__cpp_lib_inplace_vector should not be defined before c++26" +# endif + +# ifdef __cpp_lib_int_pow2 +# error "__cpp_lib_int_pow2 should not be defined before c++20" +# endif + +# ifdef __cpp_lib_integer_comparison_functions +# error "__cpp_lib_integer_comparison_functions should not be defined before c++20" +# endif + +# ifndef __cpp_lib_integer_sequence +# error "__cpp_lib_integer_sequence should be defined in c++17" +# endif +# if __cpp_lib_integer_sequence != 201304L +# error "__cpp_lib_integer_sequence should have the value 201304L in c++17" +# endif + +# ifndef __cpp_lib_integral_constant_callable +# error "__cpp_lib_integral_constant_callable should be defined in c++17" +# endif +# if __cpp_lib_integral_constant_callable != 201304L +# error "__cpp_lib_integral_constant_callable should have the value 201304L in c++17" +# endif + +# ifdef __cpp_lib_interpolate +# error "__cpp_lib_interpolate should not be defined before c++20" +# endif + +# ifndef __cpp_lib_invoke +# error "__cpp_lib_invoke should be defined in c++17" +# endif +# if __cpp_lib_invoke != 201411L +# error "__cpp_lib_invoke should have the value 201411L in c++17" +# endif + +# ifdef __cpp_lib_invoke_r +# error "__cpp_lib_invoke_r should not be defined before c++23" +# endif + +# ifdef __cpp_lib_ios_noreplace +# error "__cpp_lib_ios_noreplace should not be defined before c++23" +# endif + +# ifndef __cpp_lib_is_aggregate +# error "__cpp_lib_is_aggregate should be defined in c++17" +# endif +# if __cpp_lib_is_aggregate != 201703L +# error "__cpp_lib_is_aggregate should have the value 201703L in c++17" +# endif + +# ifdef __cpp_lib_is_constant_evaluated +# error "__cpp_lib_is_constant_evaluated should not be defined before c++20" +# endif + +# ifndef __cpp_lib_is_final +# error "__cpp_lib_is_final should be defined in c++17" +# endif +# if __cpp_lib_is_final != 201402L +# error "__cpp_lib_is_final should have the value 201402L in c++17" +# endif + +# ifdef __cpp_lib_is_implicit_lifetime +# error "__cpp_lib_is_implicit_lifetime should not be defined before c++23" +# endif + +# ifndef __cpp_lib_is_invocable +# error "__cpp_lib_is_invocable should be defined in c++17" +# endif +# if __cpp_lib_is_invocable != 201703L +# error "__cpp_lib_is_invocable should have the value 201703L in c++17" +# endif + +# ifdef __cpp_lib_is_layout_compatible +# error "__cpp_lib_is_layout_compatible should not be defined before c++20" +# endif + +# ifdef __cpp_lib_is_nothrow_convertible +# error "__cpp_lib_is_nothrow_convertible should not be defined before c++20" +# endif + +# ifndef __cpp_lib_is_null_pointer +# error "__cpp_lib_is_null_pointer should be defined in c++17" +# endif +# if __cpp_lib_is_null_pointer != 201309L +# error "__cpp_lib_is_null_pointer should have the value 201309L in c++17" +# endif + +# ifdef __cpp_lib_is_pointer_interconvertible +# error "__cpp_lib_is_pointer_interconvertible should not be defined before c++20" +# endif + +# ifdef __cpp_lib_is_scoped_enum +# error "__cpp_lib_is_scoped_enum should not be defined before c++23" +# endif + +# ifndef __cpp_lib_is_swappable +# error "__cpp_lib_is_swappable should be defined in c++17" +# endif +# if __cpp_lib_is_swappable != 201603L +# error "__cpp_lib_is_swappable should have the value 201603L in c++17" +# endif + +# ifdef __cpp_lib_is_virtual_base_of +# error "__cpp_lib_is_virtual_base_of should not be defined before c++26" +# endif + +# ifdef __cpp_lib_is_within_lifetime +# error "__cpp_lib_is_within_lifetime should not be defined before c++26" +# endif + +# ifdef __cpp_lib_jthread +# error "__cpp_lib_jthread should not be defined before c++20" +# endif + +# ifdef __cpp_lib_latch +# error "__cpp_lib_latch should not be defined before c++20" +# endif + +# ifndef __cpp_lib_launder +# error "__cpp_lib_launder should be defined in c++17" +# endif +# if __cpp_lib_launder != 201606L +# error "__cpp_lib_launder should have the value 201606L in c++17" +# endif + +# ifdef __cpp_lib_linalg +# error "__cpp_lib_linalg should not be defined before c++26" +# endif + +# ifdef __cpp_lib_list_remove_return_type +# error "__cpp_lib_list_remove_return_type should not be defined before c++20" +# endif + +# ifndef __cpp_lib_logical_traits +# error "__cpp_lib_logical_traits should be defined in c++17" +# endif +# if __cpp_lib_logical_traits != 201510L +# error "__cpp_lib_logical_traits should have the value 201510L in c++17" +# endif + +# ifndef __cpp_lib_make_from_tuple +# error "__cpp_lib_make_from_tuple should be defined in c++17" +# endif +# if __cpp_lib_make_from_tuple != 201606L +# error "__cpp_lib_make_from_tuple should have the value 201606L in c++17" +# endif + +# ifndef __cpp_lib_make_reverse_iterator +# error "__cpp_lib_make_reverse_iterator should be defined in c++17" +# endif +# if __cpp_lib_make_reverse_iterator != 201402L +# error "__cpp_lib_make_reverse_iterator should have the value 201402L in c++17" +# endif + +# ifndef __cpp_lib_make_unique +# error "__cpp_lib_make_unique should be defined in c++17" +# endif +# if __cpp_lib_make_unique != 201304L +# error "__cpp_lib_make_unique should have the value 201304L in c++17" +# endif + +# ifndef __cpp_lib_map_try_emplace +# error "__cpp_lib_map_try_emplace should be defined in c++17" +# endif +# if __cpp_lib_map_try_emplace != 201411L +# error "__cpp_lib_map_try_emplace should have the value 201411L in c++17" +# endif + +# ifdef __cpp_lib_math_constants +# error "__cpp_lib_math_constants should not be defined before c++20" +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_math_special_functions +# error "__cpp_lib_math_special_functions should be defined in c++17" +# endif +# if __cpp_lib_math_special_functions != 201603L +# error "__cpp_lib_math_special_functions should have the value 201603L in c++17" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_math_special_functions +# error "__cpp_lib_math_special_functions should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# ifdef __cpp_lib_mdspan +# error "__cpp_lib_mdspan should not be defined before c++23" +# endif + +# if !defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_PMR +# ifndef __cpp_lib_memory_resource +# error "__cpp_lib_memory_resource should be defined in c++17" +# endif +# if __cpp_lib_memory_resource != 201603L +# error "__cpp_lib_memory_resource should have the value 201603L in c++17" +# endif +# else +# ifdef __cpp_lib_memory_resource +# error "__cpp_lib_memory_resource should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_PMR' is not met!" +# endif +# endif + +# ifdef __cpp_lib_modules +# error "__cpp_lib_modules should not be defined before c++23" +# endif + +# ifdef __cpp_lib_move_iterator_concept +# error "__cpp_lib_move_iterator_concept should not be defined before c++20" +# endif + +# ifdef __cpp_lib_move_only_function +# error "__cpp_lib_move_only_function should not be defined before c++23" +# endif + +# ifndef __cpp_lib_node_extract +# error "__cpp_lib_node_extract should be defined in c++17" +# endif +# if __cpp_lib_node_extract != 201606L +# error "__cpp_lib_node_extract should have the value 201606L in c++17" +# endif + +# ifndef __cpp_lib_nonmember_container_access +# error "__cpp_lib_nonmember_container_access should be defined in c++17" +# endif +# if __cpp_lib_nonmember_container_access != 201411L +# error "__cpp_lib_nonmember_container_access should have the value 201411L in c++17" +# endif + +# ifndef __cpp_lib_not_fn +# error "__cpp_lib_not_fn should be defined in c++17" +# endif +# if __cpp_lib_not_fn != 201603L +# error "__cpp_lib_not_fn should have the value 201603L in c++17" +# endif + +# ifndef __cpp_lib_null_iterators +# error "__cpp_lib_null_iterators should be defined in c++17" +# endif +# if __cpp_lib_null_iterators != 201304L +# error "__cpp_lib_null_iterators should have the value 201304L in c++17" +# endif + +# ifndef __cpp_lib_optional +# error "__cpp_lib_optional should be defined in c++17" +# endif +# if __cpp_lib_optional != 201606L +# error "__cpp_lib_optional should have the value 201606L in c++17" +# endif + +# ifdef __cpp_lib_optional_range_support +# error "__cpp_lib_optional_range_support should not be defined before c++26" +# endif + +# ifdef __cpp_lib_out_ptr +# error "__cpp_lib_out_ptr should not be defined before c++23" +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_parallel_algorithm +# error "__cpp_lib_parallel_algorithm should be defined in c++17" +# endif +# if __cpp_lib_parallel_algorithm != 201603L +# error "__cpp_lib_parallel_algorithm should have the value 201603L in c++17" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_parallel_algorithm +# error "__cpp_lib_parallel_algorithm should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# ifdef __cpp_lib_philox_engine +# error "__cpp_lib_philox_engine should not be defined before c++26" +# endif + +# ifdef __cpp_lib_polymorphic_allocator +# error "__cpp_lib_polymorphic_allocator should not be defined before c++20" +# endif + +# ifdef __cpp_lib_print +# error "__cpp_lib_print should not be defined before c++23" +# endif + +# if !defined(_LIBCPP_VERSION) || _LIBCPP_HAS_LOCALIZATION +# ifndef __cpp_lib_quoted_string_io +# error "__cpp_lib_quoted_string_io should be defined in c++17" +# endif +# if __cpp_lib_quoted_string_io != 201304L +# error "__cpp_lib_quoted_string_io should have the value 201304L in c++17" +# endif +# else +# ifdef __cpp_lib_quoted_string_io +# error "__cpp_lib_quoted_string_io should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_HAS_LOCALIZATION' is not met!" +# endif +# endif + +# ifdef __cpp_lib_ranges +# error "__cpp_lib_ranges should not be defined before c++20" +# endif + +# ifdef __cpp_lib_ranges_as_const +# error "__cpp_lib_ranges_as_const should not be defined before c++23" +# endif + +# ifdef __cpp_lib_ranges_as_rvalue +# error "__cpp_lib_ranges_as_rvalue should not be defined before c++23" +# endif + +# ifdef __cpp_lib_ranges_chunk +# error "__cpp_lib_ranges_chunk should not be defined before c++23" +# endif + +# ifdef __cpp_lib_ranges_chunk_by +# error "__cpp_lib_ranges_chunk_by should not be defined before c++23" +# endif + +# ifdef __cpp_lib_ranges_concat +# error "__cpp_lib_ranges_concat should not be defined before c++26" +# endif + +# ifdef __cpp_lib_ranges_contains +# error "__cpp_lib_ranges_contains should not be defined before c++23" +# endif + +# ifdef __cpp_lib_ranges_find_last +# error "__cpp_lib_ranges_find_last should not be defined before c++23" +# endif + +# ifdef __cpp_lib_ranges_iota +# error "__cpp_lib_ranges_iota should not be defined before c++23" +# endif + +# ifdef __cpp_lib_ranges_join_with +# error "__cpp_lib_ranges_join_with should not be defined before c++23" +# endif + +# ifdef __cpp_lib_ranges_repeat +# error "__cpp_lib_ranges_repeat should not be defined before c++23" +# endif + +# ifdef __cpp_lib_ranges_slide +# error "__cpp_lib_ranges_slide should not be defined before c++23" +# endif + +# ifdef __cpp_lib_ranges_starts_ends_with +# error "__cpp_lib_ranges_starts_ends_with should not be defined before c++23" +# endif + +# ifdef __cpp_lib_ranges_to_container +# error "__cpp_lib_ranges_to_container should not be defined before c++23" +# endif + +# ifdef __cpp_lib_ranges_zip +# error "__cpp_lib_ranges_zip should not be defined before c++23" +# endif + +# ifdef __cpp_lib_ratio +# error "__cpp_lib_ratio should not be defined before c++26" +# endif + +# ifndef __cpp_lib_raw_memory_algorithms +# error "__cpp_lib_raw_memory_algorithms should be defined in c++17" +# endif +# if __cpp_lib_raw_memory_algorithms != 201606L +# error "__cpp_lib_raw_memory_algorithms should have the value 201606L in c++17" +# endif + +# ifdef __cpp_lib_rcu +# error "__cpp_lib_rcu should not be defined before c++26" +# endif + +# ifdef __cpp_lib_reference_from_temporary +# error "__cpp_lib_reference_from_temporary should not be defined before c++23" +# endif + +# ifdef __cpp_lib_reference_wrapper +# error "__cpp_lib_reference_wrapper should not be defined before c++26" +# endif + +# ifdef __cpp_lib_remove_cvref +# error "__cpp_lib_remove_cvref should not be defined before c++20" +# endif + +# ifndef __cpp_lib_result_of_sfinae +# error "__cpp_lib_result_of_sfinae should be defined in c++17" +# endif +# if __cpp_lib_result_of_sfinae != 201210L +# error "__cpp_lib_result_of_sfinae should have the value 201210L in c++17" +# endif + +# ifndef __cpp_lib_robust_nonmodifying_seq_ops +# error "__cpp_lib_robust_nonmodifying_seq_ops should be defined in c++17" +# endif +# if __cpp_lib_robust_nonmodifying_seq_ops != 201304L +# error "__cpp_lib_robust_nonmodifying_seq_ops should have the value 201304L in c++17" +# endif + +# ifndef __cpp_lib_sample +# error "__cpp_lib_sample should be defined in c++17" +# endif +# if __cpp_lib_sample != 201603L +# error "__cpp_lib_sample should have the value 201603L in c++17" +# endif + +# ifdef __cpp_lib_saturation_arithmetic +# error "__cpp_lib_saturation_arithmetic should not be defined before c++26" +# endif + +# if !defined(_LIBCPP_VERSION) || _LIBCPP_HAS_THREADS +# ifndef __cpp_lib_scoped_lock +# error "__cpp_lib_scoped_lock should be defined in c++17" +# endif +# if __cpp_lib_scoped_lock != 201703L +# error "__cpp_lib_scoped_lock should have the value 201703L in c++17" +# endif +# else +# ifdef __cpp_lib_scoped_lock +# error "__cpp_lib_scoped_lock should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_HAS_THREADS' is not met!" +# endif +# endif + +# ifdef __cpp_lib_semaphore +# error "__cpp_lib_semaphore should not be defined before c++20" +# endif + +# ifdef __cpp_lib_senders +# error "__cpp_lib_senders should not be defined before c++26" +# endif + +# if _LIBCPP_HAS_THREADS +# ifndef __cpp_lib_shared_mutex +# error "__cpp_lib_shared_mutex should be defined in c++17" +# endif +# if __cpp_lib_shared_mutex != 201505L +# error "__cpp_lib_shared_mutex should have the value 201505L in c++17" +# endif +# else +# ifdef __cpp_lib_shared_mutex +# error "__cpp_lib_shared_mutex should not be defined when the requirement '_LIBCPP_HAS_THREADS' is not met!" +# endif +# endif + +# ifndef __cpp_lib_shared_ptr_arrays +# error "__cpp_lib_shared_ptr_arrays should be defined in c++17" +# endif +# if __cpp_lib_shared_ptr_arrays != 201611L +# error "__cpp_lib_shared_ptr_arrays should have the value 201611L in c++17" +# endif + +# ifndef __cpp_lib_shared_ptr_weak_type +# error "__cpp_lib_shared_ptr_weak_type should be defined in c++17" +# endif +# if __cpp_lib_shared_ptr_weak_type != 201606L +# error "__cpp_lib_shared_ptr_weak_type should have the value 201606L in c++17" +# endif + +# if _LIBCPP_HAS_THREADS +# ifndef __cpp_lib_shared_timed_mutex +# error "__cpp_lib_shared_timed_mutex should be defined in c++17" +# endif +# if __cpp_lib_shared_timed_mutex != 201402L +# error "__cpp_lib_shared_timed_mutex should have the value 201402L in c++17" +# endif +# else +# ifdef __cpp_lib_shared_timed_mutex +# error "__cpp_lib_shared_timed_mutex should not be defined when the requirement '_LIBCPP_HAS_THREADS' is not met!" +# endif +# endif + +# ifdef __cpp_lib_shift +# error "__cpp_lib_shift should not be defined before c++20" +# endif + +# ifdef __cpp_lib_smart_ptr_for_overwrite +# error "__cpp_lib_smart_ptr_for_overwrite should not be defined before c++20" +# endif + +# ifdef __cpp_lib_smart_ptr_owner_equality +# error "__cpp_lib_smart_ptr_owner_equality should not be defined before c++26" +# endif + +# ifdef __cpp_lib_source_location +# error "__cpp_lib_source_location should not be defined before c++20" +# endif + +# ifdef __cpp_lib_span +# error "__cpp_lib_span should not be defined before c++20" +# endif + +# ifdef __cpp_lib_span_at +# error "__cpp_lib_span_at should not be defined before c++26" +# endif + +# ifdef __cpp_lib_span_initializer_list +# error "__cpp_lib_span_initializer_list should not be defined before c++26" +# endif + +# ifdef __cpp_lib_spanstream +# error "__cpp_lib_spanstream should not be defined before c++23" +# endif + +# ifdef __cpp_lib_ssize +# error "__cpp_lib_ssize should not be defined before c++20" +# endif + +# ifdef __cpp_lib_sstream_from_string_view +# error "__cpp_lib_sstream_from_string_view should not be defined before c++26" +# endif + +# ifdef __cpp_lib_stacktrace +# error "__cpp_lib_stacktrace should not be defined before c++23" +# endif + +# ifdef __cpp_lib_starts_ends_with +# error "__cpp_lib_starts_ends_with should not be defined before c++20" +# endif + +# ifdef __cpp_lib_stdatomic_h +# error "__cpp_lib_stdatomic_h should not be defined before c++23" +# endif + +# ifdef __cpp_lib_string_contains +# error "__cpp_lib_string_contains should not be defined before c++23" +# endif + +# ifdef __cpp_lib_string_resize_and_overwrite +# error "__cpp_lib_string_resize_and_overwrite should not be defined before c++23" +# endif + +# ifndef __cpp_lib_string_udls +# error "__cpp_lib_string_udls should be defined in c++17" +# endif +# if __cpp_lib_string_udls != 201304L +# error "__cpp_lib_string_udls should have the value 201304L in c++17" +# endif + +# ifndef __cpp_lib_string_view +# error "__cpp_lib_string_view should be defined in c++17" +# endif +# if __cpp_lib_string_view != 201606L +# error "__cpp_lib_string_view should have the value 201606L in c++17" +# endif + +# ifdef __cpp_lib_submdspan +# error "__cpp_lib_submdspan should not be defined before c++26" +# endif + +# ifdef __cpp_lib_syncbuf +# error "__cpp_lib_syncbuf should not be defined before c++20" +# endif + +# ifdef __cpp_lib_text_encoding +# error "__cpp_lib_text_encoding should not be defined before c++26" +# endif + +# ifdef __cpp_lib_three_way_comparison +# error "__cpp_lib_three_way_comparison should not be defined before c++20" +# endif + +# ifdef __cpp_lib_to_address +# error "__cpp_lib_to_address should not be defined before c++20" +# endif + +# ifdef __cpp_lib_to_array +# error "__cpp_lib_to_array should not be defined before c++20" +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_to_chars +# error "__cpp_lib_to_chars should be defined in c++17" +# endif +# if __cpp_lib_to_chars != 201611L +# error "__cpp_lib_to_chars should have the value 201611L in c++17" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_to_chars +# error "__cpp_lib_to_chars should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# ifdef __cpp_lib_to_string +# error "__cpp_lib_to_string should not be defined before c++26" +# endif + +# ifdef __cpp_lib_to_underlying +# error "__cpp_lib_to_underlying should not be defined before c++23" +# endif + +# ifndef __cpp_lib_transformation_trait_aliases +# error "__cpp_lib_transformation_trait_aliases should be defined in c++17" +# endif +# if __cpp_lib_transformation_trait_aliases != 201304L +# error "__cpp_lib_transformation_trait_aliases should have the value 201304L in c++17" +# endif + +# ifndef __cpp_lib_transparent_operators +# error "__cpp_lib_transparent_operators should be defined in c++17" +# endif +# if __cpp_lib_transparent_operators != 201510L +# error "__cpp_lib_transparent_operators should have the value 201510L in c++17" +# endif + +# ifndef __cpp_lib_tuple_element_t +# error "__cpp_lib_tuple_element_t should be defined in c++17" +# endif +# if __cpp_lib_tuple_element_t != 201402L +# error "__cpp_lib_tuple_element_t should have the value 201402L in c++17" +# endif + +# ifdef __cpp_lib_tuple_like +# error "__cpp_lib_tuple_like should not be defined before c++23" +# endif + +# ifndef __cpp_lib_tuples_by_type +# error "__cpp_lib_tuples_by_type should be defined in c++17" +# endif +# if __cpp_lib_tuples_by_type != 201304L +# error "__cpp_lib_tuples_by_type should have the value 201304L in c++17" +# endif + +# ifdef __cpp_lib_type_identity +# error "__cpp_lib_type_identity should not be defined before c++20" +# endif + +# ifndef __cpp_lib_type_trait_variable_templates +# error "__cpp_lib_type_trait_variable_templates should be defined in c++17" +# endif +# if __cpp_lib_type_trait_variable_templates != 201510L +# error "__cpp_lib_type_trait_variable_templates should have the value 201510L in c++17" +# endif + +# ifndef __cpp_lib_uncaught_exceptions +# error "__cpp_lib_uncaught_exceptions should be defined in c++17" +# endif +# if __cpp_lib_uncaught_exceptions != 201411L +# error "__cpp_lib_uncaught_exceptions should have the value 201411L in c++17" +# endif + +# ifndef __cpp_lib_unordered_map_try_emplace +# error "__cpp_lib_unordered_map_try_emplace should be defined in c++17" +# endif +# if __cpp_lib_unordered_map_try_emplace != 201411L +# error "__cpp_lib_unordered_map_try_emplace should have the value 201411L in c++17" +# endif + +# ifdef __cpp_lib_unreachable +# error "__cpp_lib_unreachable should not be defined before c++23" +# endif + +# ifdef __cpp_lib_unwrap_ref +# error "__cpp_lib_unwrap_ref should not be defined before c++20" +# endif + +# ifndef __cpp_lib_variant +# error "__cpp_lib_variant should be defined in c++17" +# endif +# if __cpp_lib_variant != 202102L +# error "__cpp_lib_variant should have the value 202102L in c++17" +# endif + +# ifndef __cpp_lib_void_t +# error "__cpp_lib_void_t should be defined in c++17" +# endif +# if __cpp_lib_void_t != 201411L +# error "__cpp_lib_void_t should have the value 201411L in c++17" +# endif + +#elif TEST_STD_VER == 20 + +# ifdef __cpp_lib_adaptor_iterator_pair_constructor +# error "__cpp_lib_adaptor_iterator_pair_constructor should not be defined before c++23" +# endif + +# ifndef __cpp_lib_addressof_constexpr +# error "__cpp_lib_addressof_constexpr should be defined in c++20" +# endif +# if __cpp_lib_addressof_constexpr != 201603L +# error "__cpp_lib_addressof_constexpr should have the value 201603L in c++20" +# endif + +# ifdef __cpp_lib_allocate_at_least +# error "__cpp_lib_allocate_at_least should not be defined before c++23" +# endif + +# ifndef __cpp_lib_allocator_traits_is_always_equal +# error "__cpp_lib_allocator_traits_is_always_equal should be defined in c++20" +# endif +# if __cpp_lib_allocator_traits_is_always_equal != 201411L +# error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++20" +# endif + +# ifndef __cpp_lib_any +# error "__cpp_lib_any should be defined in c++20" +# endif +# if __cpp_lib_any != 201606L +# error "__cpp_lib_any should have the value 201606L in c++20" +# endif + +# ifndef __cpp_lib_apply +# error "__cpp_lib_apply should be defined in c++20" +# endif +# if __cpp_lib_apply != 201603L +# error "__cpp_lib_apply should have the value 201603L in c++20" +# endif + +# ifndef __cpp_lib_array_constexpr +# error "__cpp_lib_array_constexpr should be defined in c++20" +# endif +# if __cpp_lib_array_constexpr != 201811L +# error "__cpp_lib_array_constexpr should have the value 201811L in c++20" +# endif + +# ifndef __cpp_lib_as_const +# error "__cpp_lib_as_const should be defined in c++20" +# endif +# if __cpp_lib_as_const != 201510L +# error "__cpp_lib_as_const should have the value 201510L in c++20" +# endif + +# ifdef __cpp_lib_associative_heterogeneous_erasure +# error "__cpp_lib_associative_heterogeneous_erasure should not be defined before c++23" +# endif + +# ifdef __cpp_lib_associative_heterogeneous_insertion +# error "__cpp_lib_associative_heterogeneous_insertion should not be defined before c++26" +# endif + +# ifndef __cpp_lib_assume_aligned +# error "__cpp_lib_assume_aligned should be defined in c++20" +# endif +# if __cpp_lib_assume_aligned != 201811L +# error "__cpp_lib_assume_aligned should have the value 201811L in c++20" +# endif + +# ifndef __cpp_lib_atomic_flag_test +# error "__cpp_lib_atomic_flag_test should be defined in c++20" +# endif +# if __cpp_lib_atomic_flag_test != 201907L +# error "__cpp_lib_atomic_flag_test should have the value 201907L in c++20" +# endif + +# ifndef __cpp_lib_atomic_float +# error "__cpp_lib_atomic_float should be defined in c++20" +# endif +# if __cpp_lib_atomic_float != 201711L +# error "__cpp_lib_atomic_float should have the value 201711L in c++20" +# endif + +# ifndef __cpp_lib_atomic_is_always_lock_free +# error "__cpp_lib_atomic_is_always_lock_free should be defined in c++20" +# endif +# if __cpp_lib_atomic_is_always_lock_free != 201603L +# error "__cpp_lib_atomic_is_always_lock_free should have the value 201603L in c++20" +# endif + +# ifndef __cpp_lib_atomic_lock_free_type_aliases +# error "__cpp_lib_atomic_lock_free_type_aliases should be defined in c++20" +# endif +# if __cpp_lib_atomic_lock_free_type_aliases != 201907L +# error "__cpp_lib_atomic_lock_free_type_aliases should have the value 201907L in c++20" +# endif + +# ifdef __cpp_lib_atomic_min_max +# error "__cpp_lib_atomic_min_max should not be defined before c++26" +# endif + +# ifndef __cpp_lib_atomic_ref +# error "__cpp_lib_atomic_ref should be defined in c++20" +# endif +# if __cpp_lib_atomic_ref != 201806L +# error "__cpp_lib_atomic_ref should have the value 201806L in c++20" +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_atomic_shared_ptr +# error "__cpp_lib_atomic_shared_ptr should be defined in c++20" +# endif +# if __cpp_lib_atomic_shared_ptr != 201711L +# error "__cpp_lib_atomic_shared_ptr should have the value 201711L in c++20" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_atomic_shared_ptr +# error "__cpp_lib_atomic_shared_ptr should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# ifndef __cpp_lib_atomic_value_initialization +# error "__cpp_lib_atomic_value_initialization should be defined in c++20" +# endif +# if __cpp_lib_atomic_value_initialization != 201911L +# error "__cpp_lib_atomic_value_initialization should have the value 201911L in c++20" +# endif + +# if !defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_SYNC +# ifndef __cpp_lib_atomic_wait +# error "__cpp_lib_atomic_wait should be defined in c++20" +# endif +# if __cpp_lib_atomic_wait != 201907L +# error "__cpp_lib_atomic_wait should have the value 201907L in c++20" +# endif +# else +# ifdef __cpp_lib_atomic_wait +# error "__cpp_lib_atomic_wait should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_SYNC' is not met!" +# endif +# endif + +# if !defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC) +# ifndef __cpp_lib_barrier +# error "__cpp_lib_barrier should be defined in c++20" +# endif +# if __cpp_lib_barrier != 201907L +# error "__cpp_lib_barrier should have the value 201907L in c++20" +# endif +# else +# ifdef __cpp_lib_barrier +# error "__cpp_lib_barrier should not be defined when the requirement '!defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC)' is not met!" +# endif +# endif + +# ifdef __cpp_lib_bind_back +# error "__cpp_lib_bind_back should not be defined before c++23" +# endif + +# ifndef __cpp_lib_bind_front +# error "__cpp_lib_bind_front should be defined in c++20" +# endif +# if __cpp_lib_bind_front != 201907L +# error "__cpp_lib_bind_front should have the value 201907L in c++20" +# endif + +# ifndef __cpp_lib_bit_cast +# error "__cpp_lib_bit_cast should be defined in c++20" +# endif +# if __cpp_lib_bit_cast != 201806L +# error "__cpp_lib_bit_cast should have the value 201806L in c++20" +# endif + +# ifndef __cpp_lib_bitops +# error "__cpp_lib_bitops should be defined in c++20" +# endif +# if __cpp_lib_bitops != 201907L +# error "__cpp_lib_bitops should have the value 201907L in c++20" +# endif + +# ifdef __cpp_lib_bitset +# error "__cpp_lib_bitset should not be defined before c++26" +# endif + +# ifndef __cpp_lib_bool_constant +# error "__cpp_lib_bool_constant should be defined in c++20" +# endif +# if __cpp_lib_bool_constant != 201505L +# error "__cpp_lib_bool_constant should have the value 201505L in c++20" +# endif + +# ifndef __cpp_lib_bounded_array_traits +# error "__cpp_lib_bounded_array_traits should be defined in c++20" +# endif +# if __cpp_lib_bounded_array_traits != 201902L +# error "__cpp_lib_bounded_array_traits should have the value 201902L in c++20" +# endif + +# ifndef __cpp_lib_boyer_moore_searcher +# error "__cpp_lib_boyer_moore_searcher should be defined in c++20" +# endif +# if __cpp_lib_boyer_moore_searcher != 201603L +# error "__cpp_lib_boyer_moore_searcher should have the value 201603L in c++20" +# endif + +# ifndef __cpp_lib_byte +# error "__cpp_lib_byte should be defined in c++20" +# endif +# if __cpp_lib_byte != 201603L +# error "__cpp_lib_byte should have the value 201603L in c++20" +# endif + +# ifdef __cpp_lib_byteswap +# error "__cpp_lib_byteswap should not be defined before c++23" +# endif + +# if defined(__cpp_char8_t) +# ifndef __cpp_lib_char8_t +# error "__cpp_lib_char8_t should be defined in c++20" +# endif +# if __cpp_lib_char8_t != 201907L +# error "__cpp_lib_char8_t should have the value 201907L in c++20" +# endif +# else +# ifdef __cpp_lib_char8_t +# error "__cpp_lib_char8_t should not be defined when the requirement 'defined(__cpp_char8_t)' is not met!" +# endif +# endif + +# ifndef __cpp_lib_chrono +# error "__cpp_lib_chrono should be defined in c++20" +# endif +# if __cpp_lib_chrono != 201611L +# error "__cpp_lib_chrono should have the value 201611L in c++20" +# endif + +# ifndef __cpp_lib_chrono_udls +# error "__cpp_lib_chrono_udls should be defined in c++20" +# endif +# if __cpp_lib_chrono_udls != 201304L +# error "__cpp_lib_chrono_udls should have the value 201304L in c++20" +# endif + +# ifndef __cpp_lib_clamp +# error "__cpp_lib_clamp should be defined in c++20" +# endif +# if __cpp_lib_clamp != 201603L +# error "__cpp_lib_clamp should have the value 201603L in c++20" +# endif + +# ifndef __cpp_lib_complex_udls +# error "__cpp_lib_complex_udls should be defined in c++20" +# endif +# if __cpp_lib_complex_udls != 201309L +# error "__cpp_lib_complex_udls should have the value 201309L in c++20" +# endif + +# ifndef __cpp_lib_concepts +# error "__cpp_lib_concepts should be defined in c++20" +# endif +# if __cpp_lib_concepts != 202002L +# error "__cpp_lib_concepts should have the value 202002L in c++20" +# endif + +# ifndef __cpp_lib_constexpr_algorithms +# error "__cpp_lib_constexpr_algorithms should be defined in c++20" +# endif +# if __cpp_lib_constexpr_algorithms != 201806L +# error "__cpp_lib_constexpr_algorithms should have the value 201806L in c++20" +# endif + +# ifdef __cpp_lib_constexpr_bitset +# error "__cpp_lib_constexpr_bitset should not be defined before c++23" +# endif + +# ifdef __cpp_lib_constexpr_charconv +# error "__cpp_lib_constexpr_charconv should not be defined before c++23" +# endif + +# ifdef __cpp_lib_constexpr_cmath +# error "__cpp_lib_constexpr_cmath should not be defined before c++23" +# endif + +# ifndef __cpp_lib_constexpr_complex +# error "__cpp_lib_constexpr_complex should be defined in c++20" +# endif +# if __cpp_lib_constexpr_complex != 201711L +# error "__cpp_lib_constexpr_complex should have the value 201711L in c++20" +# endif + +# ifndef __cpp_lib_constexpr_dynamic_alloc +# error "__cpp_lib_constexpr_dynamic_alloc should be defined in c++20" +# endif +# if __cpp_lib_constexpr_dynamic_alloc != 201907L +# error "__cpp_lib_constexpr_dynamic_alloc should have the value 201907L in c++20" +# endif + +# ifdef __cpp_lib_constexpr_forward_list +# error "__cpp_lib_constexpr_forward_list should not be defined before c++26" +# endif + +# ifndef __cpp_lib_constexpr_functional +# error "__cpp_lib_constexpr_functional should be defined in c++20" +# endif +# if __cpp_lib_constexpr_functional != 201907L +# error "__cpp_lib_constexpr_functional should have the value 201907L in c++20" +# endif + +# ifndef __cpp_lib_constexpr_iterator +# error "__cpp_lib_constexpr_iterator should be defined in c++20" +# endif +# if __cpp_lib_constexpr_iterator != 201811L +# error "__cpp_lib_constexpr_iterator should have the value 201811L in c++20" +# endif + +# ifndef __cpp_lib_constexpr_memory +# error "__cpp_lib_constexpr_memory should be defined in c++20" +# endif +# if __cpp_lib_constexpr_memory != 201811L +# error "__cpp_lib_constexpr_memory should have the value 201811L in c++20" +# endif + +# ifdef __cpp_lib_constexpr_new +# error "__cpp_lib_constexpr_new should not be defined before c++26" +# endif + +# ifndef __cpp_lib_constexpr_numeric +# error "__cpp_lib_constexpr_numeric should be defined in c++20" +# endif +# if __cpp_lib_constexpr_numeric != 201911L +# error "__cpp_lib_constexpr_numeric should have the value 201911L in c++20" +# endif + +# ifndef __cpp_lib_constexpr_string +# error "__cpp_lib_constexpr_string should be defined in c++20" +# endif +# if __cpp_lib_constexpr_string != 201907L +# error "__cpp_lib_constexpr_string should have the value 201907L in c++20" +# endif + +# ifndef __cpp_lib_constexpr_string_view +# error "__cpp_lib_constexpr_string_view should be defined in c++20" +# endif +# if __cpp_lib_constexpr_string_view != 201811L +# error "__cpp_lib_constexpr_string_view should have the value 201811L in c++20" +# endif + +# ifndef __cpp_lib_constexpr_tuple +# error "__cpp_lib_constexpr_tuple should be defined in c++20" +# endif +# if __cpp_lib_constexpr_tuple != 201811L +# error "__cpp_lib_constexpr_tuple should have the value 201811L in c++20" +# endif + +# ifdef __cpp_lib_constexpr_typeinfo +# error "__cpp_lib_constexpr_typeinfo should not be defined before c++23" +# endif + +# ifndef __cpp_lib_constexpr_utility +# error "__cpp_lib_constexpr_utility should be defined in c++20" +# endif +# if __cpp_lib_constexpr_utility != 201811L +# error "__cpp_lib_constexpr_utility should have the value 201811L in c++20" +# endif + +# ifndef __cpp_lib_constexpr_vector +# error "__cpp_lib_constexpr_vector should be defined in c++20" +# endif +# if __cpp_lib_constexpr_vector != 201907L +# error "__cpp_lib_constexpr_vector should have the value 201907L in c++20" +# endif + +# ifdef __cpp_lib_constrained_equality +# error "__cpp_lib_constrained_equality should not be defined before c++26" +# endif + +# ifdef __cpp_lib_containers_ranges +# error "__cpp_lib_containers_ranges should not be defined before c++23" +# endif + +# ifdef __cpp_lib_copyable_function +# error "__cpp_lib_copyable_function should not be defined before c++26" +# endif + +# ifndef __cpp_lib_coroutine +# error "__cpp_lib_coroutine should be defined in c++20" +# endif +# if __cpp_lib_coroutine != 201902L +# error "__cpp_lib_coroutine should have the value 201902L in c++20" +# endif + +# ifdef __cpp_lib_debugging +# error "__cpp_lib_debugging should not be defined before c++26" +# endif + +# ifdef __cpp_lib_default_template_type_for_algorithm_values +# error "__cpp_lib_default_template_type_for_algorithm_values should not be defined before c++26" +# endif + +# if TEST_STD_VER > 17 && defined(__cpp_impl_destroying_delete) && __cpp_impl_destroying_delete >= 201806L +# ifndef __cpp_lib_destroying_delete +# error "__cpp_lib_destroying_delete should be defined in c++20" +# endif +# if __cpp_lib_destroying_delete != 201806L +# error "__cpp_lib_destroying_delete should have the value 201806L in c++20" +# endif +# else +# ifdef __cpp_lib_destroying_delete +# error "__cpp_lib_destroying_delete should not be defined when the requirement 'TEST_STD_VER > 17 && defined(__cpp_impl_destroying_delete) && __cpp_impl_destroying_delete >= 201806L' is not met!" +# endif +# endif + +# ifndef __cpp_lib_enable_shared_from_this +# error "__cpp_lib_enable_shared_from_this should be defined in c++20" +# endif +# if __cpp_lib_enable_shared_from_this != 201603L +# error "__cpp_lib_enable_shared_from_this should have the value 201603L in c++20" +# endif + +# ifndef __cpp_lib_endian +# error "__cpp_lib_endian should be defined in c++20" +# endif +# if __cpp_lib_endian != 201907L +# error "__cpp_lib_endian should have the value 201907L in c++20" +# endif + +# ifndef __cpp_lib_erase_if +# error "__cpp_lib_erase_if should be defined in c++20" +# endif +# if __cpp_lib_erase_if != 202002L +# error "__cpp_lib_erase_if should have the value 202002L in c++20" +# endif + +# ifndef __cpp_lib_exchange_function +# error "__cpp_lib_exchange_function should be defined in c++20" +# endif +# if __cpp_lib_exchange_function != 201304L +# error "__cpp_lib_exchange_function should have the value 201304L in c++20" +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_execution +# error "__cpp_lib_execution should be defined in c++20" +# endif +# if __cpp_lib_execution != 201902L +# error "__cpp_lib_execution should have the value 201902L in c++20" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_execution +# error "__cpp_lib_execution should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# ifdef __cpp_lib_expected +# error "__cpp_lib_expected should not be defined before c++23" +# endif + +# if !defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_FILESYSTEM && _LIBCPP_AVAILABILITY_HAS_FILESYSTEM_LIBRARY) +# ifndef __cpp_lib_filesystem +# error "__cpp_lib_filesystem should be defined in c++20" +# endif +# if __cpp_lib_filesystem != 201703L +# error "__cpp_lib_filesystem should have the value 201703L in c++20" +# endif +# else +# ifdef __cpp_lib_filesystem +# error "__cpp_lib_filesystem should not be defined when the requirement '!defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_FILESYSTEM && _LIBCPP_AVAILABILITY_HAS_FILESYSTEM_LIBRARY)' is not met!" +# endif +# endif + +# ifdef __cpp_lib_flat_map +# error "__cpp_lib_flat_map should not be defined before c++23" +# endif + +# ifdef __cpp_lib_flat_set +# error "__cpp_lib_flat_set should not be defined before c++23" +# endif + +# if !defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_TO_CHARS_FLOATING_POINT +# ifndef __cpp_lib_format +# error "__cpp_lib_format should be defined in c++20" +# endif +# if __cpp_lib_format != 202110L +# error "__cpp_lib_format should have the value 202110L in c++20" +# endif +# else +# ifdef __cpp_lib_format +# error "__cpp_lib_format should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_TO_CHARS_FLOATING_POINT' is not met!" +# endif +# endif + +# ifdef __cpp_lib_format_path +# error "__cpp_lib_format_path should not be defined before c++26" +# endif + +# ifdef __cpp_lib_format_ranges +# error "__cpp_lib_format_ranges should not be defined before c++23" +# endif + +# ifndef __cpp_lib_format_uchar +# error "__cpp_lib_format_uchar should be defined in c++20" +# endif +# if __cpp_lib_format_uchar != 202311L +# error "__cpp_lib_format_uchar should have the value 202311L in c++20" +# endif + +# ifdef __cpp_lib_formatters +# error "__cpp_lib_formatters should not be defined before c++23" +# endif + +# ifdef __cpp_lib_forward_like +# error "__cpp_lib_forward_like should not be defined before c++23" +# endif + +# ifdef __cpp_lib_freestanding_algorithm +# error "__cpp_lib_freestanding_algorithm should not be defined before c++26" +# endif + +# ifdef __cpp_lib_freestanding_array +# error "__cpp_lib_freestanding_array should not be defined before c++26" +# endif + +# ifdef __cpp_lib_freestanding_cstring +# error "__cpp_lib_freestanding_cstring should not be defined before c++26" +# endif + +# ifdef __cpp_lib_freestanding_expected +# error "__cpp_lib_freestanding_expected should not be defined before c++26" +# endif + +# ifdef __cpp_lib_freestanding_mdspan +# error "__cpp_lib_freestanding_mdspan should not be defined before c++26" +# endif + +# ifdef __cpp_lib_freestanding_optional +# error "__cpp_lib_freestanding_optional should not be defined before c++26" +# endif + +# ifdef __cpp_lib_freestanding_string_view +# error "__cpp_lib_freestanding_string_view should not be defined before c++26" +# endif + +# ifdef __cpp_lib_freestanding_variant +# error "__cpp_lib_freestanding_variant should not be defined before c++26" +# endif + +# ifdef __cpp_lib_fstream_native_handle +# error "__cpp_lib_fstream_native_handle should not be defined before c++26" +# endif + +# ifdef __cpp_lib_function_ref +# error "__cpp_lib_function_ref should not be defined before c++26" +# endif + +# ifndef __cpp_lib_gcd_lcm +# error "__cpp_lib_gcd_lcm should be defined in c++20" +# endif +# if __cpp_lib_gcd_lcm != 201606L +# error "__cpp_lib_gcd_lcm should have the value 201606L in c++20" +# endif + +# ifdef __cpp_lib_generate_random +# error "__cpp_lib_generate_random should not be defined before c++26" +# endif + +# ifndef __cpp_lib_generic_associative_lookup +# error "__cpp_lib_generic_associative_lookup should be defined in c++20" +# endif +# if __cpp_lib_generic_associative_lookup != 201304L +# error "__cpp_lib_generic_associative_lookup should have the value 201304L in c++20" +# endif + +# ifndef __cpp_lib_generic_unordered_lookup +# error "__cpp_lib_generic_unordered_lookup should be defined in c++20" +# endif +# if __cpp_lib_generic_unordered_lookup != 201811L +# error "__cpp_lib_generic_unordered_lookup should have the value 201811L in c++20" +# endif + +# if !defined(_LIBCPP_VERSION) || (defined(__GCC_DESTRUCTIVE_SIZE) && defined(__GCC_CONSTRUCTIVE_SIZE)) +# ifndef __cpp_lib_hardware_interference_size +# error "__cpp_lib_hardware_interference_size should be defined in c++20" +# endif +# if __cpp_lib_hardware_interference_size != 201703L +# error "__cpp_lib_hardware_interference_size should have the value 201703L in c++20" +# endif +# else +# ifdef __cpp_lib_hardware_interference_size +# error "__cpp_lib_hardware_interference_size should not be defined when the requirement '!defined(_LIBCPP_VERSION) || (defined(__GCC_DESTRUCTIVE_SIZE) && defined(__GCC_CONSTRUCTIVE_SIZE))' is not met!" +# endif +# endif + +# ifndef __cpp_lib_has_unique_object_representations +# error "__cpp_lib_has_unique_object_representations should be defined in c++20" +# endif +# if __cpp_lib_has_unique_object_representations != 201606L +# error "__cpp_lib_has_unique_object_representations should have the value 201606L in c++20" +# endif + +# ifdef __cpp_lib_hazard_pointer +# error "__cpp_lib_hazard_pointer should not be defined before c++26" +# endif + +# ifndef __cpp_lib_hypot +# error "__cpp_lib_hypot should be defined in c++20" +# endif +# if __cpp_lib_hypot != 201603L +# error "__cpp_lib_hypot should have the value 201603L in c++20" +# endif + +# ifndef __cpp_lib_incomplete_container_elements +# error "__cpp_lib_incomplete_container_elements should be defined in c++20" +# endif +# if __cpp_lib_incomplete_container_elements != 201505L +# error "__cpp_lib_incomplete_container_elements should have the value 201505L in c++20" +# endif + +# ifdef __cpp_lib_inplace_vector +# error "__cpp_lib_inplace_vector should not be defined before c++26" +# endif + +# ifndef __cpp_lib_int_pow2 +# error "__cpp_lib_int_pow2 should be defined in c++20" +# endif +# if __cpp_lib_int_pow2 != 202002L +# error "__cpp_lib_int_pow2 should have the value 202002L in c++20" +# endif + +# ifndef __cpp_lib_integer_comparison_functions +# error "__cpp_lib_integer_comparison_functions should be defined in c++20" +# endif +# if __cpp_lib_integer_comparison_functions != 202002L +# error "__cpp_lib_integer_comparison_functions should have the value 202002L in c++20" +# endif + +# ifndef __cpp_lib_integer_sequence +# error "__cpp_lib_integer_sequence should be defined in c++20" +# endif +# if __cpp_lib_integer_sequence != 201304L +# error "__cpp_lib_integer_sequence should have the value 201304L in c++20" +# endif + +# ifndef __cpp_lib_integral_constant_callable +# error "__cpp_lib_integral_constant_callable should be defined in c++20" +# endif +# if __cpp_lib_integral_constant_callable != 201304L +# error "__cpp_lib_integral_constant_callable should have the value 201304L in c++20" +# endif + +# ifndef __cpp_lib_interpolate +# error "__cpp_lib_interpolate should be defined in c++20" +# endif +# if __cpp_lib_interpolate != 201902L +# error "__cpp_lib_interpolate should have the value 201902L in c++20" +# endif + +# ifndef __cpp_lib_invoke +# error "__cpp_lib_invoke should be defined in c++20" +# endif +# if __cpp_lib_invoke != 201411L +# error "__cpp_lib_invoke should have the value 201411L in c++20" +# endif + +# ifdef __cpp_lib_invoke_r +# error "__cpp_lib_invoke_r should not be defined before c++23" +# endif + +# ifdef __cpp_lib_ios_noreplace +# error "__cpp_lib_ios_noreplace should not be defined before c++23" +# endif + +# ifndef __cpp_lib_is_aggregate +# error "__cpp_lib_is_aggregate should be defined in c++20" +# endif +# if __cpp_lib_is_aggregate != 201703L +# error "__cpp_lib_is_aggregate should have the value 201703L in c++20" +# endif + +# ifndef __cpp_lib_is_constant_evaluated +# error "__cpp_lib_is_constant_evaluated should be defined in c++20" +# endif +# if __cpp_lib_is_constant_evaluated != 201811L +# error "__cpp_lib_is_constant_evaluated should have the value 201811L in c++20" +# endif + +# ifndef __cpp_lib_is_final +# error "__cpp_lib_is_final should be defined in c++20" +# endif +# if __cpp_lib_is_final != 201402L +# error "__cpp_lib_is_final should have the value 201402L in c++20" +# endif + +# ifdef __cpp_lib_is_implicit_lifetime +# error "__cpp_lib_is_implicit_lifetime should not be defined before c++23" +# endif + +# ifndef __cpp_lib_is_invocable +# error "__cpp_lib_is_invocable should be defined in c++20" +# endif +# if __cpp_lib_is_invocable != 201703L +# error "__cpp_lib_is_invocable should have the value 201703L in c++20" +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_is_layout_compatible +# error "__cpp_lib_is_layout_compatible should be defined in c++20" +# endif +# if __cpp_lib_is_layout_compatible != 201907L +# error "__cpp_lib_is_layout_compatible should have the value 201907L in c++20" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_is_layout_compatible +# error "__cpp_lib_is_layout_compatible should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# ifndef __cpp_lib_is_nothrow_convertible +# error "__cpp_lib_is_nothrow_convertible should be defined in c++20" +# endif +# if __cpp_lib_is_nothrow_convertible != 201806L +# error "__cpp_lib_is_nothrow_convertible should have the value 201806L in c++20" +# endif + +# ifndef __cpp_lib_is_null_pointer +# error "__cpp_lib_is_null_pointer should be defined in c++20" +# endif +# if __cpp_lib_is_null_pointer != 201309L +# error "__cpp_lib_is_null_pointer should have the value 201309L in c++20" +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_is_pointer_interconvertible +# error "__cpp_lib_is_pointer_interconvertible should be defined in c++20" +# endif +# if __cpp_lib_is_pointer_interconvertible != 201907L +# error "__cpp_lib_is_pointer_interconvertible should have the value 201907L in c++20" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_is_pointer_interconvertible +# error "__cpp_lib_is_pointer_interconvertible should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# ifdef __cpp_lib_is_scoped_enum +# error "__cpp_lib_is_scoped_enum should not be defined before c++23" +# endif + +# ifndef __cpp_lib_is_swappable +# error "__cpp_lib_is_swappable should be defined in c++20" +# endif +# if __cpp_lib_is_swappable != 201603L +# error "__cpp_lib_is_swappable should have the value 201603L in c++20" +# endif + +# ifdef __cpp_lib_is_virtual_base_of +# error "__cpp_lib_is_virtual_base_of should not be defined before c++26" +# endif + +# ifdef __cpp_lib_is_within_lifetime +# error "__cpp_lib_is_within_lifetime should not be defined before c++26" +# endif + +# if !defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC) +# ifndef __cpp_lib_jthread +# error "__cpp_lib_jthread should be defined in c++20" +# endif +# if __cpp_lib_jthread != 201911L +# error "__cpp_lib_jthread should have the value 201911L in c++20" +# endif +# else +# ifdef __cpp_lib_jthread +# error "__cpp_lib_jthread should not be defined when the requirement '!defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC)' is not met!" +# endif +# endif + +# if !defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC) +# ifndef __cpp_lib_latch +# error "__cpp_lib_latch should be defined in c++20" +# endif +# if __cpp_lib_latch != 201907L +# error "__cpp_lib_latch should have the value 201907L in c++20" +# endif +# else +# ifdef __cpp_lib_latch +# error "__cpp_lib_latch should not be defined when the requirement '!defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC)' is not met!" +# endif +# endif + +# ifndef __cpp_lib_launder +# error "__cpp_lib_launder should be defined in c++20" +# endif +# if __cpp_lib_launder != 201606L +# error "__cpp_lib_launder should have the value 201606L in c++20" +# endif + +# ifdef __cpp_lib_linalg +# error "__cpp_lib_linalg should not be defined before c++26" +# endif + +# ifndef __cpp_lib_list_remove_return_type +# error "__cpp_lib_list_remove_return_type should be defined in c++20" +# endif +# if __cpp_lib_list_remove_return_type != 201806L +# error "__cpp_lib_list_remove_return_type should have the value 201806L in c++20" +# endif + +# ifndef __cpp_lib_logical_traits +# error "__cpp_lib_logical_traits should be defined in c++20" +# endif +# if __cpp_lib_logical_traits != 201510L +# error "__cpp_lib_logical_traits should have the value 201510L in c++20" +# endif + +# ifndef __cpp_lib_make_from_tuple +# error "__cpp_lib_make_from_tuple should be defined in c++20" +# endif +# if __cpp_lib_make_from_tuple != 201606L +# error "__cpp_lib_make_from_tuple should have the value 201606L in c++20" +# endif + +# ifndef __cpp_lib_make_reverse_iterator +# error "__cpp_lib_make_reverse_iterator should be defined in c++20" +# endif +# if __cpp_lib_make_reverse_iterator != 201402L +# error "__cpp_lib_make_reverse_iterator should have the value 201402L in c++20" +# endif + +# ifndef __cpp_lib_make_unique +# error "__cpp_lib_make_unique should be defined in c++20" +# endif +# if __cpp_lib_make_unique != 201304L +# error "__cpp_lib_make_unique should have the value 201304L in c++20" +# endif + +# ifndef __cpp_lib_map_try_emplace +# error "__cpp_lib_map_try_emplace should be defined in c++20" +# endif +# if __cpp_lib_map_try_emplace != 201411L +# error "__cpp_lib_map_try_emplace should have the value 201411L in c++20" +# endif + +# ifndef __cpp_lib_math_constants +# error "__cpp_lib_math_constants should be defined in c++20" +# endif +# if __cpp_lib_math_constants != 201907L +# error "__cpp_lib_math_constants should have the value 201907L in c++20" +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_math_special_functions +# error "__cpp_lib_math_special_functions should be defined in c++20" +# endif +# if __cpp_lib_math_special_functions != 201603L +# error "__cpp_lib_math_special_functions should have the value 201603L in c++20" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_math_special_functions +# error "__cpp_lib_math_special_functions should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# ifdef __cpp_lib_mdspan +# error "__cpp_lib_mdspan should not be defined before c++23" +# endif + +# if !defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_PMR +# ifndef __cpp_lib_memory_resource +# error "__cpp_lib_memory_resource should be defined in c++20" +# endif +# if __cpp_lib_memory_resource != 201603L +# error "__cpp_lib_memory_resource should have the value 201603L in c++20" +# endif +# else +# ifdef __cpp_lib_memory_resource +# error "__cpp_lib_memory_resource should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_PMR' is not met!" +# endif +# endif + +# ifdef __cpp_lib_modules +# error "__cpp_lib_modules should not be defined before c++23" +# endif + +# ifndef __cpp_lib_move_iterator_concept +# error "__cpp_lib_move_iterator_concept should be defined in c++20" +# endif +# if __cpp_lib_move_iterator_concept != 202207L +# error "__cpp_lib_move_iterator_concept should have the value 202207L in c++20" +# endif + +# ifdef __cpp_lib_move_only_function +# error "__cpp_lib_move_only_function should not be defined before c++23" +# endif + +# ifndef __cpp_lib_node_extract +# error "__cpp_lib_node_extract should be defined in c++20" +# endif +# if __cpp_lib_node_extract != 201606L +# error "__cpp_lib_node_extract should have the value 201606L in c++20" +# endif + +# ifndef __cpp_lib_nonmember_container_access +# error "__cpp_lib_nonmember_container_access should be defined in c++20" +# endif +# if __cpp_lib_nonmember_container_access != 201411L +# error "__cpp_lib_nonmember_container_access should have the value 201411L in c++20" +# endif + +# ifndef __cpp_lib_not_fn +# error "__cpp_lib_not_fn should be defined in c++20" +# endif +# if __cpp_lib_not_fn != 201603L +# error "__cpp_lib_not_fn should have the value 201603L in c++20" +# endif + +# ifndef __cpp_lib_null_iterators +# error "__cpp_lib_null_iterators should be defined in c++20" +# endif +# if __cpp_lib_null_iterators != 201304L +# error "__cpp_lib_null_iterators should have the value 201304L in c++20" +# endif + +# ifndef __cpp_lib_optional +# error "__cpp_lib_optional should be defined in c++20" +# endif +# if __cpp_lib_optional != 202106L +# error "__cpp_lib_optional should have the value 202106L in c++20" +# endif + +# ifdef __cpp_lib_optional_range_support +# error "__cpp_lib_optional_range_support should not be defined before c++26" +# endif + +# ifdef __cpp_lib_out_ptr +# error "__cpp_lib_out_ptr should not be defined before c++23" +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_parallel_algorithm +# error "__cpp_lib_parallel_algorithm should be defined in c++20" +# endif +# if __cpp_lib_parallel_algorithm != 201603L +# error "__cpp_lib_parallel_algorithm should have the value 201603L in c++20" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_parallel_algorithm +# error "__cpp_lib_parallel_algorithm should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# ifdef __cpp_lib_philox_engine +# error "__cpp_lib_philox_engine should not be defined before c++26" +# endif + +# if !defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_PMR +# ifndef __cpp_lib_polymorphic_allocator +# error "__cpp_lib_polymorphic_allocator should be defined in c++20" +# endif +# if __cpp_lib_polymorphic_allocator != 201902L +# error "__cpp_lib_polymorphic_allocator should have the value 201902L in c++20" +# endif +# else +# ifdef __cpp_lib_polymorphic_allocator +# error "__cpp_lib_polymorphic_allocator should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_PMR' is not met!" +# endif +# endif + +# ifdef __cpp_lib_print +# error "__cpp_lib_print should not be defined before c++23" +# endif + +# if !defined(_LIBCPP_VERSION) || _LIBCPP_HAS_LOCALIZATION +# ifndef __cpp_lib_quoted_string_io +# error "__cpp_lib_quoted_string_io should be defined in c++20" +# endif +# if __cpp_lib_quoted_string_io != 201304L +# error "__cpp_lib_quoted_string_io should have the value 201304L in c++20" +# endif +# else +# ifdef __cpp_lib_quoted_string_io +# error "__cpp_lib_quoted_string_io should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_HAS_LOCALIZATION' is not met!" +# endif +# endif + +# ifndef __cpp_lib_ranges +# error "__cpp_lib_ranges should be defined in c++20" +# endif +# if __cpp_lib_ranges != 202110L +# error "__cpp_lib_ranges should have the value 202110L in c++20" +# endif + +# ifdef __cpp_lib_ranges_as_const +# error "__cpp_lib_ranges_as_const should not be defined before c++23" +# endif + +# ifdef __cpp_lib_ranges_as_rvalue +# error "__cpp_lib_ranges_as_rvalue should not be defined before c++23" +# endif + +# ifdef __cpp_lib_ranges_chunk +# error "__cpp_lib_ranges_chunk should not be defined before c++23" +# endif + +# ifdef __cpp_lib_ranges_chunk_by +# error "__cpp_lib_ranges_chunk_by should not be defined before c++23" +# endif + +# ifdef __cpp_lib_ranges_concat +# error "__cpp_lib_ranges_concat should not be defined before c++26" +# endif + +# ifdef __cpp_lib_ranges_contains +# error "__cpp_lib_ranges_contains should not be defined before c++23" +# endif + +# ifdef __cpp_lib_ranges_find_last +# error "__cpp_lib_ranges_find_last should not be defined before c++23" +# endif + +# ifdef __cpp_lib_ranges_iota +# error "__cpp_lib_ranges_iota should not be defined before c++23" +# endif + +# ifdef __cpp_lib_ranges_join_with +# error "__cpp_lib_ranges_join_with should not be defined before c++23" +# endif + +# ifdef __cpp_lib_ranges_repeat +# error "__cpp_lib_ranges_repeat should not be defined before c++23" +# endif + +# ifdef __cpp_lib_ranges_slide +# error "__cpp_lib_ranges_slide should not be defined before c++23" +# endif + +# ifdef __cpp_lib_ranges_starts_ends_with +# error "__cpp_lib_ranges_starts_ends_with should not be defined before c++23" +# endif + +# ifdef __cpp_lib_ranges_to_container +# error "__cpp_lib_ranges_to_container should not be defined before c++23" +# endif + +# ifdef __cpp_lib_ranges_zip +# error "__cpp_lib_ranges_zip should not be defined before c++23" +# endif + +# ifdef __cpp_lib_ratio +# error "__cpp_lib_ratio should not be defined before c++26" +# endif + +# ifndef __cpp_lib_raw_memory_algorithms +# error "__cpp_lib_raw_memory_algorithms should be defined in c++20" +# endif +# if __cpp_lib_raw_memory_algorithms != 201606L +# error "__cpp_lib_raw_memory_algorithms should have the value 201606L in c++20" +# endif + +# ifdef __cpp_lib_rcu +# error "__cpp_lib_rcu should not be defined before c++26" +# endif + +# ifdef __cpp_lib_reference_from_temporary +# error "__cpp_lib_reference_from_temporary should not be defined before c++23" +# endif + +# ifdef __cpp_lib_reference_wrapper +# error "__cpp_lib_reference_wrapper should not be defined before c++26" +# endif + +# ifndef __cpp_lib_remove_cvref +# error "__cpp_lib_remove_cvref should be defined in c++20" +# endif +# if __cpp_lib_remove_cvref != 201711L +# error "__cpp_lib_remove_cvref should have the value 201711L in c++20" +# endif + +# ifndef __cpp_lib_result_of_sfinae +# error "__cpp_lib_result_of_sfinae should be defined in c++20" +# endif +# if __cpp_lib_result_of_sfinae != 201210L +# error "__cpp_lib_result_of_sfinae should have the value 201210L in c++20" +# endif + +# ifndef __cpp_lib_robust_nonmodifying_seq_ops +# error "__cpp_lib_robust_nonmodifying_seq_ops should be defined in c++20" +# endif +# if __cpp_lib_robust_nonmodifying_seq_ops != 201304L +# error "__cpp_lib_robust_nonmodifying_seq_ops should have the value 201304L in c++20" +# endif + +# ifndef __cpp_lib_sample +# error "__cpp_lib_sample should be defined in c++20" +# endif +# if __cpp_lib_sample != 201603L +# error "__cpp_lib_sample should have the value 201603L in c++20" +# endif + +# ifdef __cpp_lib_saturation_arithmetic +# error "__cpp_lib_saturation_arithmetic should not be defined before c++26" +# endif + +# if !defined(_LIBCPP_VERSION) || _LIBCPP_HAS_THREADS +# ifndef __cpp_lib_scoped_lock +# error "__cpp_lib_scoped_lock should be defined in c++20" +# endif +# if __cpp_lib_scoped_lock != 201703L +# error "__cpp_lib_scoped_lock should have the value 201703L in c++20" +# endif +# else +# ifdef __cpp_lib_scoped_lock +# error "__cpp_lib_scoped_lock should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_HAS_THREADS' is not met!" +# endif +# endif + +# if !defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC) +# ifndef __cpp_lib_semaphore +# error "__cpp_lib_semaphore should be defined in c++20" +# endif +# if __cpp_lib_semaphore != 201907L +# error "__cpp_lib_semaphore should have the value 201907L in c++20" +# endif +# else +# ifdef __cpp_lib_semaphore +# error "__cpp_lib_semaphore should not be defined when the requirement '!defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC)' is not met!" +# endif +# endif + +# ifdef __cpp_lib_senders +# error "__cpp_lib_senders should not be defined before c++26" +# endif + +# if _LIBCPP_HAS_THREADS +# ifndef __cpp_lib_shared_mutex +# error "__cpp_lib_shared_mutex should be defined in c++20" +# endif +# if __cpp_lib_shared_mutex != 201505L +# error "__cpp_lib_shared_mutex should have the value 201505L in c++20" +# endif +# else +# ifdef __cpp_lib_shared_mutex +# error "__cpp_lib_shared_mutex should not be defined when the requirement '_LIBCPP_HAS_THREADS' is not met!" +# endif +# endif + +# ifndef __cpp_lib_shared_ptr_arrays +# error "__cpp_lib_shared_ptr_arrays should be defined in c++20" +# endif +# if __cpp_lib_shared_ptr_arrays != 201707L +# error "__cpp_lib_shared_ptr_arrays should have the value 201707L in c++20" +# endif + +# ifndef __cpp_lib_shared_ptr_weak_type +# error "__cpp_lib_shared_ptr_weak_type should be defined in c++20" +# endif +# if __cpp_lib_shared_ptr_weak_type != 201606L +# error "__cpp_lib_shared_ptr_weak_type should have the value 201606L in c++20" +# endif + +# if _LIBCPP_HAS_THREADS +# ifndef __cpp_lib_shared_timed_mutex +# error "__cpp_lib_shared_timed_mutex should be defined in c++20" +# endif +# if __cpp_lib_shared_timed_mutex != 201402L +# error "__cpp_lib_shared_timed_mutex should have the value 201402L in c++20" +# endif +# else +# ifdef __cpp_lib_shared_timed_mutex +# error "__cpp_lib_shared_timed_mutex should not be defined when the requirement '_LIBCPP_HAS_THREADS' is not met!" +# endif +# endif + +# ifndef __cpp_lib_shift +# error "__cpp_lib_shift should be defined in c++20" +# endif +# if __cpp_lib_shift != 201806L +# error "__cpp_lib_shift should have the value 201806L in c++20" +# endif + +# ifndef __cpp_lib_smart_ptr_for_overwrite +# error "__cpp_lib_smart_ptr_for_overwrite should be defined in c++20" +# endif +# if __cpp_lib_smart_ptr_for_overwrite != 202002L +# error "__cpp_lib_smart_ptr_for_overwrite should have the value 202002L in c++20" +# endif + +# ifdef __cpp_lib_smart_ptr_owner_equality +# error "__cpp_lib_smart_ptr_owner_equality should not be defined before c++26" +# endif + +# ifndef __cpp_lib_source_location +# error "__cpp_lib_source_location should be defined in c++20" +# endif +# if __cpp_lib_source_location != 201907L +# error "__cpp_lib_source_location should have the value 201907L in c++20" +# endif + +# ifndef __cpp_lib_span +# error "__cpp_lib_span should be defined in c++20" +# endif +# if __cpp_lib_span != 202002L +# error "__cpp_lib_span should have the value 202002L in c++20" +# endif + +# ifdef __cpp_lib_span_at +# error "__cpp_lib_span_at should not be defined before c++26" +# endif + +# ifdef __cpp_lib_span_initializer_list +# error "__cpp_lib_span_initializer_list should not be defined before c++26" +# endif + +# ifdef __cpp_lib_spanstream +# error "__cpp_lib_spanstream should not be defined before c++23" +# endif + +# ifndef __cpp_lib_ssize +# error "__cpp_lib_ssize should be defined in c++20" +# endif +# if __cpp_lib_ssize != 201902L +# error "__cpp_lib_ssize should have the value 201902L in c++20" +# endif + +# ifdef __cpp_lib_sstream_from_string_view +# error "__cpp_lib_sstream_from_string_view should not be defined before c++26" +# endif + +# ifdef __cpp_lib_stacktrace +# error "__cpp_lib_stacktrace should not be defined before c++23" +# endif + +# ifndef __cpp_lib_starts_ends_with +# error "__cpp_lib_starts_ends_with should be defined in c++20" +# endif +# if __cpp_lib_starts_ends_with != 201711L +# error "__cpp_lib_starts_ends_with should have the value 201711L in c++20" +# endif + +# ifdef __cpp_lib_stdatomic_h +# error "__cpp_lib_stdatomic_h should not be defined before c++23" +# endif + +# ifdef __cpp_lib_string_contains +# error "__cpp_lib_string_contains should not be defined before c++23" +# endif + +# ifdef __cpp_lib_string_resize_and_overwrite +# error "__cpp_lib_string_resize_and_overwrite should not be defined before c++23" +# endif + +# ifndef __cpp_lib_string_udls +# error "__cpp_lib_string_udls should be defined in c++20" +# endif +# if __cpp_lib_string_udls != 201304L +# error "__cpp_lib_string_udls should have the value 201304L in c++20" +# endif + +# ifndef __cpp_lib_string_view +# error "__cpp_lib_string_view should be defined in c++20" +# endif +# if __cpp_lib_string_view != 201803L +# error "__cpp_lib_string_view should have the value 201803L in c++20" +# endif + +# ifdef __cpp_lib_submdspan +# error "__cpp_lib_submdspan should not be defined before c++26" +# endif + +# if !defined(_LIBCPP_VERSION) || _LIBCPP_HAS_EXPERIMENTAL_SYNCSTREAM +# ifndef __cpp_lib_syncbuf +# error "__cpp_lib_syncbuf should be defined in c++20" +# endif +# if __cpp_lib_syncbuf != 201803L +# error "__cpp_lib_syncbuf should have the value 201803L in c++20" +# endif +# else +# ifdef __cpp_lib_syncbuf +# error "__cpp_lib_syncbuf should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_HAS_EXPERIMENTAL_SYNCSTREAM' is not met!" +# endif +# endif + +# ifdef __cpp_lib_text_encoding +# error "__cpp_lib_text_encoding should not be defined before c++26" +# endif + +# ifndef __cpp_lib_three_way_comparison +# error "__cpp_lib_three_way_comparison should be defined in c++20" +# endif +# if __cpp_lib_three_way_comparison != 201907L +# error "__cpp_lib_three_way_comparison should have the value 201907L in c++20" +# endif + +# ifndef __cpp_lib_to_address +# error "__cpp_lib_to_address should be defined in c++20" +# endif +# if __cpp_lib_to_address != 201711L +# error "__cpp_lib_to_address should have the value 201711L in c++20" +# endif + +# ifndef __cpp_lib_to_array +# error "__cpp_lib_to_array should be defined in c++20" +# endif +# if __cpp_lib_to_array != 201907L +# error "__cpp_lib_to_array should have the value 201907L in c++20" +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_to_chars +# error "__cpp_lib_to_chars should be defined in c++20" +# endif +# if __cpp_lib_to_chars != 201611L +# error "__cpp_lib_to_chars should have the value 201611L in c++20" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_to_chars +# error "__cpp_lib_to_chars should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# ifdef __cpp_lib_to_string +# error "__cpp_lib_to_string should not be defined before c++26" +# endif + +# ifdef __cpp_lib_to_underlying +# error "__cpp_lib_to_underlying should not be defined before c++23" +# endif + +# ifndef __cpp_lib_transformation_trait_aliases +# error "__cpp_lib_transformation_trait_aliases should be defined in c++20" +# endif +# if __cpp_lib_transformation_trait_aliases != 201304L +# error "__cpp_lib_transformation_trait_aliases should have the value 201304L in c++20" +# endif + +# ifndef __cpp_lib_transparent_operators +# error "__cpp_lib_transparent_operators should be defined in c++20" +# endif +# if __cpp_lib_transparent_operators != 201510L +# error "__cpp_lib_transparent_operators should have the value 201510L in c++20" +# endif + +# ifndef __cpp_lib_tuple_element_t +# error "__cpp_lib_tuple_element_t should be defined in c++20" +# endif +# if __cpp_lib_tuple_element_t != 201402L +# error "__cpp_lib_tuple_element_t should have the value 201402L in c++20" +# endif + +# ifdef __cpp_lib_tuple_like +# error "__cpp_lib_tuple_like should not be defined before c++23" +# endif + +# ifndef __cpp_lib_tuples_by_type +# error "__cpp_lib_tuples_by_type should be defined in c++20" +# endif +# if __cpp_lib_tuples_by_type != 201304L +# error "__cpp_lib_tuples_by_type should have the value 201304L in c++20" +# endif + +# ifndef __cpp_lib_type_identity +# error "__cpp_lib_type_identity should be defined in c++20" +# endif +# if __cpp_lib_type_identity != 201806L +# error "__cpp_lib_type_identity should have the value 201806L in c++20" +# endif + +# ifndef __cpp_lib_type_trait_variable_templates +# error "__cpp_lib_type_trait_variable_templates should be defined in c++20" +# endif +# if __cpp_lib_type_trait_variable_templates != 201510L +# error "__cpp_lib_type_trait_variable_templates should have the value 201510L in c++20" +# endif + +# ifndef __cpp_lib_uncaught_exceptions +# error "__cpp_lib_uncaught_exceptions should be defined in c++20" +# endif +# if __cpp_lib_uncaught_exceptions != 201411L +# error "__cpp_lib_uncaught_exceptions should have the value 201411L in c++20" +# endif + +# ifndef __cpp_lib_unordered_map_try_emplace +# error "__cpp_lib_unordered_map_try_emplace should be defined in c++20" +# endif +# if __cpp_lib_unordered_map_try_emplace != 201411L +# error "__cpp_lib_unordered_map_try_emplace should have the value 201411L in c++20" +# endif + +# ifdef __cpp_lib_unreachable +# error "__cpp_lib_unreachable should not be defined before c++23" +# endif + +# ifndef __cpp_lib_unwrap_ref +# error "__cpp_lib_unwrap_ref should be defined in c++20" +# endif +# if __cpp_lib_unwrap_ref != 201811L +# error "__cpp_lib_unwrap_ref should have the value 201811L in c++20" +# endif + +# ifndef __cpp_lib_variant +# error "__cpp_lib_variant should be defined in c++20" +# endif +# if __cpp_lib_variant != 202106L +# error "__cpp_lib_variant should have the value 202106L in c++20" +# endif + +# ifndef __cpp_lib_void_t +# error "__cpp_lib_void_t should be defined in c++20" +# endif +# if __cpp_lib_void_t != 201411L +# error "__cpp_lib_void_t should have the value 201411L in c++20" +# endif + +#elif TEST_STD_VER == 23 + +# ifndef __cpp_lib_adaptor_iterator_pair_constructor +# error "__cpp_lib_adaptor_iterator_pair_constructor should be defined in c++23" +# endif +# if __cpp_lib_adaptor_iterator_pair_constructor != 202106L +# error "__cpp_lib_adaptor_iterator_pair_constructor should have the value 202106L in c++23" +# endif + +# ifndef __cpp_lib_addressof_constexpr +# error "__cpp_lib_addressof_constexpr should be defined in c++23" +# endif +# if __cpp_lib_addressof_constexpr != 201603L +# error "__cpp_lib_addressof_constexpr should have the value 201603L in c++23" +# endif + +# ifndef __cpp_lib_allocate_at_least +# error "__cpp_lib_allocate_at_least should be defined in c++23" +# endif +# if __cpp_lib_allocate_at_least != 202302L +# error "__cpp_lib_allocate_at_least should have the value 202302L in c++23" +# endif + +# ifndef __cpp_lib_allocator_traits_is_always_equal +# error "__cpp_lib_allocator_traits_is_always_equal should be defined in c++23" +# endif +# if __cpp_lib_allocator_traits_is_always_equal != 201411L +# error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++23" +# endif + +# ifndef __cpp_lib_any +# error "__cpp_lib_any should be defined in c++23" +# endif +# if __cpp_lib_any != 201606L +# error "__cpp_lib_any should have the value 201606L in c++23" +# endif + +# ifndef __cpp_lib_apply +# error "__cpp_lib_apply should be defined in c++23" +# endif +# if __cpp_lib_apply != 201603L +# error "__cpp_lib_apply should have the value 201603L in c++23" +# endif + +# ifndef __cpp_lib_array_constexpr +# error "__cpp_lib_array_constexpr should be defined in c++23" +# endif +# if __cpp_lib_array_constexpr != 201811L +# error "__cpp_lib_array_constexpr should have the value 201811L in c++23" +# endif + +# ifndef __cpp_lib_as_const +# error "__cpp_lib_as_const should be defined in c++23" +# endif +# if __cpp_lib_as_const != 201510L +# error "__cpp_lib_as_const should have the value 201510L in c++23" +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_associative_heterogeneous_erasure +# error "__cpp_lib_associative_heterogeneous_erasure should be defined in c++23" +# endif +# if __cpp_lib_associative_heterogeneous_erasure != 202110L +# error "__cpp_lib_associative_heterogeneous_erasure should have the value 202110L in c++23" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_associative_heterogeneous_erasure +# error "__cpp_lib_associative_heterogeneous_erasure should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# ifdef __cpp_lib_associative_heterogeneous_insertion +# error "__cpp_lib_associative_heterogeneous_insertion should not be defined before c++26" +# endif + +# ifndef __cpp_lib_assume_aligned +# error "__cpp_lib_assume_aligned should be defined in c++23" +# endif +# if __cpp_lib_assume_aligned != 201811L +# error "__cpp_lib_assume_aligned should have the value 201811L in c++23" +# endif + +# ifndef __cpp_lib_atomic_flag_test +# error "__cpp_lib_atomic_flag_test should be defined in c++23" +# endif +# if __cpp_lib_atomic_flag_test != 201907L +# error "__cpp_lib_atomic_flag_test should have the value 201907L in c++23" +# endif + +# ifndef __cpp_lib_atomic_float +# error "__cpp_lib_atomic_float should be defined in c++23" +# endif +# if __cpp_lib_atomic_float != 201711L +# error "__cpp_lib_atomic_float should have the value 201711L in c++23" +# endif + +# ifndef __cpp_lib_atomic_is_always_lock_free +# error "__cpp_lib_atomic_is_always_lock_free should be defined in c++23" +# endif +# if __cpp_lib_atomic_is_always_lock_free != 201603L +# error "__cpp_lib_atomic_is_always_lock_free should have the value 201603L in c++23" +# endif + +# ifndef __cpp_lib_atomic_lock_free_type_aliases +# error "__cpp_lib_atomic_lock_free_type_aliases should be defined in c++23" +# endif +# if __cpp_lib_atomic_lock_free_type_aliases != 201907L +# error "__cpp_lib_atomic_lock_free_type_aliases should have the value 201907L in c++23" +# endif + +# ifdef __cpp_lib_atomic_min_max +# error "__cpp_lib_atomic_min_max should not be defined before c++26" +# endif + +# ifndef __cpp_lib_atomic_ref +# error "__cpp_lib_atomic_ref should be defined in c++23" +# endif +# if __cpp_lib_atomic_ref != 201806L +# error "__cpp_lib_atomic_ref should have the value 201806L in c++23" +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_atomic_shared_ptr +# error "__cpp_lib_atomic_shared_ptr should be defined in c++23" +# endif +# if __cpp_lib_atomic_shared_ptr != 201711L +# error "__cpp_lib_atomic_shared_ptr should have the value 201711L in c++23" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_atomic_shared_ptr +# error "__cpp_lib_atomic_shared_ptr should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# ifndef __cpp_lib_atomic_value_initialization +# error "__cpp_lib_atomic_value_initialization should be defined in c++23" +# endif +# if __cpp_lib_atomic_value_initialization != 201911L +# error "__cpp_lib_atomic_value_initialization should have the value 201911L in c++23" +# endif + +# if !defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_SYNC +# ifndef __cpp_lib_atomic_wait +# error "__cpp_lib_atomic_wait should be defined in c++23" +# endif +# if __cpp_lib_atomic_wait != 201907L +# error "__cpp_lib_atomic_wait should have the value 201907L in c++23" +# endif +# else +# ifdef __cpp_lib_atomic_wait +# error "__cpp_lib_atomic_wait should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_SYNC' is not met!" +# endif +# endif + +# if !defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC) +# ifndef __cpp_lib_barrier +# error "__cpp_lib_barrier should be defined in c++23" +# endif +# if __cpp_lib_barrier != 201907L +# error "__cpp_lib_barrier should have the value 201907L in c++23" +# endif +# else +# ifdef __cpp_lib_barrier +# error "__cpp_lib_barrier should not be defined when the requirement '!defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC)' is not met!" +# endif +# endif + +# ifndef __cpp_lib_bind_back +# error "__cpp_lib_bind_back should be defined in c++23" +# endif +# if __cpp_lib_bind_back != 202202L +# error "__cpp_lib_bind_back should have the value 202202L in c++23" +# endif + +# ifndef __cpp_lib_bind_front +# error "__cpp_lib_bind_front should be defined in c++23" +# endif +# if __cpp_lib_bind_front != 201907L +# error "__cpp_lib_bind_front should have the value 201907L in c++23" +# endif + +# ifndef __cpp_lib_bit_cast +# error "__cpp_lib_bit_cast should be defined in c++23" +# endif +# if __cpp_lib_bit_cast != 201806L +# error "__cpp_lib_bit_cast should have the value 201806L in c++23" +# endif + +# ifndef __cpp_lib_bitops +# error "__cpp_lib_bitops should be defined in c++23" +# endif +# if __cpp_lib_bitops != 201907L +# error "__cpp_lib_bitops should have the value 201907L in c++23" +# endif + +# ifdef __cpp_lib_bitset +# error "__cpp_lib_bitset should not be defined before c++26" +# endif + +# ifndef __cpp_lib_bool_constant +# error "__cpp_lib_bool_constant should be defined in c++23" +# endif +# if __cpp_lib_bool_constant != 201505L +# error "__cpp_lib_bool_constant should have the value 201505L in c++23" +# endif + +# ifndef __cpp_lib_bounded_array_traits +# error "__cpp_lib_bounded_array_traits should be defined in c++23" +# endif +# if __cpp_lib_bounded_array_traits != 201902L +# error "__cpp_lib_bounded_array_traits should have the value 201902L in c++23" +# endif + +# ifndef __cpp_lib_boyer_moore_searcher +# error "__cpp_lib_boyer_moore_searcher should be defined in c++23" +# endif +# if __cpp_lib_boyer_moore_searcher != 201603L +# error "__cpp_lib_boyer_moore_searcher should have the value 201603L in c++23" +# endif + +# ifndef __cpp_lib_byte +# error "__cpp_lib_byte should be defined in c++23" +# endif +# if __cpp_lib_byte != 201603L +# error "__cpp_lib_byte should have the value 201603L in c++23" +# endif + +# ifndef __cpp_lib_byteswap +# error "__cpp_lib_byteswap should be defined in c++23" +# endif +# if __cpp_lib_byteswap != 202110L +# error "__cpp_lib_byteswap should have the value 202110L in c++23" +# endif + +# if defined(__cpp_char8_t) +# ifndef __cpp_lib_char8_t +# error "__cpp_lib_char8_t should be defined in c++23" +# endif +# if __cpp_lib_char8_t != 201907L +# error "__cpp_lib_char8_t should have the value 201907L in c++23" +# endif +# else +# ifdef __cpp_lib_char8_t +# error "__cpp_lib_char8_t should not be defined when the requirement 'defined(__cpp_char8_t)' is not met!" +# endif +# endif + +# ifndef __cpp_lib_chrono +# error "__cpp_lib_chrono should be defined in c++23" +# endif +# if __cpp_lib_chrono != 201611L +# error "__cpp_lib_chrono should have the value 201611L in c++23" +# endif + +# ifndef __cpp_lib_chrono_udls +# error "__cpp_lib_chrono_udls should be defined in c++23" +# endif +# if __cpp_lib_chrono_udls != 201304L +# error "__cpp_lib_chrono_udls should have the value 201304L in c++23" +# endif + +# ifndef __cpp_lib_clamp +# error "__cpp_lib_clamp should be defined in c++23" +# endif +# if __cpp_lib_clamp != 201603L +# error "__cpp_lib_clamp should have the value 201603L in c++23" +# endif + +# ifndef __cpp_lib_complex_udls +# error "__cpp_lib_complex_udls should be defined in c++23" +# endif +# if __cpp_lib_complex_udls != 201309L +# error "__cpp_lib_complex_udls should have the value 201309L in c++23" +# endif + +# ifndef __cpp_lib_concepts +# error "__cpp_lib_concepts should be defined in c++23" +# endif +# if __cpp_lib_concepts != 202002L +# error "__cpp_lib_concepts should have the value 202002L in c++23" +# endif + +# ifndef __cpp_lib_constexpr_algorithms +# error "__cpp_lib_constexpr_algorithms should be defined in c++23" +# endif +# if __cpp_lib_constexpr_algorithms != 201806L +# error "__cpp_lib_constexpr_algorithms should have the value 201806L in c++23" +# endif + +# ifndef __cpp_lib_constexpr_bitset +# error "__cpp_lib_constexpr_bitset should be defined in c++23" +# endif +# if __cpp_lib_constexpr_bitset != 202207L +# error "__cpp_lib_constexpr_bitset should have the value 202207L in c++23" +# endif + +# ifndef __cpp_lib_constexpr_charconv +# error "__cpp_lib_constexpr_charconv should be defined in c++23" +# endif +# if __cpp_lib_constexpr_charconv != 202207L +# error "__cpp_lib_constexpr_charconv should have the value 202207L in c++23" +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_constexpr_cmath +# error "__cpp_lib_constexpr_cmath should be defined in c++23" +# endif +# if __cpp_lib_constexpr_cmath != 202202L +# error "__cpp_lib_constexpr_cmath should have the value 202202L in c++23" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_constexpr_cmath +# error "__cpp_lib_constexpr_cmath should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# ifndef __cpp_lib_constexpr_complex +# error "__cpp_lib_constexpr_complex should be defined in c++23" +# endif +# if __cpp_lib_constexpr_complex != 201711L +# error "__cpp_lib_constexpr_complex should have the value 201711L in c++23" +# endif + +# ifndef __cpp_lib_constexpr_dynamic_alloc +# error "__cpp_lib_constexpr_dynamic_alloc should be defined in c++23" +# endif +# if __cpp_lib_constexpr_dynamic_alloc != 201907L +# error "__cpp_lib_constexpr_dynamic_alloc should have the value 201907L in c++23" +# endif + +# ifdef __cpp_lib_constexpr_forward_list +# error "__cpp_lib_constexpr_forward_list should not be defined before c++26" +# endif + +# ifndef __cpp_lib_constexpr_functional +# error "__cpp_lib_constexpr_functional should be defined in c++23" +# endif +# if __cpp_lib_constexpr_functional != 201907L +# error "__cpp_lib_constexpr_functional should have the value 201907L in c++23" +# endif + +# ifndef __cpp_lib_constexpr_iterator +# error "__cpp_lib_constexpr_iterator should be defined in c++23" +# endif +# if __cpp_lib_constexpr_iterator != 201811L +# error "__cpp_lib_constexpr_iterator should have the value 201811L in c++23" +# endif + +# ifndef __cpp_lib_constexpr_memory +# error "__cpp_lib_constexpr_memory should be defined in c++23" +# endif +# if __cpp_lib_constexpr_memory != 202202L +# error "__cpp_lib_constexpr_memory should have the value 202202L in c++23" +# endif + +# ifdef __cpp_lib_constexpr_new +# error "__cpp_lib_constexpr_new should not be defined before c++26" +# endif + +# ifndef __cpp_lib_constexpr_numeric +# error "__cpp_lib_constexpr_numeric should be defined in c++23" +# endif +# if __cpp_lib_constexpr_numeric != 201911L +# error "__cpp_lib_constexpr_numeric should have the value 201911L in c++23" +# endif + +# ifndef __cpp_lib_constexpr_string +# error "__cpp_lib_constexpr_string should be defined in c++23" +# endif +# if __cpp_lib_constexpr_string != 201907L +# error "__cpp_lib_constexpr_string should have the value 201907L in c++23" +# endif + +# ifndef __cpp_lib_constexpr_string_view +# error "__cpp_lib_constexpr_string_view should be defined in c++23" +# endif +# if __cpp_lib_constexpr_string_view != 201811L +# error "__cpp_lib_constexpr_string_view should have the value 201811L in c++23" +# endif + +# ifndef __cpp_lib_constexpr_tuple +# error "__cpp_lib_constexpr_tuple should be defined in c++23" +# endif +# if __cpp_lib_constexpr_tuple != 201811L +# error "__cpp_lib_constexpr_tuple should have the value 201811L in c++23" +# endif + +# ifndef __cpp_lib_constexpr_typeinfo +# error "__cpp_lib_constexpr_typeinfo should be defined in c++23" +# endif +# if __cpp_lib_constexpr_typeinfo != 202106L +# error "__cpp_lib_constexpr_typeinfo should have the value 202106L in c++23" +# endif + +# ifndef __cpp_lib_constexpr_utility +# error "__cpp_lib_constexpr_utility should be defined in c++23" +# endif +# if __cpp_lib_constexpr_utility != 201811L +# error "__cpp_lib_constexpr_utility should have the value 201811L in c++23" +# endif + +# ifndef __cpp_lib_constexpr_vector +# error "__cpp_lib_constexpr_vector should be defined in c++23" +# endif +# if __cpp_lib_constexpr_vector != 201907L +# error "__cpp_lib_constexpr_vector should have the value 201907L in c++23" +# endif + +# ifdef __cpp_lib_constrained_equality +# error "__cpp_lib_constrained_equality should not be defined before c++26" +# endif + +# ifndef __cpp_lib_containers_ranges +# error "__cpp_lib_containers_ranges should be defined in c++23" +# endif +# if __cpp_lib_containers_ranges != 202202L +# error "__cpp_lib_containers_ranges should have the value 202202L in c++23" +# endif + +# ifdef __cpp_lib_copyable_function +# error "__cpp_lib_copyable_function should not be defined before c++26" +# endif + +# ifndef __cpp_lib_coroutine +# error "__cpp_lib_coroutine should be defined in c++23" +# endif +# if __cpp_lib_coroutine != 201902L +# error "__cpp_lib_coroutine should have the value 201902L in c++23" +# endif + +# ifdef __cpp_lib_debugging +# error "__cpp_lib_debugging should not be defined before c++26" +# endif + +# ifdef __cpp_lib_default_template_type_for_algorithm_values +# error "__cpp_lib_default_template_type_for_algorithm_values should not be defined before c++26" +# endif + +# if TEST_STD_VER > 17 && defined(__cpp_impl_destroying_delete) && __cpp_impl_destroying_delete >= 201806L +# ifndef __cpp_lib_destroying_delete +# error "__cpp_lib_destroying_delete should be defined in c++23" +# endif +# if __cpp_lib_destroying_delete != 201806L +# error "__cpp_lib_destroying_delete should have the value 201806L in c++23" +# endif +# else +# ifdef __cpp_lib_destroying_delete +# error "__cpp_lib_destroying_delete should not be defined when the requirement 'TEST_STD_VER > 17 && defined(__cpp_impl_destroying_delete) && __cpp_impl_destroying_delete >= 201806L' is not met!" +# endif +# endif + +# ifndef __cpp_lib_enable_shared_from_this +# error "__cpp_lib_enable_shared_from_this should be defined in c++23" +# endif +# if __cpp_lib_enable_shared_from_this != 201603L +# error "__cpp_lib_enable_shared_from_this should have the value 201603L in c++23" +# endif + +# ifndef __cpp_lib_endian +# error "__cpp_lib_endian should be defined in c++23" +# endif +# if __cpp_lib_endian != 201907L +# error "__cpp_lib_endian should have the value 201907L in c++23" +# endif + +# ifndef __cpp_lib_erase_if +# error "__cpp_lib_erase_if should be defined in c++23" +# endif +# if __cpp_lib_erase_if != 202002L +# error "__cpp_lib_erase_if should have the value 202002L in c++23" +# endif + +# ifndef __cpp_lib_exchange_function +# error "__cpp_lib_exchange_function should be defined in c++23" +# endif +# if __cpp_lib_exchange_function != 201304L +# error "__cpp_lib_exchange_function should have the value 201304L in c++23" +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_execution +# error "__cpp_lib_execution should be defined in c++23" +# endif +# if __cpp_lib_execution != 201902L +# error "__cpp_lib_execution should have the value 201902L in c++23" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_execution +# error "__cpp_lib_execution should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# ifndef __cpp_lib_expected +# error "__cpp_lib_expected should be defined in c++23" +# endif +# if __cpp_lib_expected != 202211L +# error "__cpp_lib_expected should have the value 202211L in c++23" +# endif + +# if !defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_FILESYSTEM && _LIBCPP_AVAILABILITY_HAS_FILESYSTEM_LIBRARY) +# ifndef __cpp_lib_filesystem +# error "__cpp_lib_filesystem should be defined in c++23" +# endif +# if __cpp_lib_filesystem != 201703L +# error "__cpp_lib_filesystem should have the value 201703L in c++23" +# endif +# else +# ifdef __cpp_lib_filesystem +# error "__cpp_lib_filesystem should not be defined when the requirement '!defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_FILESYSTEM && _LIBCPP_AVAILABILITY_HAS_FILESYSTEM_LIBRARY)' is not met!" +# endif +# endif + +# ifndef __cpp_lib_flat_map +# error "__cpp_lib_flat_map should be defined in c++23" +# endif +# if __cpp_lib_flat_map != 202207L +# error "__cpp_lib_flat_map should have the value 202207L in c++23" +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_flat_set +# error "__cpp_lib_flat_set should be defined in c++23" +# endif +# if __cpp_lib_flat_set != 202207L +# error "__cpp_lib_flat_set should have the value 202207L in c++23" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_flat_set +# error "__cpp_lib_flat_set should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# if !defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_TO_CHARS_FLOATING_POINT +# ifndef __cpp_lib_format +# error "__cpp_lib_format should be defined in c++23" +# endif +# if __cpp_lib_format != 202110L +# error "__cpp_lib_format should have the value 202110L in c++23" +# endif +# else +# ifdef __cpp_lib_format +# error "__cpp_lib_format should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_TO_CHARS_FLOATING_POINT' is not met!" +# endif +# endif + +# ifdef __cpp_lib_format_path +# error "__cpp_lib_format_path should not be defined before c++26" +# endif + +# ifndef __cpp_lib_format_ranges +# error "__cpp_lib_format_ranges should be defined in c++23" +# endif +# if __cpp_lib_format_ranges != 202207L +# error "__cpp_lib_format_ranges should have the value 202207L in c++23" +# endif + +# ifndef __cpp_lib_format_uchar +# error "__cpp_lib_format_uchar should be defined in c++23" +# endif +# if __cpp_lib_format_uchar != 202311L +# error "__cpp_lib_format_uchar should have the value 202311L in c++23" +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_formatters +# error "__cpp_lib_formatters should be defined in c++23" +# endif +# if __cpp_lib_formatters != 202302L +# error "__cpp_lib_formatters should have the value 202302L in c++23" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_formatters +# error "__cpp_lib_formatters should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# ifndef __cpp_lib_forward_like +# error "__cpp_lib_forward_like should be defined in c++23" +# endif +# if __cpp_lib_forward_like != 202207L +# error "__cpp_lib_forward_like should have the value 202207L in c++23" +# endif + +# ifdef __cpp_lib_freestanding_algorithm +# error "__cpp_lib_freestanding_algorithm should not be defined before c++26" +# endif + +# ifdef __cpp_lib_freestanding_array +# error "__cpp_lib_freestanding_array should not be defined before c++26" +# endif + +# ifdef __cpp_lib_freestanding_cstring +# error "__cpp_lib_freestanding_cstring should not be defined before c++26" +# endif + +# ifdef __cpp_lib_freestanding_expected +# error "__cpp_lib_freestanding_expected should not be defined before c++26" +# endif + +# ifdef __cpp_lib_freestanding_mdspan +# error "__cpp_lib_freestanding_mdspan should not be defined before c++26" +# endif + +# ifdef __cpp_lib_freestanding_optional +# error "__cpp_lib_freestanding_optional should not be defined before c++26" +# endif + +# ifdef __cpp_lib_freestanding_string_view +# error "__cpp_lib_freestanding_string_view should not be defined before c++26" +# endif + +# ifdef __cpp_lib_freestanding_variant +# error "__cpp_lib_freestanding_variant should not be defined before c++26" +# endif + +# ifdef __cpp_lib_fstream_native_handle +# error "__cpp_lib_fstream_native_handle should not be defined before c++26" +# endif + +# ifdef __cpp_lib_function_ref +# error "__cpp_lib_function_ref should not be defined before c++26" +# endif + +# ifndef __cpp_lib_gcd_lcm +# error "__cpp_lib_gcd_lcm should be defined in c++23" +# endif +# if __cpp_lib_gcd_lcm != 201606L +# error "__cpp_lib_gcd_lcm should have the value 201606L in c++23" +# endif + +# ifdef __cpp_lib_generate_random +# error "__cpp_lib_generate_random should not be defined before c++26" +# endif + +# ifndef __cpp_lib_generic_associative_lookup +# error "__cpp_lib_generic_associative_lookup should be defined in c++23" +# endif +# if __cpp_lib_generic_associative_lookup != 201304L +# error "__cpp_lib_generic_associative_lookup should have the value 201304L in c++23" +# endif + +# ifndef __cpp_lib_generic_unordered_lookup +# error "__cpp_lib_generic_unordered_lookup should be defined in c++23" +# endif +# if __cpp_lib_generic_unordered_lookup != 201811L +# error "__cpp_lib_generic_unordered_lookup should have the value 201811L in c++23" +# endif + +# if !defined(_LIBCPP_VERSION) || (defined(__GCC_DESTRUCTIVE_SIZE) && defined(__GCC_CONSTRUCTIVE_SIZE)) +# ifndef __cpp_lib_hardware_interference_size +# error "__cpp_lib_hardware_interference_size should be defined in c++23" +# endif +# if __cpp_lib_hardware_interference_size != 201703L +# error "__cpp_lib_hardware_interference_size should have the value 201703L in c++23" +# endif +# else +# ifdef __cpp_lib_hardware_interference_size +# error "__cpp_lib_hardware_interference_size should not be defined when the requirement '!defined(_LIBCPP_VERSION) || (defined(__GCC_DESTRUCTIVE_SIZE) && defined(__GCC_CONSTRUCTIVE_SIZE))' is not met!" +# endif +# endif + +# ifndef __cpp_lib_has_unique_object_representations +# error "__cpp_lib_has_unique_object_representations should be defined in c++23" +# endif +# if __cpp_lib_has_unique_object_representations != 201606L +# error "__cpp_lib_has_unique_object_representations should have the value 201606L in c++23" +# endif + +# ifdef __cpp_lib_hazard_pointer +# error "__cpp_lib_hazard_pointer should not be defined before c++26" +# endif + +# ifndef __cpp_lib_hypot +# error "__cpp_lib_hypot should be defined in c++23" +# endif +# if __cpp_lib_hypot != 201603L +# error "__cpp_lib_hypot should have the value 201603L in c++23" +# endif + +# ifndef __cpp_lib_incomplete_container_elements +# error "__cpp_lib_incomplete_container_elements should be defined in c++23" +# endif +# if __cpp_lib_incomplete_container_elements != 201505L +# error "__cpp_lib_incomplete_container_elements should have the value 201505L in c++23" +# endif + +# ifdef __cpp_lib_inplace_vector +# error "__cpp_lib_inplace_vector should not be defined before c++26" +# endif + +# ifndef __cpp_lib_int_pow2 +# error "__cpp_lib_int_pow2 should be defined in c++23" +# endif +# if __cpp_lib_int_pow2 != 202002L +# error "__cpp_lib_int_pow2 should have the value 202002L in c++23" +# endif + +# ifndef __cpp_lib_integer_comparison_functions +# error "__cpp_lib_integer_comparison_functions should be defined in c++23" +# endif +# if __cpp_lib_integer_comparison_functions != 202002L +# error "__cpp_lib_integer_comparison_functions should have the value 202002L in c++23" +# endif + +# ifndef __cpp_lib_integer_sequence +# error "__cpp_lib_integer_sequence should be defined in c++23" +# endif +# if __cpp_lib_integer_sequence != 201304L +# error "__cpp_lib_integer_sequence should have the value 201304L in c++23" +# endif + +# ifndef __cpp_lib_integral_constant_callable +# error "__cpp_lib_integral_constant_callable should be defined in c++23" +# endif +# if __cpp_lib_integral_constant_callable != 201304L +# error "__cpp_lib_integral_constant_callable should have the value 201304L in c++23" +# endif + +# ifndef __cpp_lib_interpolate +# error "__cpp_lib_interpolate should be defined in c++23" +# endif +# if __cpp_lib_interpolate != 201902L +# error "__cpp_lib_interpolate should have the value 201902L in c++23" +# endif + +# ifndef __cpp_lib_invoke +# error "__cpp_lib_invoke should be defined in c++23" +# endif +# if __cpp_lib_invoke != 201411L +# error "__cpp_lib_invoke should have the value 201411L in c++23" +# endif + +# ifndef __cpp_lib_invoke_r +# error "__cpp_lib_invoke_r should be defined in c++23" +# endif +# if __cpp_lib_invoke_r != 202106L +# error "__cpp_lib_invoke_r should have the value 202106L in c++23" +# endif + +# ifndef __cpp_lib_ios_noreplace +# error "__cpp_lib_ios_noreplace should be defined in c++23" +# endif +# if __cpp_lib_ios_noreplace != 202207L +# error "__cpp_lib_ios_noreplace should have the value 202207L in c++23" +# endif + +# ifndef __cpp_lib_is_aggregate +# error "__cpp_lib_is_aggregate should be defined in c++23" +# endif +# if __cpp_lib_is_aggregate != 201703L +# error "__cpp_lib_is_aggregate should have the value 201703L in c++23" +# endif + +# ifndef __cpp_lib_is_constant_evaluated +# error "__cpp_lib_is_constant_evaluated should be defined in c++23" +# endif +# if __cpp_lib_is_constant_evaluated != 201811L +# error "__cpp_lib_is_constant_evaluated should have the value 201811L in c++23" +# endif + +# ifndef __cpp_lib_is_final +# error "__cpp_lib_is_final should be defined in c++23" +# endif +# if __cpp_lib_is_final != 201402L +# error "__cpp_lib_is_final should have the value 201402L in c++23" +# endif + +# if __has_builtin(__builtin_is_implicit_lifetime) +# ifndef __cpp_lib_is_implicit_lifetime +# error "__cpp_lib_is_implicit_lifetime should be defined in c++23" +# endif +# if __cpp_lib_is_implicit_lifetime != 202302L +# error "__cpp_lib_is_implicit_lifetime should have the value 202302L in c++23" +# endif +# else +# ifdef __cpp_lib_is_implicit_lifetime +# error "__cpp_lib_is_implicit_lifetime should not be defined when the requirement '__has_builtin(__builtin_is_implicit_lifetime)' is not met!" +# endif +# endif + +# ifndef __cpp_lib_is_invocable +# error "__cpp_lib_is_invocable should be defined in c++23" +# endif +# if __cpp_lib_is_invocable != 201703L +# error "__cpp_lib_is_invocable should have the value 201703L in c++23" +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_is_layout_compatible +# error "__cpp_lib_is_layout_compatible should be defined in c++23" +# endif +# if __cpp_lib_is_layout_compatible != 201907L +# error "__cpp_lib_is_layout_compatible should have the value 201907L in c++23" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_is_layout_compatible +# error "__cpp_lib_is_layout_compatible should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# ifndef __cpp_lib_is_nothrow_convertible +# error "__cpp_lib_is_nothrow_convertible should be defined in c++23" +# endif +# if __cpp_lib_is_nothrow_convertible != 201806L +# error "__cpp_lib_is_nothrow_convertible should have the value 201806L in c++23" +# endif + +# ifndef __cpp_lib_is_null_pointer +# error "__cpp_lib_is_null_pointer should be defined in c++23" +# endif +# if __cpp_lib_is_null_pointer != 201309L +# error "__cpp_lib_is_null_pointer should have the value 201309L in c++23" +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_is_pointer_interconvertible +# error "__cpp_lib_is_pointer_interconvertible should be defined in c++23" +# endif +# if __cpp_lib_is_pointer_interconvertible != 201907L +# error "__cpp_lib_is_pointer_interconvertible should have the value 201907L in c++23" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_is_pointer_interconvertible +# error "__cpp_lib_is_pointer_interconvertible should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# ifndef __cpp_lib_is_scoped_enum +# error "__cpp_lib_is_scoped_enum should be defined in c++23" +# endif +# if __cpp_lib_is_scoped_enum != 202011L +# error "__cpp_lib_is_scoped_enum should have the value 202011L in c++23" +# endif + +# ifndef __cpp_lib_is_swappable +# error "__cpp_lib_is_swappable should be defined in c++23" +# endif +# if __cpp_lib_is_swappable != 201603L +# error "__cpp_lib_is_swappable should have the value 201603L in c++23" +# endif + +# ifdef __cpp_lib_is_virtual_base_of +# error "__cpp_lib_is_virtual_base_of should not be defined before c++26" +# endif + +# ifdef __cpp_lib_is_within_lifetime +# error "__cpp_lib_is_within_lifetime should not be defined before c++26" +# endif + +# if !defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC) +# ifndef __cpp_lib_jthread +# error "__cpp_lib_jthread should be defined in c++23" +# endif +# if __cpp_lib_jthread != 201911L +# error "__cpp_lib_jthread should have the value 201911L in c++23" +# endif +# else +# ifdef __cpp_lib_jthread +# error "__cpp_lib_jthread should not be defined when the requirement '!defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC)' is not met!" +# endif +# endif + +# if !defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC) +# ifndef __cpp_lib_latch +# error "__cpp_lib_latch should be defined in c++23" +# endif +# if __cpp_lib_latch != 201907L +# error "__cpp_lib_latch should have the value 201907L in c++23" +# endif +# else +# ifdef __cpp_lib_latch +# error "__cpp_lib_latch should not be defined when the requirement '!defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC)' is not met!" +# endif +# endif + +# ifndef __cpp_lib_launder +# error "__cpp_lib_launder should be defined in c++23" +# endif +# if __cpp_lib_launder != 201606L +# error "__cpp_lib_launder should have the value 201606L in c++23" +# endif + +# ifdef __cpp_lib_linalg +# error "__cpp_lib_linalg should not be defined before c++26" +# endif + +# ifndef __cpp_lib_list_remove_return_type +# error "__cpp_lib_list_remove_return_type should be defined in c++23" +# endif +# if __cpp_lib_list_remove_return_type != 201806L +# error "__cpp_lib_list_remove_return_type should have the value 201806L in c++23" +# endif + +# ifndef __cpp_lib_logical_traits +# error "__cpp_lib_logical_traits should be defined in c++23" +# endif +# if __cpp_lib_logical_traits != 201510L +# error "__cpp_lib_logical_traits should have the value 201510L in c++23" +# endif + +# ifndef __cpp_lib_make_from_tuple +# error "__cpp_lib_make_from_tuple should be defined in c++23" +# endif +# if __cpp_lib_make_from_tuple != 201606L +# error "__cpp_lib_make_from_tuple should have the value 201606L in c++23" +# endif + +# ifndef __cpp_lib_make_reverse_iterator +# error "__cpp_lib_make_reverse_iterator should be defined in c++23" +# endif +# if __cpp_lib_make_reverse_iterator != 201402L +# error "__cpp_lib_make_reverse_iterator should have the value 201402L in c++23" +# endif + +# ifndef __cpp_lib_make_unique +# error "__cpp_lib_make_unique should be defined in c++23" +# endif +# if __cpp_lib_make_unique != 201304L +# error "__cpp_lib_make_unique should have the value 201304L in c++23" +# endif + +# ifndef __cpp_lib_map_try_emplace +# error "__cpp_lib_map_try_emplace should be defined in c++23" +# endif +# if __cpp_lib_map_try_emplace != 201411L +# error "__cpp_lib_map_try_emplace should have the value 201411L in c++23" +# endif + +# ifndef __cpp_lib_math_constants +# error "__cpp_lib_math_constants should be defined in c++23" +# endif +# if __cpp_lib_math_constants != 201907L +# error "__cpp_lib_math_constants should have the value 201907L in c++23" +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_math_special_functions +# error "__cpp_lib_math_special_functions should be defined in c++23" +# endif +# if __cpp_lib_math_special_functions != 201603L +# error "__cpp_lib_math_special_functions should have the value 201603L in c++23" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_math_special_functions +# error "__cpp_lib_math_special_functions should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# ifndef __cpp_lib_mdspan +# error "__cpp_lib_mdspan should be defined in c++23" +# endif +# if __cpp_lib_mdspan != 202207L +# error "__cpp_lib_mdspan should have the value 202207L in c++23" +# endif + +# if !defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_PMR +# ifndef __cpp_lib_memory_resource +# error "__cpp_lib_memory_resource should be defined in c++23" +# endif +# if __cpp_lib_memory_resource != 201603L +# error "__cpp_lib_memory_resource should have the value 201603L in c++23" +# endif +# else +# ifdef __cpp_lib_memory_resource +# error "__cpp_lib_memory_resource should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_PMR' is not met!" +# endif +# endif + +# ifndef __cpp_lib_modules +# error "__cpp_lib_modules should be defined in c++23" +# endif +# if __cpp_lib_modules != 202207L +# error "__cpp_lib_modules should have the value 202207L in c++23" +# endif + +# ifndef __cpp_lib_move_iterator_concept +# error "__cpp_lib_move_iterator_concept should be defined in c++23" +# endif +# if __cpp_lib_move_iterator_concept != 202207L +# error "__cpp_lib_move_iterator_concept should have the value 202207L in c++23" +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_move_only_function +# error "__cpp_lib_move_only_function should be defined in c++23" +# endif +# if __cpp_lib_move_only_function != 202110L +# error "__cpp_lib_move_only_function should have the value 202110L in c++23" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_move_only_function +# error "__cpp_lib_move_only_function should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# ifndef __cpp_lib_node_extract +# error "__cpp_lib_node_extract should be defined in c++23" +# endif +# if __cpp_lib_node_extract != 201606L +# error "__cpp_lib_node_extract should have the value 201606L in c++23" +# endif + +# ifndef __cpp_lib_nonmember_container_access +# error "__cpp_lib_nonmember_container_access should be defined in c++23" +# endif +# if __cpp_lib_nonmember_container_access != 201411L +# error "__cpp_lib_nonmember_container_access should have the value 201411L in c++23" +# endif + +# ifndef __cpp_lib_not_fn +# error "__cpp_lib_not_fn should be defined in c++23" +# endif +# if __cpp_lib_not_fn != 201603L +# error "__cpp_lib_not_fn should have the value 201603L in c++23" +# endif + +# ifndef __cpp_lib_null_iterators +# error "__cpp_lib_null_iterators should be defined in c++23" +# endif +# if __cpp_lib_null_iterators != 201304L +# error "__cpp_lib_null_iterators should have the value 201304L in c++23" +# endif + +# ifndef __cpp_lib_optional +# error "__cpp_lib_optional should be defined in c++23" +# endif +# if __cpp_lib_optional != 202110L +# error "__cpp_lib_optional should have the value 202110L in c++23" +# endif + +# ifdef __cpp_lib_optional_range_support +# error "__cpp_lib_optional_range_support should not be defined before c++26" +# endif + +# ifndef __cpp_lib_out_ptr +# error "__cpp_lib_out_ptr should be defined in c++23" +# endif +# if __cpp_lib_out_ptr != 202106L +# error "__cpp_lib_out_ptr should have the value 202106L in c++23" +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_parallel_algorithm +# error "__cpp_lib_parallel_algorithm should be defined in c++23" +# endif +# if __cpp_lib_parallel_algorithm != 201603L +# error "__cpp_lib_parallel_algorithm should have the value 201603L in c++23" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_parallel_algorithm +# error "__cpp_lib_parallel_algorithm should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# ifdef __cpp_lib_philox_engine +# error "__cpp_lib_philox_engine should not be defined before c++26" +# endif + +# if !defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_PMR +# ifndef __cpp_lib_polymorphic_allocator +# error "__cpp_lib_polymorphic_allocator should be defined in c++23" +# endif +# if __cpp_lib_polymorphic_allocator != 201902L +# error "__cpp_lib_polymorphic_allocator should have the value 201902L in c++23" +# endif +# else +# ifdef __cpp_lib_polymorphic_allocator +# error "__cpp_lib_polymorphic_allocator should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_PMR' is not met!" +# endif +# endif + +# if !defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_TO_CHARS_FLOATING_POINT +# ifndef __cpp_lib_print +# error "__cpp_lib_print should be defined in c++23" +# endif +# if __cpp_lib_print != 202207L +# error "__cpp_lib_print should have the value 202207L in c++23" +# endif +# else +# ifdef __cpp_lib_print +# error "__cpp_lib_print should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_TO_CHARS_FLOATING_POINT' is not met!" +# endif +# endif + +# if !defined(_LIBCPP_VERSION) || _LIBCPP_HAS_LOCALIZATION +# ifndef __cpp_lib_quoted_string_io +# error "__cpp_lib_quoted_string_io should be defined in c++23" +# endif +# if __cpp_lib_quoted_string_io != 201304L +# error "__cpp_lib_quoted_string_io should have the value 201304L in c++23" +# endif +# else +# ifdef __cpp_lib_quoted_string_io +# error "__cpp_lib_quoted_string_io should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_HAS_LOCALIZATION' is not met!" +# endif +# endif + +# ifndef __cpp_lib_ranges +# error "__cpp_lib_ranges should be defined in c++23" +# endif +# if __cpp_lib_ranges != 202406L +# error "__cpp_lib_ranges should have the value 202406L in c++23" +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_ranges_as_const +# error "__cpp_lib_ranges_as_const should be defined in c++23" +# endif +# if __cpp_lib_ranges_as_const != 202207L +# error "__cpp_lib_ranges_as_const should have the value 202207L in c++23" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_ranges_as_const +# error "__cpp_lib_ranges_as_const should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# ifndef __cpp_lib_ranges_as_rvalue +# error "__cpp_lib_ranges_as_rvalue should be defined in c++23" +# endif +# if __cpp_lib_ranges_as_rvalue != 202207L +# error "__cpp_lib_ranges_as_rvalue should have the value 202207L in c++23" +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_ranges_chunk +# error "__cpp_lib_ranges_chunk should be defined in c++23" +# endif +# if __cpp_lib_ranges_chunk != 202202L +# error "__cpp_lib_ranges_chunk should have the value 202202L in c++23" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_ranges_chunk +# error "__cpp_lib_ranges_chunk should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# ifndef __cpp_lib_ranges_chunk_by +# error "__cpp_lib_ranges_chunk_by should be defined in c++23" +# endif +# if __cpp_lib_ranges_chunk_by != 202202L +# error "__cpp_lib_ranges_chunk_by should have the value 202202L in c++23" +# endif + +# ifdef __cpp_lib_ranges_concat +# error "__cpp_lib_ranges_concat should not be defined before c++26" +# endif + +# ifndef __cpp_lib_ranges_contains +# error "__cpp_lib_ranges_contains should be defined in c++23" +# endif +# if __cpp_lib_ranges_contains != 202207L +# error "__cpp_lib_ranges_contains should have the value 202207L in c++23" +# endif + +# ifndef __cpp_lib_ranges_find_last +# error "__cpp_lib_ranges_find_last should be defined in c++23" +# endif +# if __cpp_lib_ranges_find_last != 202207L +# error "__cpp_lib_ranges_find_last should have the value 202207L in c++23" +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_ranges_iota +# error "__cpp_lib_ranges_iota should be defined in c++23" +# endif +# if __cpp_lib_ranges_iota != 202202L +# error "__cpp_lib_ranges_iota should have the value 202202L in c++23" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_ranges_iota +# error "__cpp_lib_ranges_iota should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_ranges_join_with +# error "__cpp_lib_ranges_join_with should be defined in c++23" +# endif +# if __cpp_lib_ranges_join_with != 202202L +# error "__cpp_lib_ranges_join_with should have the value 202202L in c++23" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_ranges_join_with +# error "__cpp_lib_ranges_join_with should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# ifndef __cpp_lib_ranges_repeat +# error "__cpp_lib_ranges_repeat should be defined in c++23" +# endif +# if __cpp_lib_ranges_repeat != 202207L +# error "__cpp_lib_ranges_repeat should have the value 202207L in c++23" +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_ranges_slide +# error "__cpp_lib_ranges_slide should be defined in c++23" +# endif +# if __cpp_lib_ranges_slide != 202202L +# error "__cpp_lib_ranges_slide should have the value 202202L in c++23" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_ranges_slide +# error "__cpp_lib_ranges_slide should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# ifndef __cpp_lib_ranges_starts_ends_with +# error "__cpp_lib_ranges_starts_ends_with should be defined in c++23" +# endif +# if __cpp_lib_ranges_starts_ends_with != 202106L +# error "__cpp_lib_ranges_starts_ends_with should have the value 202106L in c++23" +# endif + +# ifndef __cpp_lib_ranges_to_container +# error "__cpp_lib_ranges_to_container should be defined in c++23" +# endif +# if __cpp_lib_ranges_to_container != 202202L +# error "__cpp_lib_ranges_to_container should have the value 202202L in c++23" +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_ranges_zip +# error "__cpp_lib_ranges_zip should be defined in c++23" +# endif +# if __cpp_lib_ranges_zip != 202110L +# error "__cpp_lib_ranges_zip should have the value 202110L in c++23" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_ranges_zip +# error "__cpp_lib_ranges_zip should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# ifdef __cpp_lib_ratio +# error "__cpp_lib_ratio should not be defined before c++26" +# endif + +# ifndef __cpp_lib_raw_memory_algorithms +# error "__cpp_lib_raw_memory_algorithms should be defined in c++23" +# endif +# if __cpp_lib_raw_memory_algorithms != 201606L +# error "__cpp_lib_raw_memory_algorithms should have the value 201606L in c++23" +# endif + +# ifdef __cpp_lib_rcu +# error "__cpp_lib_rcu should not be defined before c++26" +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_reference_from_temporary +# error "__cpp_lib_reference_from_temporary should be defined in c++23" +# endif +# if __cpp_lib_reference_from_temporary != 202202L +# error "__cpp_lib_reference_from_temporary should have the value 202202L in c++23" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_reference_from_temporary +# error "__cpp_lib_reference_from_temporary should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# ifdef __cpp_lib_reference_wrapper +# error "__cpp_lib_reference_wrapper should not be defined before c++26" +# endif + +# ifndef __cpp_lib_remove_cvref +# error "__cpp_lib_remove_cvref should be defined in c++23" +# endif +# if __cpp_lib_remove_cvref != 201711L +# error "__cpp_lib_remove_cvref should have the value 201711L in c++23" +# endif + +# ifndef __cpp_lib_result_of_sfinae +# error "__cpp_lib_result_of_sfinae should be defined in c++23" +# endif +# if __cpp_lib_result_of_sfinae != 201210L +# error "__cpp_lib_result_of_sfinae should have the value 201210L in c++23" +# endif + +# ifndef __cpp_lib_robust_nonmodifying_seq_ops +# error "__cpp_lib_robust_nonmodifying_seq_ops should be defined in c++23" +# endif +# if __cpp_lib_robust_nonmodifying_seq_ops != 201304L +# error "__cpp_lib_robust_nonmodifying_seq_ops should have the value 201304L in c++23" +# endif + +# ifndef __cpp_lib_sample +# error "__cpp_lib_sample should be defined in c++23" +# endif +# if __cpp_lib_sample != 201603L +# error "__cpp_lib_sample should have the value 201603L in c++23" +# endif + +# ifdef __cpp_lib_saturation_arithmetic +# error "__cpp_lib_saturation_arithmetic should not be defined before c++26" +# endif + +# if !defined(_LIBCPP_VERSION) || _LIBCPP_HAS_THREADS +# ifndef __cpp_lib_scoped_lock +# error "__cpp_lib_scoped_lock should be defined in c++23" +# endif +# if __cpp_lib_scoped_lock != 201703L +# error "__cpp_lib_scoped_lock should have the value 201703L in c++23" +# endif +# else +# ifdef __cpp_lib_scoped_lock +# error "__cpp_lib_scoped_lock should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_HAS_THREADS' is not met!" +# endif +# endif + +# if !defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC) +# ifndef __cpp_lib_semaphore +# error "__cpp_lib_semaphore should be defined in c++23" +# endif +# if __cpp_lib_semaphore != 201907L +# error "__cpp_lib_semaphore should have the value 201907L in c++23" +# endif +# else +# ifdef __cpp_lib_semaphore +# error "__cpp_lib_semaphore should not be defined when the requirement '!defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC)' is not met!" +# endif +# endif + +# ifdef __cpp_lib_senders +# error "__cpp_lib_senders should not be defined before c++26" +# endif + +# if _LIBCPP_HAS_THREADS +# ifndef __cpp_lib_shared_mutex +# error "__cpp_lib_shared_mutex should be defined in c++23" +# endif +# if __cpp_lib_shared_mutex != 201505L +# error "__cpp_lib_shared_mutex should have the value 201505L in c++23" +# endif +# else +# ifdef __cpp_lib_shared_mutex +# error "__cpp_lib_shared_mutex should not be defined when the requirement '_LIBCPP_HAS_THREADS' is not met!" +# endif +# endif + +# ifndef __cpp_lib_shared_ptr_arrays +# error "__cpp_lib_shared_ptr_arrays should be defined in c++23" +# endif +# if __cpp_lib_shared_ptr_arrays != 201707L +# error "__cpp_lib_shared_ptr_arrays should have the value 201707L in c++23" +# endif + +# ifndef __cpp_lib_shared_ptr_weak_type +# error "__cpp_lib_shared_ptr_weak_type should be defined in c++23" +# endif +# if __cpp_lib_shared_ptr_weak_type != 201606L +# error "__cpp_lib_shared_ptr_weak_type should have the value 201606L in c++23" +# endif + +# if _LIBCPP_HAS_THREADS +# ifndef __cpp_lib_shared_timed_mutex +# error "__cpp_lib_shared_timed_mutex should be defined in c++23" +# endif +# if __cpp_lib_shared_timed_mutex != 201402L +# error "__cpp_lib_shared_timed_mutex should have the value 201402L in c++23" +# endif +# else +# ifdef __cpp_lib_shared_timed_mutex +# error "__cpp_lib_shared_timed_mutex should not be defined when the requirement '_LIBCPP_HAS_THREADS' is not met!" +# endif +# endif + +# ifndef __cpp_lib_shift +# error "__cpp_lib_shift should be defined in c++23" +# endif +# if __cpp_lib_shift != 201806L +# error "__cpp_lib_shift should have the value 201806L in c++23" +# endif + +# ifndef __cpp_lib_smart_ptr_for_overwrite +# error "__cpp_lib_smart_ptr_for_overwrite should be defined in c++23" +# endif +# if __cpp_lib_smart_ptr_for_overwrite != 202002L +# error "__cpp_lib_smart_ptr_for_overwrite should have the value 202002L in c++23" +# endif + +# ifdef __cpp_lib_smart_ptr_owner_equality +# error "__cpp_lib_smart_ptr_owner_equality should not be defined before c++26" +# endif + +# ifndef __cpp_lib_source_location +# error "__cpp_lib_source_location should be defined in c++23" +# endif +# if __cpp_lib_source_location != 201907L +# error "__cpp_lib_source_location should have the value 201907L in c++23" +# endif + +# ifndef __cpp_lib_span +# error "__cpp_lib_span should be defined in c++23" +# endif +# if __cpp_lib_span != 202002L +# error "__cpp_lib_span should have the value 202002L in c++23" +# endif + +# ifdef __cpp_lib_span_at +# error "__cpp_lib_span_at should not be defined before c++26" +# endif + +# ifdef __cpp_lib_span_initializer_list +# error "__cpp_lib_span_initializer_list should not be defined before c++26" +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_spanstream +# error "__cpp_lib_spanstream should be defined in c++23" +# endif +# if __cpp_lib_spanstream != 202106L +# error "__cpp_lib_spanstream should have the value 202106L in c++23" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_spanstream +# error "__cpp_lib_spanstream should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# ifndef __cpp_lib_ssize +# error "__cpp_lib_ssize should be defined in c++23" +# endif +# if __cpp_lib_ssize != 201902L +# error "__cpp_lib_ssize should have the value 201902L in c++23" +# endif + +# ifdef __cpp_lib_sstream_from_string_view +# error "__cpp_lib_sstream_from_string_view should not be defined before c++26" +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_stacktrace +# error "__cpp_lib_stacktrace should be defined in c++23" +# endif +# if __cpp_lib_stacktrace != 202011L +# error "__cpp_lib_stacktrace should have the value 202011L in c++23" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_stacktrace +# error "__cpp_lib_stacktrace should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# ifndef __cpp_lib_starts_ends_with +# error "__cpp_lib_starts_ends_with should be defined in c++23" +# endif +# if __cpp_lib_starts_ends_with != 201711L +# error "__cpp_lib_starts_ends_with should have the value 201711L in c++23" +# endif + +# ifndef __cpp_lib_stdatomic_h +# error "__cpp_lib_stdatomic_h should be defined in c++23" +# endif +# if __cpp_lib_stdatomic_h != 202011L +# error "__cpp_lib_stdatomic_h should have the value 202011L in c++23" +# endif + +# ifndef __cpp_lib_string_contains +# error "__cpp_lib_string_contains should be defined in c++23" +# endif +# if __cpp_lib_string_contains != 202011L +# error "__cpp_lib_string_contains should have the value 202011L in c++23" +# endif + +# ifndef __cpp_lib_string_resize_and_overwrite +# error "__cpp_lib_string_resize_and_overwrite should be defined in c++23" +# endif +# if __cpp_lib_string_resize_and_overwrite != 202110L +# error "__cpp_lib_string_resize_and_overwrite should have the value 202110L in c++23" +# endif + +# ifndef __cpp_lib_string_udls +# error "__cpp_lib_string_udls should be defined in c++23" +# endif +# if __cpp_lib_string_udls != 201304L +# error "__cpp_lib_string_udls should have the value 201304L in c++23" +# endif + +# ifndef __cpp_lib_string_view +# error "__cpp_lib_string_view should be defined in c++23" +# endif +# if __cpp_lib_string_view != 201803L +# error "__cpp_lib_string_view should have the value 201803L in c++23" +# endif + +# ifdef __cpp_lib_submdspan +# error "__cpp_lib_submdspan should not be defined before c++26" +# endif + +# if !defined(_LIBCPP_VERSION) || _LIBCPP_HAS_EXPERIMENTAL_SYNCSTREAM +# ifndef __cpp_lib_syncbuf +# error "__cpp_lib_syncbuf should be defined in c++23" +# endif +# if __cpp_lib_syncbuf != 201803L +# error "__cpp_lib_syncbuf should have the value 201803L in c++23" +# endif +# else +# ifdef __cpp_lib_syncbuf +# error "__cpp_lib_syncbuf should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_HAS_EXPERIMENTAL_SYNCSTREAM' is not met!" +# endif +# endif + +# ifdef __cpp_lib_text_encoding +# error "__cpp_lib_text_encoding should not be defined before c++26" +# endif + +# ifndef __cpp_lib_three_way_comparison +# error "__cpp_lib_three_way_comparison should be defined in c++23" +# endif +# if __cpp_lib_three_way_comparison != 201907L +# error "__cpp_lib_three_way_comparison should have the value 201907L in c++23" +# endif + +# ifndef __cpp_lib_to_address +# error "__cpp_lib_to_address should be defined in c++23" +# endif +# if __cpp_lib_to_address != 201711L +# error "__cpp_lib_to_address should have the value 201711L in c++23" +# endif + +# ifndef __cpp_lib_to_array +# error "__cpp_lib_to_array should be defined in c++23" +# endif +# if __cpp_lib_to_array != 201907L +# error "__cpp_lib_to_array should have the value 201907L in c++23" +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_to_chars +# error "__cpp_lib_to_chars should be defined in c++23" +# endif +# if __cpp_lib_to_chars != 201611L +# error "__cpp_lib_to_chars should have the value 201611L in c++23" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_to_chars +# error "__cpp_lib_to_chars should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# ifdef __cpp_lib_to_string +# error "__cpp_lib_to_string should not be defined before c++26" +# endif + +# ifndef __cpp_lib_to_underlying +# error "__cpp_lib_to_underlying should be defined in c++23" +# endif +# if __cpp_lib_to_underlying != 202102L +# error "__cpp_lib_to_underlying should have the value 202102L in c++23" +# endif + +# ifndef __cpp_lib_transformation_trait_aliases +# error "__cpp_lib_transformation_trait_aliases should be defined in c++23" +# endif +# if __cpp_lib_transformation_trait_aliases != 201304L +# error "__cpp_lib_transformation_trait_aliases should have the value 201304L in c++23" +# endif + +# ifndef __cpp_lib_transparent_operators +# error "__cpp_lib_transparent_operators should be defined in c++23" +# endif +# if __cpp_lib_transparent_operators != 201510L +# error "__cpp_lib_transparent_operators should have the value 201510L in c++23" +# endif + +# ifndef __cpp_lib_tuple_element_t +# error "__cpp_lib_tuple_element_t should be defined in c++23" +# endif +# if __cpp_lib_tuple_element_t != 201402L +# error "__cpp_lib_tuple_element_t should have the value 201402L in c++23" +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_tuple_like +# error "__cpp_lib_tuple_like should be defined in c++23" +# endif +# if __cpp_lib_tuple_like != 202207L +# error "__cpp_lib_tuple_like should have the value 202207L in c++23" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_tuple_like +# error "__cpp_lib_tuple_like should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# ifndef __cpp_lib_tuples_by_type +# error "__cpp_lib_tuples_by_type should be defined in c++23" +# endif +# if __cpp_lib_tuples_by_type != 201304L +# error "__cpp_lib_tuples_by_type should have the value 201304L in c++23" +# endif + +# ifndef __cpp_lib_type_identity +# error "__cpp_lib_type_identity should be defined in c++23" +# endif +# if __cpp_lib_type_identity != 201806L +# error "__cpp_lib_type_identity should have the value 201806L in c++23" +# endif + +# ifndef __cpp_lib_type_trait_variable_templates +# error "__cpp_lib_type_trait_variable_templates should be defined in c++23" +# endif +# if __cpp_lib_type_trait_variable_templates != 201510L +# error "__cpp_lib_type_trait_variable_templates should have the value 201510L in c++23" +# endif + +# ifndef __cpp_lib_uncaught_exceptions +# error "__cpp_lib_uncaught_exceptions should be defined in c++23" +# endif +# if __cpp_lib_uncaught_exceptions != 201411L +# error "__cpp_lib_uncaught_exceptions should have the value 201411L in c++23" +# endif + +# ifndef __cpp_lib_unordered_map_try_emplace +# error "__cpp_lib_unordered_map_try_emplace should be defined in c++23" +# endif +# if __cpp_lib_unordered_map_try_emplace != 201411L +# error "__cpp_lib_unordered_map_try_emplace should have the value 201411L in c++23" +# endif + +# ifndef __cpp_lib_unreachable +# error "__cpp_lib_unreachable should be defined in c++23" +# endif +# if __cpp_lib_unreachable != 202202L +# error "__cpp_lib_unreachable should have the value 202202L in c++23" +# endif + +# ifndef __cpp_lib_unwrap_ref +# error "__cpp_lib_unwrap_ref should be defined in c++23" +# endif +# if __cpp_lib_unwrap_ref != 201811L +# error "__cpp_lib_unwrap_ref should have the value 201811L in c++23" +# endif + +# ifndef __cpp_lib_variant +# error "__cpp_lib_variant should be defined in c++23" +# endif +# if __cpp_lib_variant != 202106L +# error "__cpp_lib_variant should have the value 202106L in c++23" +# endif + +# ifndef __cpp_lib_void_t +# error "__cpp_lib_void_t should be defined in c++23" +# endif +# if __cpp_lib_void_t != 201411L +# error "__cpp_lib_void_t should have the value 201411L in c++23" +# endif + +#elif TEST_STD_VER > 23 + +# ifndef __cpp_lib_adaptor_iterator_pair_constructor +# error "__cpp_lib_adaptor_iterator_pair_constructor should be defined in c++26" +# endif +# if __cpp_lib_adaptor_iterator_pair_constructor != 202106L +# error "__cpp_lib_adaptor_iterator_pair_constructor should have the value 202106L in c++26" +# endif + +# ifndef __cpp_lib_addressof_constexpr +# error "__cpp_lib_addressof_constexpr should be defined in c++26" +# endif +# if __cpp_lib_addressof_constexpr != 201603L +# error "__cpp_lib_addressof_constexpr should have the value 201603L in c++26" +# endif + +# ifndef __cpp_lib_allocate_at_least +# error "__cpp_lib_allocate_at_least should be defined in c++26" +# endif +# if __cpp_lib_allocate_at_least != 202302L +# error "__cpp_lib_allocate_at_least should have the value 202302L in c++26" +# endif + +# ifndef __cpp_lib_allocator_traits_is_always_equal +# error "__cpp_lib_allocator_traits_is_always_equal should be defined in c++26" +# endif +# if __cpp_lib_allocator_traits_is_always_equal != 201411L +# error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++26" +# endif + +# ifndef __cpp_lib_any +# error "__cpp_lib_any should be defined in c++26" +# endif +# if __cpp_lib_any != 201606L +# error "__cpp_lib_any should have the value 201606L in c++26" +# endif + +# ifndef __cpp_lib_apply +# error "__cpp_lib_apply should be defined in c++26" +# endif +# if __cpp_lib_apply != 201603L +# error "__cpp_lib_apply should have the value 201603L in c++26" +# endif + +# ifndef __cpp_lib_array_constexpr +# error "__cpp_lib_array_constexpr should be defined in c++26" +# endif +# if __cpp_lib_array_constexpr != 201811L +# error "__cpp_lib_array_constexpr should have the value 201811L in c++26" +# endif + +# ifndef __cpp_lib_as_const +# error "__cpp_lib_as_const should be defined in c++26" +# endif +# if __cpp_lib_as_const != 201510L +# error "__cpp_lib_as_const should have the value 201510L in c++26" +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_associative_heterogeneous_erasure +# error "__cpp_lib_associative_heterogeneous_erasure should be defined in c++26" +# endif +# if __cpp_lib_associative_heterogeneous_erasure != 202110L +# error "__cpp_lib_associative_heterogeneous_erasure should have the value 202110L in c++26" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_associative_heterogeneous_erasure +# error "__cpp_lib_associative_heterogeneous_erasure should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_associative_heterogeneous_insertion +# error "__cpp_lib_associative_heterogeneous_insertion should be defined in c++26" +# endif +# if __cpp_lib_associative_heterogeneous_insertion != 202306L +# error "__cpp_lib_associative_heterogeneous_insertion should have the value 202306L in c++26" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_associative_heterogeneous_insertion +# error "__cpp_lib_associative_heterogeneous_insertion should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# ifndef __cpp_lib_assume_aligned +# error "__cpp_lib_assume_aligned should be defined in c++26" +# endif +# if __cpp_lib_assume_aligned != 201811L +# error "__cpp_lib_assume_aligned should have the value 201811L in c++26" +# endif + +# ifndef __cpp_lib_atomic_flag_test +# error "__cpp_lib_atomic_flag_test should be defined in c++26" +# endif +# if __cpp_lib_atomic_flag_test != 201907L +# error "__cpp_lib_atomic_flag_test should have the value 201907L in c++26" +# endif + +# ifndef __cpp_lib_atomic_float +# error "__cpp_lib_atomic_float should be defined in c++26" +# endif +# if __cpp_lib_atomic_float != 201711L +# error "__cpp_lib_atomic_float should have the value 201711L in c++26" +# endif + +# ifndef __cpp_lib_atomic_is_always_lock_free +# error "__cpp_lib_atomic_is_always_lock_free should be defined in c++26" +# endif +# if __cpp_lib_atomic_is_always_lock_free != 201603L +# error "__cpp_lib_atomic_is_always_lock_free should have the value 201603L in c++26" +# endif + +# ifndef __cpp_lib_atomic_lock_free_type_aliases +# error "__cpp_lib_atomic_lock_free_type_aliases should be defined in c++26" +# endif +# if __cpp_lib_atomic_lock_free_type_aliases != 201907L +# error "__cpp_lib_atomic_lock_free_type_aliases should have the value 201907L in c++26" +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_atomic_min_max +# error "__cpp_lib_atomic_min_max should be defined in c++26" +# endif +# if __cpp_lib_atomic_min_max != 202403L +# error "__cpp_lib_atomic_min_max should have the value 202403L in c++26" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_atomic_min_max +# error "__cpp_lib_atomic_min_max should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# ifndef __cpp_lib_atomic_ref +# error "__cpp_lib_atomic_ref should be defined in c++26" +# endif +# if __cpp_lib_atomic_ref != 201806L +# error "__cpp_lib_atomic_ref should have the value 201806L in c++26" +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_atomic_shared_ptr +# error "__cpp_lib_atomic_shared_ptr should be defined in c++26" +# endif +# if __cpp_lib_atomic_shared_ptr != 201711L +# error "__cpp_lib_atomic_shared_ptr should have the value 201711L in c++26" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_atomic_shared_ptr +# error "__cpp_lib_atomic_shared_ptr should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# ifndef __cpp_lib_atomic_value_initialization +# error "__cpp_lib_atomic_value_initialization should be defined in c++26" +# endif +# if __cpp_lib_atomic_value_initialization != 201911L +# error "__cpp_lib_atomic_value_initialization should have the value 201911L in c++26" +# endif + +# if !defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_SYNC +# ifndef __cpp_lib_atomic_wait +# error "__cpp_lib_atomic_wait should be defined in c++26" +# endif +# if __cpp_lib_atomic_wait != 201907L +# error "__cpp_lib_atomic_wait should have the value 201907L in c++26" +# endif +# else +# ifdef __cpp_lib_atomic_wait +# error "__cpp_lib_atomic_wait should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_SYNC' is not met!" +# endif +# endif + +# if !defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC) +# ifndef __cpp_lib_barrier +# error "__cpp_lib_barrier should be defined in c++26" +# endif +# if __cpp_lib_barrier != 201907L +# error "__cpp_lib_barrier should have the value 201907L in c++26" +# endif +# else +# ifdef __cpp_lib_barrier +# error "__cpp_lib_barrier should not be defined when the requirement '!defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC)' is not met!" +# endif +# endif + +# ifndef __cpp_lib_bind_back +# error "__cpp_lib_bind_back should be defined in c++26" +# endif +# if __cpp_lib_bind_back != 202202L +# error "__cpp_lib_bind_back should have the value 202202L in c++26" +# endif + +# ifndef __cpp_lib_bind_front +# error "__cpp_lib_bind_front should be defined in c++26" +# endif +# if __cpp_lib_bind_front != 202306L +# error "__cpp_lib_bind_front should have the value 202306L in c++26" +# endif + +# ifndef __cpp_lib_bit_cast +# error "__cpp_lib_bit_cast should be defined in c++26" +# endif +# if __cpp_lib_bit_cast != 201806L +# error "__cpp_lib_bit_cast should have the value 201806L in c++26" +# endif + +# ifndef __cpp_lib_bitops +# error "__cpp_lib_bitops should be defined in c++26" +# endif +# if __cpp_lib_bitops != 201907L +# error "__cpp_lib_bitops should have the value 201907L in c++26" +# endif + +# ifndef __cpp_lib_bitset +# error "__cpp_lib_bitset should be defined in c++26" +# endif +# if __cpp_lib_bitset != 202306L +# error "__cpp_lib_bitset should have the value 202306L in c++26" +# endif + +# ifndef __cpp_lib_bool_constant +# error "__cpp_lib_bool_constant should be defined in c++26" +# endif +# if __cpp_lib_bool_constant != 201505L +# error "__cpp_lib_bool_constant should have the value 201505L in c++26" +# endif + +# ifndef __cpp_lib_bounded_array_traits +# error "__cpp_lib_bounded_array_traits should be defined in c++26" +# endif +# if __cpp_lib_bounded_array_traits != 201902L +# error "__cpp_lib_bounded_array_traits should have the value 201902L in c++26" +# endif + +# ifndef __cpp_lib_boyer_moore_searcher +# error "__cpp_lib_boyer_moore_searcher should be defined in c++26" +# endif +# if __cpp_lib_boyer_moore_searcher != 201603L +# error "__cpp_lib_boyer_moore_searcher should have the value 201603L in c++26" +# endif + +# ifndef __cpp_lib_byte +# error "__cpp_lib_byte should be defined in c++26" +# endif +# if __cpp_lib_byte != 201603L +# error "__cpp_lib_byte should have the value 201603L in c++26" +# endif + +# ifndef __cpp_lib_byteswap +# error "__cpp_lib_byteswap should be defined in c++26" +# endif +# if __cpp_lib_byteswap != 202110L +# error "__cpp_lib_byteswap should have the value 202110L in c++26" +# endif + +# if defined(__cpp_char8_t) +# ifndef __cpp_lib_char8_t +# error "__cpp_lib_char8_t should be defined in c++26" +# endif +# if __cpp_lib_char8_t != 201907L +# error "__cpp_lib_char8_t should have the value 201907L in c++26" +# endif +# else +# ifdef __cpp_lib_char8_t +# error "__cpp_lib_char8_t should not be defined when the requirement 'defined(__cpp_char8_t)' is not met!" +# endif +# endif + +# ifndef __cpp_lib_chrono +# error "__cpp_lib_chrono should be defined in c++26" +# endif +# if __cpp_lib_chrono != 201611L +# error "__cpp_lib_chrono should have the value 201611L in c++26" +# endif + +# ifndef __cpp_lib_chrono_udls +# error "__cpp_lib_chrono_udls should be defined in c++26" +# endif +# if __cpp_lib_chrono_udls != 201304L +# error "__cpp_lib_chrono_udls should have the value 201304L in c++26" +# endif + +# ifndef __cpp_lib_clamp +# error "__cpp_lib_clamp should be defined in c++26" +# endif +# if __cpp_lib_clamp != 201603L +# error "__cpp_lib_clamp should have the value 201603L in c++26" +# endif + +# ifndef __cpp_lib_complex_udls +# error "__cpp_lib_complex_udls should be defined in c++26" +# endif +# if __cpp_lib_complex_udls != 201309L +# error "__cpp_lib_complex_udls should have the value 201309L in c++26" +# endif + +# ifndef __cpp_lib_concepts +# error "__cpp_lib_concepts should be defined in c++26" +# endif +# if __cpp_lib_concepts != 202002L +# error "__cpp_lib_concepts should have the value 202002L in c++26" +# endif + +# ifndef __cpp_lib_constexpr_algorithms +# error "__cpp_lib_constexpr_algorithms should be defined in c++26" +# endif +# if __cpp_lib_constexpr_algorithms != 201806L +# error "__cpp_lib_constexpr_algorithms should have the value 201806L in c++26" +# endif + +# ifndef __cpp_lib_constexpr_bitset +# error "__cpp_lib_constexpr_bitset should be defined in c++26" +# endif +# if __cpp_lib_constexpr_bitset != 202207L +# error "__cpp_lib_constexpr_bitset should have the value 202207L in c++26" +# endif + +# ifndef __cpp_lib_constexpr_charconv +# error "__cpp_lib_constexpr_charconv should be defined in c++26" +# endif +# if __cpp_lib_constexpr_charconv != 202207L +# error "__cpp_lib_constexpr_charconv should have the value 202207L in c++26" +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_constexpr_cmath +# error "__cpp_lib_constexpr_cmath should be defined in c++26" +# endif +# if __cpp_lib_constexpr_cmath != 202202L +# error "__cpp_lib_constexpr_cmath should have the value 202202L in c++26" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_constexpr_cmath +# error "__cpp_lib_constexpr_cmath should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# ifndef __cpp_lib_constexpr_complex +# error "__cpp_lib_constexpr_complex should be defined in c++26" +# endif +# if __cpp_lib_constexpr_complex != 201711L +# error "__cpp_lib_constexpr_complex should have the value 201711L in c++26" +# endif + +# ifndef __cpp_lib_constexpr_dynamic_alloc +# error "__cpp_lib_constexpr_dynamic_alloc should be defined in c++26" +# endif +# if __cpp_lib_constexpr_dynamic_alloc != 201907L +# error "__cpp_lib_constexpr_dynamic_alloc should have the value 201907L in c++26" +# endif + +# ifndef __cpp_lib_constexpr_forward_list +# error "__cpp_lib_constexpr_forward_list should be defined in c++26" +# endif +# if __cpp_lib_constexpr_forward_list != 202502L +# error "__cpp_lib_constexpr_forward_list should have the value 202502L in c++26" +# endif + +# ifndef __cpp_lib_constexpr_functional +# error "__cpp_lib_constexpr_functional should be defined in c++26" +# endif +# if __cpp_lib_constexpr_functional != 201907L +# error "__cpp_lib_constexpr_functional should have the value 201907L in c++26" +# endif + +# ifndef __cpp_lib_constexpr_iterator +# error "__cpp_lib_constexpr_iterator should be defined in c++26" +# endif +# if __cpp_lib_constexpr_iterator != 201811L +# error "__cpp_lib_constexpr_iterator should have the value 201811L in c++26" +# endif + +# ifndef __cpp_lib_constexpr_memory +# error "__cpp_lib_constexpr_memory should be defined in c++26" +# endif +# if __cpp_lib_constexpr_memory != 202202L +# error "__cpp_lib_constexpr_memory should have the value 202202L in c++26" +# endif + +# if !defined(_LIBCPP_ABI_VCRUNTIME) +# ifndef __cpp_lib_constexpr_new +# error "__cpp_lib_constexpr_new should be defined in c++26" +# endif +# if __cpp_lib_constexpr_new != 202406L +# error "__cpp_lib_constexpr_new should have the value 202406L in c++26" +# endif +# else +# ifdef __cpp_lib_constexpr_new +# error "__cpp_lib_constexpr_new should not be defined when the requirement '!defined(_LIBCPP_ABI_VCRUNTIME)' is not met!" +# endif +# endif + +# ifndef __cpp_lib_constexpr_numeric +# error "__cpp_lib_constexpr_numeric should be defined in c++26" +# endif +# if __cpp_lib_constexpr_numeric != 201911L +# error "__cpp_lib_constexpr_numeric should have the value 201911L in c++26" +# endif + +# ifndef __cpp_lib_constexpr_string +# error "__cpp_lib_constexpr_string should be defined in c++26" +# endif +# if __cpp_lib_constexpr_string != 201907L +# error "__cpp_lib_constexpr_string should have the value 201907L in c++26" +# endif + +# ifndef __cpp_lib_constexpr_string_view +# error "__cpp_lib_constexpr_string_view should be defined in c++26" +# endif +# if __cpp_lib_constexpr_string_view != 201811L +# error "__cpp_lib_constexpr_string_view should have the value 201811L in c++26" +# endif + +# ifndef __cpp_lib_constexpr_tuple +# error "__cpp_lib_constexpr_tuple should be defined in c++26" +# endif +# if __cpp_lib_constexpr_tuple != 201811L +# error "__cpp_lib_constexpr_tuple should have the value 201811L in c++26" +# endif + +# ifndef __cpp_lib_constexpr_typeinfo +# error "__cpp_lib_constexpr_typeinfo should be defined in c++26" +# endif +# if __cpp_lib_constexpr_typeinfo != 202106L +# error "__cpp_lib_constexpr_typeinfo should have the value 202106L in c++26" +# endif + +# ifndef __cpp_lib_constexpr_utility +# error "__cpp_lib_constexpr_utility should be defined in c++26" +# endif +# if __cpp_lib_constexpr_utility != 201811L +# error "__cpp_lib_constexpr_utility should have the value 201811L in c++26" +# endif + +# ifndef __cpp_lib_constexpr_vector +# error "__cpp_lib_constexpr_vector should be defined in c++26" +# endif +# if __cpp_lib_constexpr_vector != 201907L +# error "__cpp_lib_constexpr_vector should have the value 201907L in c++26" +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_constrained_equality +# error "__cpp_lib_constrained_equality should be defined in c++26" +# endif +# if __cpp_lib_constrained_equality != 202403L +# error "__cpp_lib_constrained_equality should have the value 202403L in c++26" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_constrained_equality +# error "__cpp_lib_constrained_equality should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# ifndef __cpp_lib_containers_ranges +# error "__cpp_lib_containers_ranges should be defined in c++26" +# endif +# if __cpp_lib_containers_ranges != 202202L +# error "__cpp_lib_containers_ranges should have the value 202202L in c++26" +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_copyable_function +# error "__cpp_lib_copyable_function should be defined in c++26" +# endif +# if __cpp_lib_copyable_function != 202306L +# error "__cpp_lib_copyable_function should have the value 202306L in c++26" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_copyable_function +# error "__cpp_lib_copyable_function should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# ifndef __cpp_lib_coroutine +# error "__cpp_lib_coroutine should be defined in c++26" +# endif +# if __cpp_lib_coroutine != 201902L +# error "__cpp_lib_coroutine should have the value 201902L in c++26" +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_debugging +# error "__cpp_lib_debugging should be defined in c++26" +# endif +# if __cpp_lib_debugging != 202311L +# error "__cpp_lib_debugging should have the value 202311L in c++26" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_debugging +# error "__cpp_lib_debugging should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_default_template_type_for_algorithm_values +# error "__cpp_lib_default_template_type_for_algorithm_values should be defined in c++26" +# endif +# if __cpp_lib_default_template_type_for_algorithm_values != 202403L +# error "__cpp_lib_default_template_type_for_algorithm_values should have the value 202403L in c++26" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_default_template_type_for_algorithm_values +# error "__cpp_lib_default_template_type_for_algorithm_values should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# if TEST_STD_VER > 17 && defined(__cpp_impl_destroying_delete) && __cpp_impl_destroying_delete >= 201806L +# ifndef __cpp_lib_destroying_delete +# error "__cpp_lib_destroying_delete should be defined in c++26" +# endif +# if __cpp_lib_destroying_delete != 201806L +# error "__cpp_lib_destroying_delete should have the value 201806L in c++26" +# endif +# else +# ifdef __cpp_lib_destroying_delete +# error "__cpp_lib_destroying_delete should not be defined when the requirement 'TEST_STD_VER > 17 && defined(__cpp_impl_destroying_delete) && __cpp_impl_destroying_delete >= 201806L' is not met!" +# endif +# endif + +# ifndef __cpp_lib_enable_shared_from_this +# error "__cpp_lib_enable_shared_from_this should be defined in c++26" +# endif +# if __cpp_lib_enable_shared_from_this != 201603L +# error "__cpp_lib_enable_shared_from_this should have the value 201603L in c++26" +# endif + +# ifndef __cpp_lib_endian +# error "__cpp_lib_endian should be defined in c++26" +# endif +# if __cpp_lib_endian != 201907L +# error "__cpp_lib_endian should have the value 201907L in c++26" +# endif + +# ifndef __cpp_lib_erase_if +# error "__cpp_lib_erase_if should be defined in c++26" +# endif +# if __cpp_lib_erase_if != 202002L +# error "__cpp_lib_erase_if should have the value 202002L in c++26" +# endif + +# ifndef __cpp_lib_exchange_function +# error "__cpp_lib_exchange_function should be defined in c++26" +# endif +# if __cpp_lib_exchange_function != 201304L +# error "__cpp_lib_exchange_function should have the value 201304L in c++26" +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_execution +# error "__cpp_lib_execution should be defined in c++26" +# endif +# if __cpp_lib_execution != 201902L +# error "__cpp_lib_execution should have the value 201902L in c++26" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_execution +# error "__cpp_lib_execution should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# ifndef __cpp_lib_expected +# error "__cpp_lib_expected should be defined in c++26" +# endif +# if __cpp_lib_expected != 202211L +# error "__cpp_lib_expected should have the value 202211L in c++26" +# endif + +# if !defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_FILESYSTEM && _LIBCPP_AVAILABILITY_HAS_FILESYSTEM_LIBRARY) +# ifndef __cpp_lib_filesystem +# error "__cpp_lib_filesystem should be defined in c++26" +# endif +# if __cpp_lib_filesystem != 201703L +# error "__cpp_lib_filesystem should have the value 201703L in c++26" +# endif +# else +# ifdef __cpp_lib_filesystem +# error "__cpp_lib_filesystem should not be defined when the requirement '!defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_FILESYSTEM && _LIBCPP_AVAILABILITY_HAS_FILESYSTEM_LIBRARY)' is not met!" +# endif +# endif + +# ifndef __cpp_lib_flat_map +# error "__cpp_lib_flat_map should be defined in c++26" +# endif +# if __cpp_lib_flat_map != 202207L +# error "__cpp_lib_flat_map should have the value 202207L in c++26" +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_flat_set +# error "__cpp_lib_flat_set should be defined in c++26" +# endif +# if __cpp_lib_flat_set != 202207L +# error "__cpp_lib_flat_set should have the value 202207L in c++26" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_flat_set +# error "__cpp_lib_flat_set should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# if !defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_TO_CHARS_FLOATING_POINT +# ifndef __cpp_lib_format +# error "__cpp_lib_format should be defined in c++26" +# endif +# if __cpp_lib_format != 202110L +# error "__cpp_lib_format should have the value 202110L in c++26" +# endif +# else +# ifdef __cpp_lib_format +# error "__cpp_lib_format should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_TO_CHARS_FLOATING_POINT' is not met!" +# endif +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_format_path +# error "__cpp_lib_format_path should be defined in c++26" +# endif +# if __cpp_lib_format_path != 202403L +# error "__cpp_lib_format_path should have the value 202403L in c++26" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_format_path +# error "__cpp_lib_format_path should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# ifndef __cpp_lib_format_ranges +# error "__cpp_lib_format_ranges should be defined in c++26" +# endif +# if __cpp_lib_format_ranges != 202207L +# error "__cpp_lib_format_ranges should have the value 202207L in c++26" +# endif + +# ifndef __cpp_lib_format_uchar +# error "__cpp_lib_format_uchar should be defined in c++26" +# endif +# if __cpp_lib_format_uchar != 202311L +# error "__cpp_lib_format_uchar should have the value 202311L in c++26" +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_formatters +# error "__cpp_lib_formatters should be defined in c++26" +# endif +# if __cpp_lib_formatters != 202302L +# error "__cpp_lib_formatters should have the value 202302L in c++26" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_formatters +# error "__cpp_lib_formatters should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# ifndef __cpp_lib_forward_like +# error "__cpp_lib_forward_like should be defined in c++26" +# endif +# if __cpp_lib_forward_like != 202207L +# error "__cpp_lib_forward_like should have the value 202207L in c++26" +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_freestanding_algorithm +# error "__cpp_lib_freestanding_algorithm should be defined in c++26" +# endif +# if __cpp_lib_freestanding_algorithm != 202311L +# error "__cpp_lib_freestanding_algorithm should have the value 202311L in c++26" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_freestanding_algorithm +# error "__cpp_lib_freestanding_algorithm should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_freestanding_array +# error "__cpp_lib_freestanding_array should be defined in c++26" +# endif +# if __cpp_lib_freestanding_array != 202311L +# error "__cpp_lib_freestanding_array should have the value 202311L in c++26" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_freestanding_array +# error "__cpp_lib_freestanding_array should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_freestanding_cstring +# error "__cpp_lib_freestanding_cstring should be defined in c++26" +# endif +# if __cpp_lib_freestanding_cstring != 202306L +# error "__cpp_lib_freestanding_cstring should have the value 202306L in c++26" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_freestanding_cstring +# error "__cpp_lib_freestanding_cstring should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_freestanding_expected +# error "__cpp_lib_freestanding_expected should be defined in c++26" +# endif +# if __cpp_lib_freestanding_expected != 202311L +# error "__cpp_lib_freestanding_expected should have the value 202311L in c++26" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_freestanding_expected +# error "__cpp_lib_freestanding_expected should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_freestanding_mdspan +# error "__cpp_lib_freestanding_mdspan should be defined in c++26" +# endif +# if __cpp_lib_freestanding_mdspan != 202311L +# error "__cpp_lib_freestanding_mdspan should have the value 202311L in c++26" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_freestanding_mdspan +# error "__cpp_lib_freestanding_mdspan should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_freestanding_optional +# error "__cpp_lib_freestanding_optional should be defined in c++26" +# endif +# if __cpp_lib_freestanding_optional != 202311L +# error "__cpp_lib_freestanding_optional should have the value 202311L in c++26" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_freestanding_optional +# error "__cpp_lib_freestanding_optional should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_freestanding_string_view +# error "__cpp_lib_freestanding_string_view should be defined in c++26" +# endif +# if __cpp_lib_freestanding_string_view != 202311L +# error "__cpp_lib_freestanding_string_view should have the value 202311L in c++26" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_freestanding_string_view +# error "__cpp_lib_freestanding_string_view should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_freestanding_variant +# error "__cpp_lib_freestanding_variant should be defined in c++26" +# endif +# if __cpp_lib_freestanding_variant != 202311L +# error "__cpp_lib_freestanding_variant should have the value 202311L in c++26" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_freestanding_variant +# error "__cpp_lib_freestanding_variant should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# if !defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_FILESYSTEM && _LIBCPP_HAS_LOCALIZATION) +# ifndef __cpp_lib_fstream_native_handle +# error "__cpp_lib_fstream_native_handle should be defined in c++26" +# endif +# if __cpp_lib_fstream_native_handle != 202306L +# error "__cpp_lib_fstream_native_handle should have the value 202306L in c++26" +# endif +# else +# ifdef __cpp_lib_fstream_native_handle +# error "__cpp_lib_fstream_native_handle should not be defined when the requirement '!defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_FILESYSTEM && _LIBCPP_HAS_LOCALIZATION)' is not met!" +# endif +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_function_ref +# error "__cpp_lib_function_ref should be defined in c++26" +# endif +# if __cpp_lib_function_ref != 202306L +# error "__cpp_lib_function_ref should have the value 202306L in c++26" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_function_ref +# error "__cpp_lib_function_ref should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# ifndef __cpp_lib_gcd_lcm +# error "__cpp_lib_gcd_lcm should be defined in c++26" +# endif +# if __cpp_lib_gcd_lcm != 201606L +# error "__cpp_lib_gcd_lcm should have the value 201606L in c++26" +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_generate_random +# error "__cpp_lib_generate_random should be defined in c++26" +# endif +# if __cpp_lib_generate_random != 202403L +# error "__cpp_lib_generate_random should have the value 202403L in c++26" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_generate_random +# error "__cpp_lib_generate_random should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# ifndef __cpp_lib_generic_associative_lookup +# error "__cpp_lib_generic_associative_lookup should be defined in c++26" +# endif +# if __cpp_lib_generic_associative_lookup != 201304L +# error "__cpp_lib_generic_associative_lookup should have the value 201304L in c++26" +# endif + +# ifndef __cpp_lib_generic_unordered_lookup +# error "__cpp_lib_generic_unordered_lookup should be defined in c++26" +# endif +# if __cpp_lib_generic_unordered_lookup != 201811L +# error "__cpp_lib_generic_unordered_lookup should have the value 201811L in c++26" +# endif + +# if !defined(_LIBCPP_VERSION) || (defined(__GCC_DESTRUCTIVE_SIZE) && defined(__GCC_CONSTRUCTIVE_SIZE)) +# ifndef __cpp_lib_hardware_interference_size +# error "__cpp_lib_hardware_interference_size should be defined in c++26" +# endif +# if __cpp_lib_hardware_interference_size != 201703L +# error "__cpp_lib_hardware_interference_size should have the value 201703L in c++26" +# endif +# else +# ifdef __cpp_lib_hardware_interference_size +# error "__cpp_lib_hardware_interference_size should not be defined when the requirement '!defined(_LIBCPP_VERSION) || (defined(__GCC_DESTRUCTIVE_SIZE) && defined(__GCC_CONSTRUCTIVE_SIZE))' is not met!" +# endif +# endif + +# ifndef __cpp_lib_has_unique_object_representations +# error "__cpp_lib_has_unique_object_representations should be defined in c++26" +# endif +# if __cpp_lib_has_unique_object_representations != 201606L +# error "__cpp_lib_has_unique_object_representations should have the value 201606L in c++26" +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_hazard_pointer +# error "__cpp_lib_hazard_pointer should be defined in c++26" +# endif +# if __cpp_lib_hazard_pointer != 202306L +# error "__cpp_lib_hazard_pointer should have the value 202306L in c++26" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_hazard_pointer +# error "__cpp_lib_hazard_pointer should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# ifndef __cpp_lib_hypot +# error "__cpp_lib_hypot should be defined in c++26" +# endif +# if __cpp_lib_hypot != 201603L +# error "__cpp_lib_hypot should have the value 201603L in c++26" +# endif + +# ifndef __cpp_lib_incomplete_container_elements +# error "__cpp_lib_incomplete_container_elements should be defined in c++26" +# endif +# if __cpp_lib_incomplete_container_elements != 201505L +# error "__cpp_lib_incomplete_container_elements should have the value 201505L in c++26" +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_inplace_vector +# error "__cpp_lib_inplace_vector should be defined in c++26" +# endif +# if __cpp_lib_inplace_vector != 202406L +# error "__cpp_lib_inplace_vector should have the value 202406L in c++26" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_inplace_vector +# error "__cpp_lib_inplace_vector should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# ifndef __cpp_lib_int_pow2 +# error "__cpp_lib_int_pow2 should be defined in c++26" +# endif +# if __cpp_lib_int_pow2 != 202002L +# error "__cpp_lib_int_pow2 should have the value 202002L in c++26" +# endif + +# ifndef __cpp_lib_integer_comparison_functions +# error "__cpp_lib_integer_comparison_functions should be defined in c++26" +# endif +# if __cpp_lib_integer_comparison_functions != 202002L +# error "__cpp_lib_integer_comparison_functions should have the value 202002L in c++26" +# endif + +# ifndef __cpp_lib_integer_sequence +# error "__cpp_lib_integer_sequence should be defined in c++26" +# endif +# if __cpp_lib_integer_sequence != 201304L +# error "__cpp_lib_integer_sequence should have the value 201304L in c++26" +# endif + +# ifndef __cpp_lib_integral_constant_callable +# error "__cpp_lib_integral_constant_callable should be defined in c++26" +# endif +# if __cpp_lib_integral_constant_callable != 201304L +# error "__cpp_lib_integral_constant_callable should have the value 201304L in c++26" +# endif + +# ifndef __cpp_lib_interpolate +# error "__cpp_lib_interpolate should be defined in c++26" +# endif +# if __cpp_lib_interpolate != 201902L +# error "__cpp_lib_interpolate should have the value 201902L in c++26" +# endif + +# ifndef __cpp_lib_invoke +# error "__cpp_lib_invoke should be defined in c++26" +# endif +# if __cpp_lib_invoke != 201411L +# error "__cpp_lib_invoke should have the value 201411L in c++26" +# endif + +# ifndef __cpp_lib_invoke_r +# error "__cpp_lib_invoke_r should be defined in c++26" +# endif +# if __cpp_lib_invoke_r != 202106L +# error "__cpp_lib_invoke_r should have the value 202106L in c++26" +# endif + +# ifndef __cpp_lib_ios_noreplace +# error "__cpp_lib_ios_noreplace should be defined in c++26" +# endif +# if __cpp_lib_ios_noreplace != 202207L +# error "__cpp_lib_ios_noreplace should have the value 202207L in c++26" +# endif + +# ifndef __cpp_lib_is_aggregate +# error "__cpp_lib_is_aggregate should be defined in c++26" +# endif +# if __cpp_lib_is_aggregate != 201703L +# error "__cpp_lib_is_aggregate should have the value 201703L in c++26" +# endif + +# ifndef __cpp_lib_is_constant_evaluated +# error "__cpp_lib_is_constant_evaluated should be defined in c++26" +# endif +# if __cpp_lib_is_constant_evaluated != 201811L +# error "__cpp_lib_is_constant_evaluated should have the value 201811L in c++26" +# endif + +# ifndef __cpp_lib_is_final +# error "__cpp_lib_is_final should be defined in c++26" +# endif +# if __cpp_lib_is_final != 201402L +# error "__cpp_lib_is_final should have the value 201402L in c++26" +# endif + +# if __has_builtin(__builtin_is_implicit_lifetime) +# ifndef __cpp_lib_is_implicit_lifetime +# error "__cpp_lib_is_implicit_lifetime should be defined in c++26" +# endif +# if __cpp_lib_is_implicit_lifetime != 202302L +# error "__cpp_lib_is_implicit_lifetime should have the value 202302L in c++26" +# endif +# else +# ifdef __cpp_lib_is_implicit_lifetime +# error "__cpp_lib_is_implicit_lifetime should not be defined when the requirement '__has_builtin(__builtin_is_implicit_lifetime)' is not met!" +# endif +# endif + +# ifndef __cpp_lib_is_invocable +# error "__cpp_lib_is_invocable should be defined in c++26" +# endif +# if __cpp_lib_is_invocable != 201703L +# error "__cpp_lib_is_invocable should have the value 201703L in c++26" +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_is_layout_compatible +# error "__cpp_lib_is_layout_compatible should be defined in c++26" +# endif +# if __cpp_lib_is_layout_compatible != 201907L +# error "__cpp_lib_is_layout_compatible should have the value 201907L in c++26" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_is_layout_compatible +# error "__cpp_lib_is_layout_compatible should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# ifndef __cpp_lib_is_nothrow_convertible +# error "__cpp_lib_is_nothrow_convertible should be defined in c++26" +# endif +# if __cpp_lib_is_nothrow_convertible != 201806L +# error "__cpp_lib_is_nothrow_convertible should have the value 201806L in c++26" +# endif + +# ifndef __cpp_lib_is_null_pointer +# error "__cpp_lib_is_null_pointer should be defined in c++26" +# endif +# if __cpp_lib_is_null_pointer != 201309L +# error "__cpp_lib_is_null_pointer should have the value 201309L in c++26" +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_is_pointer_interconvertible +# error "__cpp_lib_is_pointer_interconvertible should be defined in c++26" +# endif +# if __cpp_lib_is_pointer_interconvertible != 201907L +# error "__cpp_lib_is_pointer_interconvertible should have the value 201907L in c++26" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_is_pointer_interconvertible +# error "__cpp_lib_is_pointer_interconvertible should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# ifndef __cpp_lib_is_scoped_enum +# error "__cpp_lib_is_scoped_enum should be defined in c++26" +# endif +# if __cpp_lib_is_scoped_enum != 202011L +# error "__cpp_lib_is_scoped_enum should have the value 202011L in c++26" +# endif + +# ifndef __cpp_lib_is_swappable +# error "__cpp_lib_is_swappable should be defined in c++26" +# endif +# if __cpp_lib_is_swappable != 201603L +# error "__cpp_lib_is_swappable should have the value 201603L in c++26" +# endif + +# if __has_builtin(__builtin_is_virtual_base_of) +# ifndef __cpp_lib_is_virtual_base_of +# error "__cpp_lib_is_virtual_base_of should be defined in c++26" +# endif +# if __cpp_lib_is_virtual_base_of != 202406L +# error "__cpp_lib_is_virtual_base_of should have the value 202406L in c++26" +# endif +# else +# ifdef __cpp_lib_is_virtual_base_of +# error "__cpp_lib_is_virtual_base_of should not be defined when the requirement '__has_builtin(__builtin_is_virtual_base_of)' is not met!" +# endif +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_is_within_lifetime +# error "__cpp_lib_is_within_lifetime should be defined in c++26" +# endif +# if __cpp_lib_is_within_lifetime != 202306L +# error "__cpp_lib_is_within_lifetime should have the value 202306L in c++26" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_is_within_lifetime +# error "__cpp_lib_is_within_lifetime should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# if !defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC) +# ifndef __cpp_lib_jthread +# error "__cpp_lib_jthread should be defined in c++26" +# endif +# if __cpp_lib_jthread != 201911L +# error "__cpp_lib_jthread should have the value 201911L in c++26" +# endif +# else +# ifdef __cpp_lib_jthread +# error "__cpp_lib_jthread should not be defined when the requirement '!defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC)' is not met!" +# endif +# endif + +# if !defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC) +# ifndef __cpp_lib_latch +# error "__cpp_lib_latch should be defined in c++26" +# endif +# if __cpp_lib_latch != 201907L +# error "__cpp_lib_latch should have the value 201907L in c++26" +# endif +# else +# ifdef __cpp_lib_latch +# error "__cpp_lib_latch should not be defined when the requirement '!defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC)' is not met!" +# endif +# endif + +# ifndef __cpp_lib_launder +# error "__cpp_lib_launder should be defined in c++26" +# endif +# if __cpp_lib_launder != 201606L +# error "__cpp_lib_launder should have the value 201606L in c++26" +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_linalg +# error "__cpp_lib_linalg should be defined in c++26" +# endif +# if __cpp_lib_linalg != 202311L +# error "__cpp_lib_linalg should have the value 202311L in c++26" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_linalg +# error "__cpp_lib_linalg should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# ifndef __cpp_lib_list_remove_return_type +# error "__cpp_lib_list_remove_return_type should be defined in c++26" +# endif +# if __cpp_lib_list_remove_return_type != 201806L +# error "__cpp_lib_list_remove_return_type should have the value 201806L in c++26" +# endif + +# ifndef __cpp_lib_logical_traits +# error "__cpp_lib_logical_traits should be defined in c++26" +# endif +# if __cpp_lib_logical_traits != 201510L +# error "__cpp_lib_logical_traits should have the value 201510L in c++26" +# endif + +# ifndef __cpp_lib_make_from_tuple +# error "__cpp_lib_make_from_tuple should be defined in c++26" +# endif +# if __cpp_lib_make_from_tuple != 201606L +# error "__cpp_lib_make_from_tuple should have the value 201606L in c++26" +# endif + +# ifndef __cpp_lib_make_reverse_iterator +# error "__cpp_lib_make_reverse_iterator should be defined in c++26" +# endif +# if __cpp_lib_make_reverse_iterator != 201402L +# error "__cpp_lib_make_reverse_iterator should have the value 201402L in c++26" +# endif + +# ifndef __cpp_lib_make_unique +# error "__cpp_lib_make_unique should be defined in c++26" +# endif +# if __cpp_lib_make_unique != 201304L +# error "__cpp_lib_make_unique should have the value 201304L in c++26" +# endif + +# ifndef __cpp_lib_map_try_emplace +# error "__cpp_lib_map_try_emplace should be defined in c++26" +# endif +# if __cpp_lib_map_try_emplace != 201411L +# error "__cpp_lib_map_try_emplace should have the value 201411L in c++26" +# endif + +# ifndef __cpp_lib_math_constants +# error "__cpp_lib_math_constants should be defined in c++26" +# endif +# if __cpp_lib_math_constants != 201907L +# error "__cpp_lib_math_constants should have the value 201907L in c++26" +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_math_special_functions +# error "__cpp_lib_math_special_functions should be defined in c++26" +# endif +# if __cpp_lib_math_special_functions != 201603L +# error "__cpp_lib_math_special_functions should have the value 201603L in c++26" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_math_special_functions +# error "__cpp_lib_math_special_functions should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# ifndef __cpp_lib_mdspan +# error "__cpp_lib_mdspan should be defined in c++26" +# endif +# if __cpp_lib_mdspan != 202406L +# error "__cpp_lib_mdspan should have the value 202406L in c++26" +# endif + +# if !defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_PMR +# ifndef __cpp_lib_memory_resource +# error "__cpp_lib_memory_resource should be defined in c++26" +# endif +# if __cpp_lib_memory_resource != 201603L +# error "__cpp_lib_memory_resource should have the value 201603L in c++26" +# endif +# else +# ifdef __cpp_lib_memory_resource +# error "__cpp_lib_memory_resource should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_PMR' is not met!" +# endif +# endif + +# ifndef __cpp_lib_modules +# error "__cpp_lib_modules should be defined in c++26" +# endif +# if __cpp_lib_modules != 202207L +# error "__cpp_lib_modules should have the value 202207L in c++26" +# endif + +# ifndef __cpp_lib_move_iterator_concept +# error "__cpp_lib_move_iterator_concept should be defined in c++26" +# endif +# if __cpp_lib_move_iterator_concept != 202207L +# error "__cpp_lib_move_iterator_concept should have the value 202207L in c++26" +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_move_only_function +# error "__cpp_lib_move_only_function should be defined in c++26" +# endif +# if __cpp_lib_move_only_function != 202110L +# error "__cpp_lib_move_only_function should have the value 202110L in c++26" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_move_only_function +# error "__cpp_lib_move_only_function should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# ifndef __cpp_lib_node_extract +# error "__cpp_lib_node_extract should be defined in c++26" +# endif +# if __cpp_lib_node_extract != 201606L +# error "__cpp_lib_node_extract should have the value 201606L in c++26" +# endif + +# ifndef __cpp_lib_nonmember_container_access +# error "__cpp_lib_nonmember_container_access should be defined in c++26" +# endif +# if __cpp_lib_nonmember_container_access != 201411L +# error "__cpp_lib_nonmember_container_access should have the value 201411L in c++26" +# endif + +# ifndef __cpp_lib_not_fn +# error "__cpp_lib_not_fn should be defined in c++26" +# endif +# if __cpp_lib_not_fn != 202306L +# error "__cpp_lib_not_fn should have the value 202306L in c++26" +# endif + +# ifndef __cpp_lib_null_iterators +# error "__cpp_lib_null_iterators should be defined in c++26" +# endif +# if __cpp_lib_null_iterators != 201304L +# error "__cpp_lib_null_iterators should have the value 201304L in c++26" +# endif + +# ifndef __cpp_lib_optional +# error "__cpp_lib_optional should be defined in c++26" +# endif +# if __cpp_lib_optional != 202110L +# error "__cpp_lib_optional should have the value 202110L in c++26" +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_optional_range_support +# error "__cpp_lib_optional_range_support should be defined in c++26" +# endif +# if __cpp_lib_optional_range_support != 202406L +# error "__cpp_lib_optional_range_support should have the value 202406L in c++26" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_optional_range_support +# error "__cpp_lib_optional_range_support should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# ifndef __cpp_lib_out_ptr +# error "__cpp_lib_out_ptr should be defined in c++26" +# endif +# if __cpp_lib_out_ptr != 202311L +# error "__cpp_lib_out_ptr should have the value 202311L in c++26" +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_parallel_algorithm +# error "__cpp_lib_parallel_algorithm should be defined in c++26" +# endif +# if __cpp_lib_parallel_algorithm != 201603L +# error "__cpp_lib_parallel_algorithm should have the value 201603L in c++26" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_parallel_algorithm +# error "__cpp_lib_parallel_algorithm should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_philox_engine +# error "__cpp_lib_philox_engine should be defined in c++26" +# endif +# if __cpp_lib_philox_engine != 202406L +# error "__cpp_lib_philox_engine should have the value 202406L in c++26" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_philox_engine +# error "__cpp_lib_philox_engine should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# if !defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_PMR +# ifndef __cpp_lib_polymorphic_allocator +# error "__cpp_lib_polymorphic_allocator should be defined in c++26" +# endif +# if __cpp_lib_polymorphic_allocator != 201902L +# error "__cpp_lib_polymorphic_allocator should have the value 201902L in c++26" +# endif +# else +# ifdef __cpp_lib_polymorphic_allocator +# error "__cpp_lib_polymorphic_allocator should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_PMR' is not met!" +# endif +# endif + +# if !defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_TO_CHARS_FLOATING_POINT +# ifndef __cpp_lib_print +# error "__cpp_lib_print should be defined in c++26" +# endif +# if __cpp_lib_print != 202207L +# error "__cpp_lib_print should have the value 202207L in c++26" +# endif +# else +# ifdef __cpp_lib_print +# error "__cpp_lib_print should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_TO_CHARS_FLOATING_POINT' is not met!" +# endif +# endif + +# if !defined(_LIBCPP_VERSION) || _LIBCPP_HAS_LOCALIZATION +# ifndef __cpp_lib_quoted_string_io +# error "__cpp_lib_quoted_string_io should be defined in c++26" +# endif +# if __cpp_lib_quoted_string_io != 201304L +# error "__cpp_lib_quoted_string_io should have the value 201304L in c++26" +# endif +# else +# ifdef __cpp_lib_quoted_string_io +# error "__cpp_lib_quoted_string_io should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_HAS_LOCALIZATION' is not met!" +# endif +# endif + +# ifndef __cpp_lib_ranges +# error "__cpp_lib_ranges should be defined in c++26" +# endif +# if __cpp_lib_ranges != 202406L +# error "__cpp_lib_ranges should have the value 202406L in c++26" +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_ranges_as_const +# error "__cpp_lib_ranges_as_const should be defined in c++26" +# endif +# if __cpp_lib_ranges_as_const != 202207L +# error "__cpp_lib_ranges_as_const should have the value 202207L in c++26" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_ranges_as_const +# error "__cpp_lib_ranges_as_const should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# ifndef __cpp_lib_ranges_as_rvalue +# error "__cpp_lib_ranges_as_rvalue should be defined in c++26" +# endif +# if __cpp_lib_ranges_as_rvalue != 202207L +# error "__cpp_lib_ranges_as_rvalue should have the value 202207L in c++26" +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_ranges_chunk +# error "__cpp_lib_ranges_chunk should be defined in c++26" +# endif +# if __cpp_lib_ranges_chunk != 202202L +# error "__cpp_lib_ranges_chunk should have the value 202202L in c++26" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_ranges_chunk +# error "__cpp_lib_ranges_chunk should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# ifndef __cpp_lib_ranges_chunk_by +# error "__cpp_lib_ranges_chunk_by should be defined in c++26" +# endif +# if __cpp_lib_ranges_chunk_by != 202202L +# error "__cpp_lib_ranges_chunk_by should have the value 202202L in c++26" +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_ranges_concat +# error "__cpp_lib_ranges_concat should be defined in c++26" +# endif +# if __cpp_lib_ranges_concat != 202403L +# error "__cpp_lib_ranges_concat should have the value 202403L in c++26" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_ranges_concat +# error "__cpp_lib_ranges_concat should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# ifndef __cpp_lib_ranges_contains +# error "__cpp_lib_ranges_contains should be defined in c++26" +# endif +# if __cpp_lib_ranges_contains != 202207L +# error "__cpp_lib_ranges_contains should have the value 202207L in c++26" +# endif + +# ifndef __cpp_lib_ranges_find_last +# error "__cpp_lib_ranges_find_last should be defined in c++26" +# endif +# if __cpp_lib_ranges_find_last != 202207L +# error "__cpp_lib_ranges_find_last should have the value 202207L in c++26" +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_ranges_iota +# error "__cpp_lib_ranges_iota should be defined in c++26" +# endif +# if __cpp_lib_ranges_iota != 202202L +# error "__cpp_lib_ranges_iota should have the value 202202L in c++26" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_ranges_iota +# error "__cpp_lib_ranges_iota should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_ranges_join_with +# error "__cpp_lib_ranges_join_with should be defined in c++26" +# endif +# if __cpp_lib_ranges_join_with != 202202L +# error "__cpp_lib_ranges_join_with should have the value 202202L in c++26" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_ranges_join_with +# error "__cpp_lib_ranges_join_with should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# ifndef __cpp_lib_ranges_repeat +# error "__cpp_lib_ranges_repeat should be defined in c++26" +# endif +# if __cpp_lib_ranges_repeat != 202207L +# error "__cpp_lib_ranges_repeat should have the value 202207L in c++26" +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_ranges_slide +# error "__cpp_lib_ranges_slide should be defined in c++26" +# endif +# if __cpp_lib_ranges_slide != 202202L +# error "__cpp_lib_ranges_slide should have the value 202202L in c++26" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_ranges_slide +# error "__cpp_lib_ranges_slide should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# ifndef __cpp_lib_ranges_starts_ends_with +# error "__cpp_lib_ranges_starts_ends_with should be defined in c++26" +# endif +# if __cpp_lib_ranges_starts_ends_with != 202106L +# error "__cpp_lib_ranges_starts_ends_with should have the value 202106L in c++26" +# endif + +# ifndef __cpp_lib_ranges_to_container +# error "__cpp_lib_ranges_to_container should be defined in c++26" +# endif +# if __cpp_lib_ranges_to_container != 202202L +# error "__cpp_lib_ranges_to_container should have the value 202202L in c++26" +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_ranges_zip +# error "__cpp_lib_ranges_zip should be defined in c++26" +# endif +# if __cpp_lib_ranges_zip != 202110L +# error "__cpp_lib_ranges_zip should have the value 202110L in c++26" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_ranges_zip +# error "__cpp_lib_ranges_zip should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# ifndef __cpp_lib_ratio +# error "__cpp_lib_ratio should be defined in c++26" +# endif +# if __cpp_lib_ratio != 202306L +# error "__cpp_lib_ratio should have the value 202306L in c++26" +# endif + +# ifndef __cpp_lib_raw_memory_algorithms +# error "__cpp_lib_raw_memory_algorithms should be defined in c++26" +# endif +# if __cpp_lib_raw_memory_algorithms != 201606L +# error "__cpp_lib_raw_memory_algorithms should have the value 201606L in c++26" +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_rcu +# error "__cpp_lib_rcu should be defined in c++26" +# endif +# if __cpp_lib_rcu != 202306L +# error "__cpp_lib_rcu should have the value 202306L in c++26" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_rcu +# error "__cpp_lib_rcu should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_reference_from_temporary +# error "__cpp_lib_reference_from_temporary should be defined in c++26" +# endif +# if __cpp_lib_reference_from_temporary != 202202L +# error "__cpp_lib_reference_from_temporary should have the value 202202L in c++26" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_reference_from_temporary +# error "__cpp_lib_reference_from_temporary should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# ifndef __cpp_lib_reference_wrapper +# error "__cpp_lib_reference_wrapper should be defined in c++26" +# endif +# if __cpp_lib_reference_wrapper != 202403L +# error "__cpp_lib_reference_wrapper should have the value 202403L in c++26" +# endif + +# ifndef __cpp_lib_remove_cvref +# error "__cpp_lib_remove_cvref should be defined in c++26" +# endif +# if __cpp_lib_remove_cvref != 201711L +# error "__cpp_lib_remove_cvref should have the value 201711L in c++26" +# endif + +# ifndef __cpp_lib_result_of_sfinae +# error "__cpp_lib_result_of_sfinae should be defined in c++26" +# endif +# if __cpp_lib_result_of_sfinae != 201210L +# error "__cpp_lib_result_of_sfinae should have the value 201210L in c++26" +# endif + +# ifndef __cpp_lib_robust_nonmodifying_seq_ops +# error "__cpp_lib_robust_nonmodifying_seq_ops should be defined in c++26" +# endif +# if __cpp_lib_robust_nonmodifying_seq_ops != 201304L +# error "__cpp_lib_robust_nonmodifying_seq_ops should have the value 201304L in c++26" +# endif + +# ifndef __cpp_lib_sample +# error "__cpp_lib_sample should be defined in c++26" +# endif +# if __cpp_lib_sample != 201603L +# error "__cpp_lib_sample should have the value 201603L in c++26" +# endif + +# ifndef __cpp_lib_saturation_arithmetic +# error "__cpp_lib_saturation_arithmetic should be defined in c++26" +# endif +# if __cpp_lib_saturation_arithmetic != 202311L +# error "__cpp_lib_saturation_arithmetic should have the value 202311L in c++26" +# endif + +# if !defined(_LIBCPP_VERSION) || _LIBCPP_HAS_THREADS +# ifndef __cpp_lib_scoped_lock +# error "__cpp_lib_scoped_lock should be defined in c++26" +# endif +# if __cpp_lib_scoped_lock != 201703L +# error "__cpp_lib_scoped_lock should have the value 201703L in c++26" +# endif +# else +# ifdef __cpp_lib_scoped_lock +# error "__cpp_lib_scoped_lock should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_HAS_THREADS' is not met!" +# endif +# endif + +# if !defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC) +# ifndef __cpp_lib_semaphore +# error "__cpp_lib_semaphore should be defined in c++26" +# endif +# if __cpp_lib_semaphore != 201907L +# error "__cpp_lib_semaphore should have the value 201907L in c++26" +# endif +# else +# ifdef __cpp_lib_semaphore +# error "__cpp_lib_semaphore should not be defined when the requirement '!defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC)' is not met!" +# endif +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_senders +# error "__cpp_lib_senders should be defined in c++26" +# endif +# if __cpp_lib_senders != 202406L +# error "__cpp_lib_senders should have the value 202406L in c++26" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_senders +# error "__cpp_lib_senders should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# if _LIBCPP_HAS_THREADS +# ifndef __cpp_lib_shared_mutex +# error "__cpp_lib_shared_mutex should be defined in c++26" +# endif +# if __cpp_lib_shared_mutex != 201505L +# error "__cpp_lib_shared_mutex should have the value 201505L in c++26" +# endif +# else +# ifdef __cpp_lib_shared_mutex +# error "__cpp_lib_shared_mutex should not be defined when the requirement '_LIBCPP_HAS_THREADS' is not met!" +# endif +# endif + +# ifndef __cpp_lib_shared_ptr_arrays +# error "__cpp_lib_shared_ptr_arrays should be defined in c++26" +# endif +# if __cpp_lib_shared_ptr_arrays != 201707L +# error "__cpp_lib_shared_ptr_arrays should have the value 201707L in c++26" +# endif + +# ifndef __cpp_lib_shared_ptr_weak_type +# error "__cpp_lib_shared_ptr_weak_type should be defined in c++26" +# endif +# if __cpp_lib_shared_ptr_weak_type != 201606L +# error "__cpp_lib_shared_ptr_weak_type should have the value 201606L in c++26" +# endif + +# if _LIBCPP_HAS_THREADS +# ifndef __cpp_lib_shared_timed_mutex +# error "__cpp_lib_shared_timed_mutex should be defined in c++26" +# endif +# if __cpp_lib_shared_timed_mutex != 201402L +# error "__cpp_lib_shared_timed_mutex should have the value 201402L in c++26" +# endif +# else +# ifdef __cpp_lib_shared_timed_mutex +# error "__cpp_lib_shared_timed_mutex should not be defined when the requirement '_LIBCPP_HAS_THREADS' is not met!" +# endif +# endif + +# ifndef __cpp_lib_shift +# error "__cpp_lib_shift should be defined in c++26" +# endif +# if __cpp_lib_shift != 201806L +# error "__cpp_lib_shift should have the value 201806L in c++26" +# endif + +# ifndef __cpp_lib_smart_ptr_for_overwrite +# error "__cpp_lib_smart_ptr_for_overwrite should be defined in c++26" +# endif +# if __cpp_lib_smart_ptr_for_overwrite != 202002L +# error "__cpp_lib_smart_ptr_for_overwrite should have the value 202002L in c++26" +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_smart_ptr_owner_equality +# error "__cpp_lib_smart_ptr_owner_equality should be defined in c++26" +# endif +# if __cpp_lib_smart_ptr_owner_equality != 202306L +# error "__cpp_lib_smart_ptr_owner_equality should have the value 202306L in c++26" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_smart_ptr_owner_equality +# error "__cpp_lib_smart_ptr_owner_equality should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# ifndef __cpp_lib_source_location +# error "__cpp_lib_source_location should be defined in c++26" +# endif +# if __cpp_lib_source_location != 201907L +# error "__cpp_lib_source_location should have the value 201907L in c++26" +# endif + +# ifndef __cpp_lib_span +# error "__cpp_lib_span should be defined in c++26" +# endif +# if __cpp_lib_span != 202002L +# error "__cpp_lib_span should have the value 202002L in c++26" +# endif + +# ifndef __cpp_lib_span_at +# error "__cpp_lib_span_at should be defined in c++26" +# endif +# if __cpp_lib_span_at != 202311L +# error "__cpp_lib_span_at should have the value 202311L in c++26" +# endif + +# ifndef __cpp_lib_span_initializer_list +# error "__cpp_lib_span_initializer_list should be defined in c++26" +# endif +# if __cpp_lib_span_initializer_list != 202311L +# error "__cpp_lib_span_initializer_list should have the value 202311L in c++26" +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_spanstream +# error "__cpp_lib_spanstream should be defined in c++26" +# endif +# if __cpp_lib_spanstream != 202106L +# error "__cpp_lib_spanstream should have the value 202106L in c++26" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_spanstream +# error "__cpp_lib_spanstream should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# ifndef __cpp_lib_ssize +# error "__cpp_lib_ssize should be defined in c++26" +# endif +# if __cpp_lib_ssize != 201902L +# error "__cpp_lib_ssize should have the value 201902L in c++26" +# endif + +# ifndef __cpp_lib_sstream_from_string_view +# error "__cpp_lib_sstream_from_string_view should be defined in c++26" +# endif +# if __cpp_lib_sstream_from_string_view != 202306L +# error "__cpp_lib_sstream_from_string_view should have the value 202306L in c++26" +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_stacktrace +# error "__cpp_lib_stacktrace should be defined in c++26" +# endif +# if __cpp_lib_stacktrace != 202011L +# error "__cpp_lib_stacktrace should have the value 202011L in c++26" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_stacktrace +# error "__cpp_lib_stacktrace should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# ifndef __cpp_lib_starts_ends_with +# error "__cpp_lib_starts_ends_with should be defined in c++26" +# endif +# if __cpp_lib_starts_ends_with != 201711L +# error "__cpp_lib_starts_ends_with should have the value 201711L in c++26" +# endif + +# ifndef __cpp_lib_stdatomic_h +# error "__cpp_lib_stdatomic_h should be defined in c++26" +# endif +# if __cpp_lib_stdatomic_h != 202011L +# error "__cpp_lib_stdatomic_h should have the value 202011L in c++26" +# endif + +# ifndef __cpp_lib_string_contains +# error "__cpp_lib_string_contains should be defined in c++26" +# endif +# if __cpp_lib_string_contains != 202011L +# error "__cpp_lib_string_contains should have the value 202011L in c++26" +# endif + +# ifndef __cpp_lib_string_resize_and_overwrite +# error "__cpp_lib_string_resize_and_overwrite should be defined in c++26" +# endif +# if __cpp_lib_string_resize_and_overwrite != 202110L +# error "__cpp_lib_string_resize_and_overwrite should have the value 202110L in c++26" +# endif + +# ifndef __cpp_lib_string_udls +# error "__cpp_lib_string_udls should be defined in c++26" +# endif +# if __cpp_lib_string_udls != 201304L +# error "__cpp_lib_string_udls should have the value 201304L in c++26" +# endif + +# ifndef __cpp_lib_string_view +# error "__cpp_lib_string_view should be defined in c++26" +# endif +# if __cpp_lib_string_view != 202403L +# error "__cpp_lib_string_view should have the value 202403L in c++26" +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_submdspan +# error "__cpp_lib_submdspan should be defined in c++26" +# endif +# if __cpp_lib_submdspan != 202306L +# error "__cpp_lib_submdspan should have the value 202306L in c++26" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_submdspan +# error "__cpp_lib_submdspan should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# if !defined(_LIBCPP_VERSION) || _LIBCPP_HAS_EXPERIMENTAL_SYNCSTREAM +# ifndef __cpp_lib_syncbuf +# error "__cpp_lib_syncbuf should be defined in c++26" +# endif +# if __cpp_lib_syncbuf != 201803L +# error "__cpp_lib_syncbuf should have the value 201803L in c++26" +# endif +# else +# ifdef __cpp_lib_syncbuf +# error "__cpp_lib_syncbuf should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_HAS_EXPERIMENTAL_SYNCSTREAM' is not met!" +# endif +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_text_encoding +# error "__cpp_lib_text_encoding should be defined in c++26" +# endif +# if __cpp_lib_text_encoding != 202306L +# error "__cpp_lib_text_encoding should have the value 202306L in c++26" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_text_encoding +# error "__cpp_lib_text_encoding should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# ifndef __cpp_lib_three_way_comparison +# error "__cpp_lib_three_way_comparison should be defined in c++26" +# endif +# if __cpp_lib_three_way_comparison != 201907L +# error "__cpp_lib_three_way_comparison should have the value 201907L in c++26" +# endif + +# ifndef __cpp_lib_to_address +# error "__cpp_lib_to_address should be defined in c++26" +# endif +# if __cpp_lib_to_address != 201711L +# error "__cpp_lib_to_address should have the value 201711L in c++26" +# endif + +# ifndef __cpp_lib_to_array +# error "__cpp_lib_to_array should be defined in c++26" +# endif +# if __cpp_lib_to_array != 201907L +# error "__cpp_lib_to_array should have the value 201907L in c++26" +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_to_chars +# error "__cpp_lib_to_chars should be defined in c++26" +# endif +# if __cpp_lib_to_chars != 202306L +# error "__cpp_lib_to_chars should have the value 202306L in c++26" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_to_chars +# error "__cpp_lib_to_chars should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_to_string +# error "__cpp_lib_to_string should be defined in c++26" +# endif +# if __cpp_lib_to_string != 202306L +# error "__cpp_lib_to_string should have the value 202306L in c++26" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_to_string +# error "__cpp_lib_to_string should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# ifndef __cpp_lib_to_underlying +# error "__cpp_lib_to_underlying should be defined in c++26" +# endif +# if __cpp_lib_to_underlying != 202102L +# error "__cpp_lib_to_underlying should have the value 202102L in c++26" +# endif + +# ifndef __cpp_lib_transformation_trait_aliases +# error "__cpp_lib_transformation_trait_aliases should be defined in c++26" +# endif +# if __cpp_lib_transformation_trait_aliases != 201304L +# error "__cpp_lib_transformation_trait_aliases should have the value 201304L in c++26" +# endif + +# ifndef __cpp_lib_transparent_operators +# error "__cpp_lib_transparent_operators should be defined in c++26" +# endif +# if __cpp_lib_transparent_operators != 201510L +# error "__cpp_lib_transparent_operators should have the value 201510L in c++26" +# endif + +# ifndef __cpp_lib_tuple_element_t +# error "__cpp_lib_tuple_element_t should be defined in c++26" +# endif +# if __cpp_lib_tuple_element_t != 201402L +# error "__cpp_lib_tuple_element_t should have the value 201402L in c++26" +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_tuple_like +# error "__cpp_lib_tuple_like should be defined in c++26" +# endif +# if __cpp_lib_tuple_like != 202311L +# error "__cpp_lib_tuple_like should have the value 202311L in c++26" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_tuple_like +# error "__cpp_lib_tuple_like should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# ifndef __cpp_lib_tuples_by_type +# error "__cpp_lib_tuples_by_type should be defined in c++26" +# endif +# if __cpp_lib_tuples_by_type != 201304L +# error "__cpp_lib_tuples_by_type should have the value 201304L in c++26" +# endif + +# ifndef __cpp_lib_type_identity +# error "__cpp_lib_type_identity should be defined in c++26" +# endif +# if __cpp_lib_type_identity != 201806L +# error "__cpp_lib_type_identity should have the value 201806L in c++26" +# endif + +# ifndef __cpp_lib_type_trait_variable_templates +# error "__cpp_lib_type_trait_variable_templates should be defined in c++26" +# endif +# if __cpp_lib_type_trait_variable_templates != 201510L +# error "__cpp_lib_type_trait_variable_templates should have the value 201510L in c++26" +# endif + +# ifndef __cpp_lib_uncaught_exceptions +# error "__cpp_lib_uncaught_exceptions should be defined in c++26" +# endif +# if __cpp_lib_uncaught_exceptions != 201411L +# error "__cpp_lib_uncaught_exceptions should have the value 201411L in c++26" +# endif + +# ifndef __cpp_lib_unordered_map_try_emplace +# error "__cpp_lib_unordered_map_try_emplace should be defined in c++26" +# endif +# if __cpp_lib_unordered_map_try_emplace != 201411L +# error "__cpp_lib_unordered_map_try_emplace should have the value 201411L in c++26" +# endif + +# ifndef __cpp_lib_unreachable +# error "__cpp_lib_unreachable should be defined in c++26" +# endif +# if __cpp_lib_unreachable != 202202L +# error "__cpp_lib_unreachable should have the value 202202L in c++26" +# endif + +# ifndef __cpp_lib_unwrap_ref +# error "__cpp_lib_unwrap_ref should be defined in c++26" +# endif +# if __cpp_lib_unwrap_ref != 201811L +# error "__cpp_lib_unwrap_ref should have the value 201811L in c++26" +# endif + +# ifndef __cpp_lib_variant +# error "__cpp_lib_variant should be defined in c++26" +# endif +# if __cpp_lib_variant != 202306L +# error "__cpp_lib_variant should have the value 202306L in c++26" +# endif + +# ifndef __cpp_lib_void_t +# error "__cpp_lib_void_t should be defined in c++26" +# endif +# if __cpp_lib_void_t != 201411L +# error "__cpp_lib_void_t should have the value 201411L in c++26" +# endif +>>>>>>> 3e1b3b8f0316 (Make forward_list constexpr as part of P3372R3) #endif // TEST_STD_VER > 23 diff --git a/libcxx/test/support/counting_predicates.h b/libcxx/test/support/counting_predicates.h index 6f34ce76302a8..514e70ec9c736 100644 --- a/libcxx/test/support/counting_predicates.h +++ b/libcxx/test/support/counting_predicates.h @@ -16,31 +16,34 @@ template struct unary_counting_predicate { public: - typedef Arg argument_type; - typedef bool result_type; + typedef Arg argument_type; + typedef bool result_type; - unary_counting_predicate(Predicate p) : p_(p), count_(0) {} - unary_counting_predicate(const unary_counting_predicate&) = default; - unary_counting_predicate& operator=(const unary_counting_predicate&) = default; - ~unary_counting_predicate() {} + TEST_CONSTEXPR_CXX20 unary_counting_predicate(Predicate p) : p_(p), count_(0) {} + unary_counting_predicate(const unary_counting_predicate&) = default; + unary_counting_predicate& operator=(const unary_counting_predicate&) = default; + TEST_CONSTEXPR_CXX20 ~unary_counting_predicate() {} - bool operator () (const Arg &a) const { ++count_; return p_(a); } - std::size_t count() const { return count_; } - void reset() { count_ = 0; } + TEST_CONSTEXPR_CXX14 bool operator()(const Arg& a) const { + ++count_; + return p_(a); + } + TEST_CONSTEXPR std::size_t count() const { return count_; } + TEST_CONSTEXPR_CXX14 void reset() { count_ = 0; } private: - Predicate p_; - mutable std::size_t count_; + Predicate p_; + mutable std::size_t count_; }; - -template +template struct binary_counting_predicate { public: - typedef Arg1 first_argument_type; - typedef Arg2 second_argument_type; - typedef bool result_type; + typedef Arg1 first_argument_type; + typedef Arg2 second_argument_type; + typedef bool result_type; +<<<<<<< HEAD TEST_CONSTEXPR binary_counting_predicate(Predicate p) : p_(p), count_(0) {} TEST_CONSTEXPR_CXX14 bool operator()(const Arg1& a1, const Arg2& a2) const { ++count_; @@ -52,6 +55,21 @@ struct binary_counting_predicate { private: Predicate p_; mutable std::size_t count_; +======= + binary_counting_predicate(Predicate p) : p_(p), count_(0) {} + ~binary_counting_predicate() {} + + bool operator()(const Arg1& a1, const Arg2& a2) const { + ++count_; + return p_(a1, a2); + } + std::size_t count() const { return count_; } + void reset() { count_ = 0; } + +private: + Predicate p_; + mutable std::size_t count_; +>>>>>>> 577d8638ae21 (Make forward_list constexpr as part of P3372R3) }; #if TEST_STD_VER > 14 @@ -66,13 +84,13 @@ class counting_predicate { constexpr counting_predicate(Predicate pred, int& count) : pred_(std::move(pred)), count_(&count) {} template - constexpr decltype(auto) operator()(Args&& ...args) { + constexpr decltype(auto) operator()(Args&&... args) { ++(*count_); return pred_(std::forward(args)...); } template - constexpr decltype(auto) operator()(Args&& ...args) const { + constexpr decltype(auto) operator()(Args&&... args) const { ++(*count_); return pred_(std::forward(args)...); } diff --git a/libcxx/utils/generate_feature_test_macro_components.py b/libcxx/utils/generate_feature_test_macro_components.py old mode 100755 new mode 100644 index 82f0d09db5c36..b59c7fdaf0a3d --- a/libcxx/utils/generate_feature_test_macro_components.py +++ b/libcxx/utils/generate_feature_test_macro_components.py @@ -357,6 +357,11 @@ def add_version_header(tc): "values": {"c++20": 201907}, "headers": ["memory"], }, + { + "name": "__cpp_lib_constexpr_forward_list", + "values": {"c++26": 202502}, + "headers": ["forward_list"], + }, { "name": "__cpp_lib_constexpr_functional", "values": {"c++20": 201907}, From 3d213b14747bcbd3e73475559b8386e78e00b98f Mon Sep 17 00:00:00 2001 From: Peng Liu Date: Sun, 2 Mar 2025 15:25:55 -0500 Subject: [PATCH 2/7] Address reviewers comments --- libcxx/include/__memory/allocation_guard.h | 6 +++--- libcxx/include/forward_list | 6 +----- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/libcxx/include/__memory/allocation_guard.h b/libcxx/include/__memory/allocation_guard.h index 2fc485f4ed0ed..016e1a3a429b8 100644 --- a/libcxx/include/__memory/allocation_guard.h +++ b/libcxx/include/__memory/allocation_guard.h @@ -57,7 +57,9 @@ struct __allocation_guard { _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI ~__allocation_guard() _NOEXCEPT { __destroy(); } - _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI __allocation_guard(const __allocation_guard&) = delete; + __allocation_guard(const __allocation_guard&) = delete; + __allocation_guard& operator=(const __allocation_guard& __other) = delete; + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI __allocation_guard(__allocation_guard&& __other) _NOEXCEPT : __alloc_(std::move(__other.__alloc_)), __n_(__other.__n_), @@ -65,8 +67,6 @@ struct __allocation_guard { __other.__ptr_ = nullptr; } - _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI __allocation_guard& - operator=(const __allocation_guard& __other) = delete; _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI __allocation_guard& operator=(__allocation_guard&& __other) _NOEXCEPT { if (std::addressof(__other) != this) { diff --git a/libcxx/include/forward_list b/libcxx/include/forward_list index 124c195de9aa7..67f1c216421b5 100644 --- a/libcxx/include/forward_list +++ b/libcxx/include/forward_list @@ -343,9 +343,7 @@ private: _ALIGNAS_TYPE(_Tp) char __buffer_[sizeof(_Tp)]; public: - _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI _Tp& __get_value() { - return *std::__launder(reinterpret_cast<_Tp*>(&__buffer_)); - } + _LIBCPP_HIDE_FROM_ABI _Tp& __get_value() { return *std::__launder(reinterpret_cast<_Tp*>(&__buffer_)); } # endif _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI explicit __forward_list_node(_NodePtr __next) : _Base(__next) {} @@ -1218,7 +1216,6 @@ forward_list<_Tp, _Alloc>::__insert_after(const_iterator __p, size_type __n, _Ar __last->__next_ = __r->__next_; __r->__next_ = __first; __r = __forward_node_traits<__node_pointer>::__as_iter_node(__last); - // __r = static_cast<__begin_node_pointer>(__last); } return iterator(__r); } @@ -1260,7 +1257,6 @@ forward_list<_Tp, _Alloc>::__insert_after_with_sentinel(const_iterator __p, _Inp __last->__next_ = __r->__next_; __r->__next_ = __first; __r = __forward_node_traits<__node_pointer>::__as_iter_node(__last); - // __r = static_cast<__begin_node_pointer>(__last); } return iterator(__r); From b6fd6def2862949eaf0511e877fad676ebaaa69d Mon Sep 17 00:00:00 2001 From: Peng Liu Date: Mon, 3 Mar 2025 16:15:47 -0500 Subject: [PATCH 3/7] Fix constant evaluation due to non-constant pointer_traits::pointer_to for gcc --- libcxx/include/forward_list | 70 ++++++++++++++++++++++++++++++++----- 1 file changed, 61 insertions(+), 9 deletions(-) diff --git a/libcxx/include/forward_list b/libcxx/include/forward_list index 67f1c216421b5..08bdaf0fe06cb 100644 --- a/libcxx/include/forward_list +++ b/libcxx/include/forward_list @@ -296,7 +296,16 @@ struct __forward_node_traits { # endif _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI static __begin_node_pointer __as_iter_node(__node_pointer __p) { - return __p ? pointer_traits<__begin_node_pointer>::pointer_to(*__p) : static_cast<__begin_node_pointer>(nullptr); +# ifdef _LIBCPP_CXX03_LANG + return static_cast<__begin_node_pointer>(__p); +# else + if constexpr (std::is_pointer<__begin_node_pointer>::value) { + return static_cast<__begin_node_pointer>(__p); + } else { + return __p ? __begin_node_pointer::pointer_to(*static_cast<__begin_node*>(std::addressof(*__p))) + : static_cast<__begin_node_pointer>(nullptr); + } +# endif } }; @@ -311,8 +320,16 @@ struct __forward_begin_node { _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI explicit __forward_begin_node(pointer __n) : __next_(__n) {} _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI __begin_node_pointer __next_as_begin() const { - return __next_ ? pointer_traits<__begin_node_pointer>::pointer_to(*__next_) - : static_cast<__begin_node_pointer>(nullptr); +# ifdef _LIBCPP_CXX03_LANG + return static_cast<__begin_node_pointer>(__next_); +# else + if constexpr (std::is_pointer<__begin_node_pointer>::value) { + return static_cast<__begin_node_pointer>(__next_); + } else { + return __next_ ? __begin_node_pointer::pointer_to(*static_cast<__forward_begin_node*>(std::addressof(*__next_))) + : static_cast<__begin_node_pointer>(nullptr); + } +# endif } }; @@ -359,6 +376,7 @@ template class __forward_list_iterator { typedef __forward_node_traits<_NodePtr> __traits; typedef typename __traits::__node_type __node_type; + typedef typename __traits::__begin_node __begin_node_type; typedef typename __traits::__node_pointer __node_pointer; typedef typename __traits::__begin_node_pointer __begin_node_pointer; typedef typename __traits::__void_pointer __void_pointer; @@ -367,9 +385,17 @@ class __forward_list_iterator { _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI __begin_node_pointer __get_begin() const { return __ptr_; } _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI __node_pointer __get_unsafe_node_pointer() const { - return __ptr_ ? pointer_traits<__node_pointer>::pointer_to( - const_cast<__node_type&>(static_cast(*__ptr_))) - : static_cast<__node_pointer>(nullptr); +# ifdef _LIBCPP_CXX03_LANG + return static_cast<__node_pointer>(__ptr_); +# else + if constexpr (std::is_pointer<__node_pointer>::value) { + return static_cast<__node_pointer>(__ptr_); + } else { + return __ptr_ ? __node_pointer::pointer_to( + *static_cast<__node_type*>(const_cast<__begin_node_type*>(std::addressof(*__ptr_)))) + : static_cast<__node_pointer>(nullptr); + } +# endif } _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI explicit __forward_list_iterator(nullptr_t) _NOEXCEPT @@ -429,6 +455,7 @@ class __forward_list_const_iterator { typedef __forward_node_traits<_NodePtr> __traits; typedef typename __traits::__node_type __node_type; + typedef typename __traits::__begin_node __begin_node_type; typedef typename __traits::__node_pointer __node_pointer; typedef typename __traits::__begin_node_pointer __begin_node_pointer; typedef typename __traits::__void_pointer __void_pointer; @@ -437,9 +464,17 @@ class __forward_list_const_iterator { _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI __begin_node_pointer __get_begin() const { return __ptr_; } _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI __node_pointer __get_unsafe_node_pointer() const { - return __ptr_ ? pointer_traits<__node_pointer>::pointer_to( - const_cast<__node_type&>(static_cast(*__ptr_))) - : static_cast<__node_pointer>(nullptr); +# ifdef _LIBCPP_CXX03_LANG + return static_cast<__node_pointer>(__ptr_); +# else + if constexpr (std::is_pointer<__node_pointer>::value) { + return static_cast<__node_pointer>(__ptr_); + } else { + return __ptr_ ? __node_pointer::pointer_to( + *static_cast<__node_type*>(const_cast<__begin_node_type*>(std::addressof(*__ptr_)))) + : static_cast<__node_pointer>(nullptr); + } +# endif } _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI explicit __forward_list_const_iterator(nullptr_t) _NOEXCEPT @@ -512,10 +547,27 @@ protected: _LIBCPP_COMPRESSED_PAIR(__begin_node, __before_begin_, __node_allocator, __alloc_); _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI __begin_node_pointer __before_begin() _NOEXCEPT { +# ifdef _LIBCPP_CXX03_LANG return pointer_traits<__begin_node_pointer>::pointer_to(__before_begin_); +# else + if constexpr (std::is_pointer<__begin_node_pointer>::value) { + return std::addressof(__before_begin_); + } else { + return __begin_node_pointer::pointer_to(*std::addressof(__before_begin_)); + } +# endif } + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI __begin_node_pointer __before_begin() const _NOEXCEPT { +# ifdef _LIBCPP_CXX03_LANG return pointer_traits<__begin_node_pointer>::pointer_to(const_cast<__begin_node&>(__before_begin_)); +# else + if constexpr (std::is_pointer<__begin_node_pointer>::value) { + return const_cast<__begin_node*>(std::addressof(__before_begin_)); + } else { + return __begin_node_pointer::pointer_to(*const_cast<__begin_node*>(std::addressof(__before_begin_))); + } +# endif } typedef __forward_list_iterator<__node_pointer> iterator; From a5b63ddb892d9e1e665c44eb8cbae0c9cf4d0f0c Mon Sep 17 00:00:00 2001 From: Peng Liu Date: Tue, 4 Mar 2025 10:18:30 -0500 Subject: [PATCH 4/7] Revert to libc++ pointer_traits::pointer_to with necessary cast --- libcxx/include/forward_list | 70 ++++++------------------------------- 1 file changed, 11 insertions(+), 59 deletions(-) diff --git a/libcxx/include/forward_list b/libcxx/include/forward_list index 08bdaf0fe06cb..680b35167596b 100644 --- a/libcxx/include/forward_list +++ b/libcxx/include/forward_list @@ -296,16 +296,8 @@ struct __forward_node_traits { # endif _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI static __begin_node_pointer __as_iter_node(__node_pointer __p) { -# ifdef _LIBCPP_CXX03_LANG - return static_cast<__begin_node_pointer>(__p); -# else - if constexpr (std::is_pointer<__begin_node_pointer>::value) { - return static_cast<__begin_node_pointer>(__p); - } else { - return __p ? __begin_node_pointer::pointer_to(*static_cast<__begin_node*>(std::addressof(*__p))) - : static_cast<__begin_node_pointer>(nullptr); - } -# endif + return __p ? pointer_traits<__begin_node_pointer>::pointer_to(*static_cast<__begin_node*>(std::addressof(*__p))) + : static_cast<__begin_node_pointer>(nullptr); } }; @@ -320,16 +312,9 @@ struct __forward_begin_node { _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI explicit __forward_begin_node(pointer __n) : __next_(__n) {} _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI __begin_node_pointer __next_as_begin() const { -# ifdef _LIBCPP_CXX03_LANG - return static_cast<__begin_node_pointer>(__next_); -# else - if constexpr (std::is_pointer<__begin_node_pointer>::value) { - return static_cast<__begin_node_pointer>(__next_); - } else { - return __next_ ? __begin_node_pointer::pointer_to(*static_cast<__forward_begin_node*>(std::addressof(*__next_))) - : static_cast<__begin_node_pointer>(nullptr); - } -# endif + return __next_ ? pointer_traits<__begin_node_pointer>::pointer_to( + *static_cast<__forward_begin_node*>(std::addressof(*__next_))) + : static_cast<__begin_node_pointer>(nullptr); } }; @@ -385,17 +370,8 @@ class __forward_list_iterator { _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI __begin_node_pointer __get_begin() const { return __ptr_; } _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI __node_pointer __get_unsafe_node_pointer() const { -# ifdef _LIBCPP_CXX03_LANG - return static_cast<__node_pointer>(__ptr_); -# else - if constexpr (std::is_pointer<__node_pointer>::value) { - return static_cast<__node_pointer>(__ptr_); - } else { - return __ptr_ ? __node_pointer::pointer_to( - *static_cast<__node_type*>(const_cast<__begin_node_type*>(std::addressof(*__ptr_)))) - : static_cast<__node_pointer>(nullptr); - } -# endif + return __ptr_ ? pointer_traits<__node_pointer>::pointer_to(*static_cast<__node_type*>(std::addressof(*__ptr_))) + : static_cast<__node_pointer>(nullptr); } _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI explicit __forward_list_iterator(nullptr_t) _NOEXCEPT @@ -464,17 +440,8 @@ class __forward_list_const_iterator { _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI __begin_node_pointer __get_begin() const { return __ptr_; } _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI __node_pointer __get_unsafe_node_pointer() const { -# ifdef _LIBCPP_CXX03_LANG - return static_cast<__node_pointer>(__ptr_); -# else - if constexpr (std::is_pointer<__node_pointer>::value) { - return static_cast<__node_pointer>(__ptr_); - } else { - return __ptr_ ? __node_pointer::pointer_to( - *static_cast<__node_type*>(const_cast<__begin_node_type*>(std::addressof(*__ptr_)))) - : static_cast<__node_pointer>(nullptr); - } -# endif + return __ptr_ ? pointer_traits<__node_pointer>::pointer_to(*static_cast<__node_type*>(std::addressof(*__ptr_))) + : static_cast<__node_pointer>(nullptr); } _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI explicit __forward_list_const_iterator(nullptr_t) _NOEXCEPT @@ -547,27 +514,12 @@ protected: _LIBCPP_COMPRESSED_PAIR(__begin_node, __before_begin_, __node_allocator, __alloc_); _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI __begin_node_pointer __before_begin() _NOEXCEPT { -# ifdef _LIBCPP_CXX03_LANG return pointer_traits<__begin_node_pointer>::pointer_to(__before_begin_); -# else - if constexpr (std::is_pointer<__begin_node_pointer>::value) { - return std::addressof(__before_begin_); - } else { - return __begin_node_pointer::pointer_to(*std::addressof(__before_begin_)); - } -# endif } _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI __begin_node_pointer __before_begin() const _NOEXCEPT { -# ifdef _LIBCPP_CXX03_LANG - return pointer_traits<__begin_node_pointer>::pointer_to(const_cast<__begin_node&>(__before_begin_)); -# else - if constexpr (std::is_pointer<__begin_node_pointer>::value) { - return const_cast<__begin_node*>(std::addressof(__before_begin_)); - } else { - return __begin_node_pointer::pointer_to(*const_cast<__begin_node*>(std::addressof(__before_begin_))); - } -# endif + return pointer_traits<__begin_node_pointer>::pointer_to( + *const_cast<__begin_node*>(std::addressof(__before_begin_))); } typedef __forward_list_iterator<__node_pointer> iterator; From 7c901754850ac0a61aa1445d206722172db43e4e Mon Sep 17 00:00:00 2001 From: Peng Liu Date: Tue, 4 Mar 2025 12:49:09 -0500 Subject: [PATCH 5/7] Add __static_fancy_pointer_cast --- libcxx/include/__memory/pointer_traits.h | 12 ++++++++++-- libcxx/include/forward_list | 13 ++++--------- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/libcxx/include/__memory/pointer_traits.h b/libcxx/include/__memory/pointer_traits.h index 4ba50898fb37d..3a7de082e8821 100644 --- a/libcxx/include/__memory/pointer_traits.h +++ b/libcxx/include/__memory/pointer_traits.h @@ -245,8 +245,8 @@ inline _LIBCPP_HIDE_FROM_ABI constexpr auto to_address(_Tp* __p) noexcept { } template -inline _LIBCPP_HIDE_FROM_ABI constexpr auto -to_address(const _Pointer& __p) noexcept -> decltype(std::__to_address(__p)) { +inline _LIBCPP_HIDE_FROM_ABI constexpr auto to_address(const _Pointer& __p) noexcept + -> decltype(std::__to_address(__p)) { return std::__to_address(__p); } #endif @@ -302,6 +302,14 @@ concept __resettable_smart_pointer_with_args = requires(_Smart __s, _Pointer __p #endif +template +_LIBCPP_CONSTEXPR_SINCE_CXX20 _LIBCPP_HIDE_FROM_ABI _PtrTo __static_fancy_pointer_cast(const _PtrFrom& __p) { + using __ptr_traits = pointer_traits<_PtrTo>; + using __element_type = typename __ptr_traits::element_type; + return __p ? __ptr_traits::pointer_to(*static_cast<__element_type*>(std::addressof(*__p))) + : static_cast<_PtrTo>(nullptr); +} + _LIBCPP_END_NAMESPACE_STD _LIBCPP_POP_MACROS diff --git a/libcxx/include/forward_list b/libcxx/include/forward_list index 680b35167596b..fd41b57c3a3e0 100644 --- a/libcxx/include/forward_list +++ b/libcxx/include/forward_list @@ -296,8 +296,7 @@ struct __forward_node_traits { # endif _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI static __begin_node_pointer __as_iter_node(__node_pointer __p) { - return __p ? pointer_traits<__begin_node_pointer>::pointer_to(*static_cast<__begin_node*>(std::addressof(*__p))) - : static_cast<__begin_node_pointer>(nullptr); + return __static_fancy_pointer_cast<__begin_node_pointer>(__p); } }; @@ -312,9 +311,7 @@ struct __forward_begin_node { _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI explicit __forward_begin_node(pointer __n) : __next_(__n) {} _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI __begin_node_pointer __next_as_begin() const { - return __next_ ? pointer_traits<__begin_node_pointer>::pointer_to( - *static_cast<__forward_begin_node*>(std::addressof(*__next_))) - : static_cast<__begin_node_pointer>(nullptr); + return __static_fancy_pointer_cast<__begin_node_pointer>(__next_); } }; @@ -370,8 +367,7 @@ class __forward_list_iterator { _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI __begin_node_pointer __get_begin() const { return __ptr_; } _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI __node_pointer __get_unsafe_node_pointer() const { - return __ptr_ ? pointer_traits<__node_pointer>::pointer_to(*static_cast<__node_type*>(std::addressof(*__ptr_))) - : static_cast<__node_pointer>(nullptr); + return __static_fancy_pointer_cast<__node_pointer>(__ptr_); } _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI explicit __forward_list_iterator(nullptr_t) _NOEXCEPT @@ -440,8 +436,7 @@ class __forward_list_const_iterator { _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI __begin_node_pointer __get_begin() const { return __ptr_; } _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI __node_pointer __get_unsafe_node_pointer() const { - return __ptr_ ? pointer_traits<__node_pointer>::pointer_to(*static_cast<__node_type*>(std::addressof(*__ptr_))) - : static_cast<__node_pointer>(nullptr); + return __static_fancy_pointer_cast<__node_pointer>(__ptr_); } _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI explicit __forward_list_const_iterator(nullptr_t) _NOEXCEPT From 6b7800aaad06ed75c75e7fa5f9f60ee77d0134e2 Mon Sep 17 00:00:00 2001 From: Peng Liu Date: Tue, 4 Mar 2025 13:26:43 -0500 Subject: [PATCH 6/7] Fix ADL call --- libcxx/include/forward_list | 8 ++++---- libcxx/test/support/counting_predicates.h | 24 ++++------------------- 2 files changed, 8 insertions(+), 24 deletions(-) diff --git a/libcxx/include/forward_list b/libcxx/include/forward_list index fd41b57c3a3e0..a4e986733b7b6 100644 --- a/libcxx/include/forward_list +++ b/libcxx/include/forward_list @@ -296,7 +296,7 @@ struct __forward_node_traits { # endif _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI static __begin_node_pointer __as_iter_node(__node_pointer __p) { - return __static_fancy_pointer_cast<__begin_node_pointer>(__p); + return std::__static_fancy_pointer_cast<__begin_node_pointer>(__p); } }; @@ -311,7 +311,7 @@ struct __forward_begin_node { _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI explicit __forward_begin_node(pointer __n) : __next_(__n) {} _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI __begin_node_pointer __next_as_begin() const { - return __static_fancy_pointer_cast<__begin_node_pointer>(__next_); + return std::__static_fancy_pointer_cast<__begin_node_pointer>(__next_); } }; @@ -367,7 +367,7 @@ class __forward_list_iterator { _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI __begin_node_pointer __get_begin() const { return __ptr_; } _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI __node_pointer __get_unsafe_node_pointer() const { - return __static_fancy_pointer_cast<__node_pointer>(__ptr_); + return std::__static_fancy_pointer_cast<__node_pointer>(__ptr_); } _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI explicit __forward_list_iterator(nullptr_t) _NOEXCEPT @@ -436,7 +436,7 @@ class __forward_list_const_iterator { _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI __begin_node_pointer __get_begin() const { return __ptr_; } _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI __node_pointer __get_unsafe_node_pointer() const { - return __static_fancy_pointer_cast<__node_pointer>(__ptr_); + return std::__static_fancy_pointer_cast<__node_pointer>(__ptr_); } _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI explicit __forward_list_const_iterator(nullptr_t) _NOEXCEPT diff --git a/libcxx/test/support/counting_predicates.h b/libcxx/test/support/counting_predicates.h index 514e70ec9c736..8fb2db1af70d3 100644 --- a/libcxx/test/support/counting_predicates.h +++ b/libcxx/test/support/counting_predicates.h @@ -43,33 +43,17 @@ struct binary_counting_predicate { typedef Arg2 second_argument_type; typedef bool result_type; -<<<<<<< HEAD - TEST_CONSTEXPR binary_counting_predicate(Predicate p) : p_(p), count_(0) {} - TEST_CONSTEXPR_CXX14 bool operator()(const Arg1& a1, const Arg2& a2) const { - ++count_; - return p_(a1, a2); - } - TEST_CONSTEXPR std::size_t count() const { return count_; } - TEST_CONSTEXPR_CXX14 void reset() { count_ = 0; } - - private: - Predicate p_; - mutable std::size_t count_; -======= - binary_counting_predicate(Predicate p) : p_(p), count_(0) {} - ~binary_counting_predicate() {} - - bool operator()(const Arg1& a1, const Arg2& a2) const { + TEST_CONSTEXPR binary_counting_predicate(Predicate p) : p_(p), count_(0) {} + TEST_CONSTEXPR_CXX14 bool operator()(const Arg1& a1, const Arg2& a2) const { ++count_; return p_(a1, a2); } - std::size_t count() const { return count_; } - void reset() { count_ = 0; } + TEST_CONSTEXPR std::size_t count() const { return count_; } + TEST_CONSTEXPR_CXX14 void reset() { count_ = 0; } private: Predicate p_; mutable std::size_t count_; ->>>>>>> 577d8638ae21 (Make forward_list constexpr as part of P3372R3) }; #if TEST_STD_VER > 14 From 30daee896f2be2407cda92091a7cf1936e7ec87d Mon Sep 17 00:00:00 2001 From: Peng Liu Date: Thu, 8 May 2025 11:28:19 -0400 Subject: [PATCH 7/7] Rebase onto main to resolve conflicts --- libcxx/docs/FeatureTestMacroTable.rst | 4 +- libcxx/include/__memory/pointer_traits.h | 4 + libcxx/include/forward_list | 6 +- .../forward_list.version.compile.pass.cpp | 27 + .../version.version.compile.pass.cpp | 6675 +---------------- 5 files changed, 62 insertions(+), 6654 deletions(-) diff --git a/libcxx/docs/FeatureTestMacroTable.rst b/libcxx/docs/FeatureTestMacroTable.rst index aac4ee22989a1..3e6fd643f620c 100644 --- a/libcxx/docs/FeatureTestMacroTable.rst +++ b/libcxx/docs/FeatureTestMacroTable.rst @@ -418,11 +418,9 @@ Status ---------------------------------------------------------- ----------------- ``__cpp_lib_bitset`` ``202306L`` ---------------------------------------------------------- ----------------- -<<<<<<< HEAD ``__cpp_lib_constexpr_algorithms`` ``202306L`` -======= + ---------------------------------------------------------- ----------------- ``__cpp_lib_constexpr_forward_list`` ``202502L`` ->>>>>>> 3e1b3b8f0316 (Make forward_list constexpr as part of P3372R3) ---------------------------------------------------------- ----------------- ``__cpp_lib_constexpr_new`` ``202406L`` ---------------------------------------------------------- ----------------- diff --git a/libcxx/include/__memory/pointer_traits.h b/libcxx/include/__memory/pointer_traits.h index 3a7de082e8821..879b387b9ad1f 100644 --- a/libcxx/include/__memory/pointer_traits.h +++ b/libcxx/include/__memory/pointer_traits.h @@ -302,6 +302,10 @@ concept __resettable_smart_pointer_with_args = requires(_Smart __s, _Pointer __p #endif +// This function ensures safe conversions between fancy pointers at compile-time, where we avoid casts from/to +// `__void_pointer` by obtaining the underlying raw pointer from the fancy pointer using `std::to_address`, +// then dereferencing it to retrieve the pointed-to object, and finally constructing the target fancy pointer +// to that object using the `std::pointer_traits<>::pinter_to` function. template _LIBCPP_CONSTEXPR_SINCE_CXX20 _LIBCPP_HIDE_FROM_ABI _PtrTo __static_fancy_pointer_cast(const _PtrFrom& __p) { using __ptr_traits = pointer_traits<_PtrTo>; diff --git a/libcxx/include/forward_list b/libcxx/include/forward_list index a4e986733b7b6..f0a9c50f23305 100644 --- a/libcxx/include/forward_list +++ b/libcxx/include/forward_list @@ -844,7 +844,8 @@ public: } # endif // _LIBCPP_CXX03_LANG _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI iterator insert_after(const_iterator __p, const value_type& __v); - _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI iterator insert_after(const_iterator __p, size_type __n, const value_type& __v) { + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI iterator + insert_after(const_iterator __p, size_type __n, const value_type& __v) { return __insert_after(__p, __n, __v); } template ::value, int> = 0> @@ -922,7 +923,8 @@ private: _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI void __assign_with_sentinel(_Iter __f, _Sent __l); template - _LIBCPP_HIDE_FROM_ABI iterator __insert_after(const_iterator __p, size_type __n, _Args&&... __args); + _LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI iterator + __insert_after(const_iterator __p, size_type __n, _Args&&... __args); template _LIBCPP_CONSTEXPR_SINCE_CXX26 static _LIBCPP_HIDE_FROM_ABI __node_pointer diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/forward_list.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/forward_list.version.compile.pass.cpp index 31b3e900aabcd..05f903dccafe7 100644 --- a/libcxx/test/std/language.support/support.limits/support.limits.general/forward_list.version.compile.pass.cpp +++ b/libcxx/test/std/language.support/support.limits/support.limits.general/forward_list.version.compile.pass.cpp @@ -24,6 +24,10 @@ # error "__cpp_lib_allocator_traits_is_always_equal should not be defined before c++17" # endif +# ifdef __cpp_lib_constexpr_forward_list +# error "__cpp_lib_constexpr_forward_list should not be defined before c++26" +# endif + # ifdef __cpp_lib_containers_ranges # error "__cpp_lib_containers_ranges should not be defined before c++23" # endif @@ -54,6 +58,10 @@ # error "__cpp_lib_allocator_traits_is_always_equal should not be defined before c++17" # endif +# ifdef __cpp_lib_constexpr_forward_list +# error "__cpp_lib_constexpr_forward_list should not be defined before c++26" +# endif + # ifdef __cpp_lib_containers_ranges # error "__cpp_lib_containers_ranges should not be defined before c++23" # endif @@ -87,6 +95,10 @@ # error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++17" # endif +# ifdef __cpp_lib_constexpr_forward_list +# error "__cpp_lib_constexpr_forward_list should not be defined before c++26" +# endif + # ifdef __cpp_lib_containers_ranges # error "__cpp_lib_containers_ranges should not be defined before c++23" # endif @@ -126,6 +138,10 @@ # error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++20" # endif +# ifdef __cpp_lib_constexpr_forward_list +# error "__cpp_lib_constexpr_forward_list should not be defined before c++26" +# endif + # ifdef __cpp_lib_containers_ranges # error "__cpp_lib_containers_ranges should not be defined before c++23" # endif @@ -171,6 +187,10 @@ # error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++23" # endif +# ifdef __cpp_lib_constexpr_forward_list +# error "__cpp_lib_constexpr_forward_list should not be defined before c++26" +# endif + # ifndef __cpp_lib_containers_ranges # error "__cpp_lib_containers_ranges should be defined in c++23" # endif @@ -219,6 +239,13 @@ # error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++26" # endif +# ifndef __cpp_lib_constexpr_forward_list +# error "__cpp_lib_constexpr_forward_list should be defined in c++26" +# endif +# if __cpp_lib_constexpr_forward_list != 202502L +# error "__cpp_lib_constexpr_forward_list should have the value 202502L in c++26" +# endif + # ifndef __cpp_lib_containers_ranges # error "__cpp_lib_containers_ranges should be defined in c++26" # endif diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/version.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/version.version.compile.pass.cpp index a8774e6ac76e1..a13edacd1e46a 100644 --- a/libcxx/test/std/language.support/support.limits/support.limits.general/version.version.compile.pass.cpp +++ b/libcxx/test/std/language.support/support.limits/support.limits.general/version.version.compile.pass.cpp @@ -13,248 +13,7 @@ // Test the feature test macros defined by -<<<<<<< HEAD // clang-format off -======= -/* Constant Value - __cpp_lib_adaptor_iterator_pair_constructor 202106L [C++23] - __cpp_lib_addressof_constexpr 201603L [C++17] - __cpp_lib_allocate_at_least 202302L [C++23] - __cpp_lib_allocator_traits_is_always_equal 201411L [C++17] - __cpp_lib_any 201606L [C++17] - __cpp_lib_apply 201603L [C++17] - __cpp_lib_array_constexpr 201603L [C++17] - 201811L [C++20] - __cpp_lib_as_const 201510L [C++17] - __cpp_lib_associative_heterogeneous_erasure 202110L [C++23] - __cpp_lib_associative_heterogeneous_insertion 202306L [C++26] - __cpp_lib_assume_aligned 201811L [C++20] - __cpp_lib_atomic_flag_test 201907L [C++20] - __cpp_lib_atomic_float 201711L [C++20] - __cpp_lib_atomic_is_always_lock_free 201603L [C++17] - __cpp_lib_atomic_lock_free_type_aliases 201907L [C++20] - __cpp_lib_atomic_min_max 202403L [C++26] - __cpp_lib_atomic_ref 201806L [C++20] - __cpp_lib_atomic_shared_ptr 201711L [C++20] - __cpp_lib_atomic_value_initialization 201911L [C++20] - __cpp_lib_atomic_wait 201907L [C++20] - __cpp_lib_barrier 201907L [C++20] - __cpp_lib_bind_back 202202L [C++23] - __cpp_lib_bind_front 201907L [C++20] - 202306L [C++26] - __cpp_lib_bit_cast 201806L [C++20] - __cpp_lib_bitops 201907L [C++20] - __cpp_lib_bitset 202306L [C++26] - __cpp_lib_bool_constant 201505L [C++17] - __cpp_lib_bounded_array_traits 201902L [C++20] - __cpp_lib_boyer_moore_searcher 201603L [C++17] - __cpp_lib_byte 201603L [C++17] - __cpp_lib_byteswap 202110L [C++23] - __cpp_lib_char8_t 201907L [C++20] - __cpp_lib_chrono 201611L [C++17] - __cpp_lib_chrono_udls 201304L [C++14] - __cpp_lib_clamp 201603L [C++17] - __cpp_lib_complex_udls 201309L [C++14] - __cpp_lib_concepts 202002L [C++20] - __cpp_lib_constexpr_algorithms 201806L [C++20] - __cpp_lib_constexpr_bitset 202207L [C++23] - __cpp_lib_constexpr_charconv 202207L [C++23] - __cpp_lib_constexpr_cmath 202202L [C++23] - __cpp_lib_constexpr_complex 201711L [C++20] - __cpp_lib_constexpr_dynamic_alloc 201907L [C++20] - __cpp_lib_constexpr_forward_list 202502L [C++26] - __cpp_lib_constexpr_functional 201907L [C++20] - __cpp_lib_constexpr_iterator 201811L [C++20] - __cpp_lib_constexpr_memory 201811L [C++20] - 202202L [C++23] - __cpp_lib_constexpr_new 202406L [C++26] - __cpp_lib_constexpr_numeric 201911L [C++20] - __cpp_lib_constexpr_string 201907L [C++20] - __cpp_lib_constexpr_string_view 201811L [C++20] - __cpp_lib_constexpr_tuple 201811L [C++20] - __cpp_lib_constexpr_typeinfo 202106L [C++23] - __cpp_lib_constexpr_utility 201811L [C++20] - __cpp_lib_constexpr_vector 201907L [C++20] - __cpp_lib_constrained_equality 202403L [C++26] - __cpp_lib_containers_ranges 202202L [C++23] - __cpp_lib_copyable_function 202306L [C++26] - __cpp_lib_coroutine 201902L [C++20] - __cpp_lib_debugging 202311L [C++26] - __cpp_lib_default_template_type_for_algorithm_values 202403L [C++26] - __cpp_lib_destroying_delete 201806L [C++20] - __cpp_lib_enable_shared_from_this 201603L [C++17] - __cpp_lib_endian 201907L [C++20] - __cpp_lib_erase_if 202002L [C++20] - __cpp_lib_exchange_function 201304L [C++14] - __cpp_lib_execution 201603L [C++17] - 201902L [C++20] - __cpp_lib_expected 202211L [C++23] - __cpp_lib_filesystem 201703L [C++17] - __cpp_lib_flat_map 202207L [C++23] - __cpp_lib_flat_set 202207L [C++23] - __cpp_lib_format 202110L [C++20] - __cpp_lib_format_path 202403L [C++26] - __cpp_lib_format_ranges 202207L [C++23] - __cpp_lib_format_uchar 202311L [C++20] - __cpp_lib_formatters 202302L [C++23] - __cpp_lib_forward_like 202207L [C++23] - __cpp_lib_freestanding_algorithm 202311L [C++26] - __cpp_lib_freestanding_array 202311L [C++26] - __cpp_lib_freestanding_cstring 202306L [C++26] - __cpp_lib_freestanding_expected 202311L [C++26] - __cpp_lib_freestanding_mdspan 202311L [C++26] - __cpp_lib_freestanding_optional 202311L [C++26] - __cpp_lib_freestanding_string_view 202311L [C++26] - __cpp_lib_freestanding_variant 202311L [C++26] - __cpp_lib_fstream_native_handle 202306L [C++26] - __cpp_lib_function_ref 202306L [C++26] - __cpp_lib_gcd_lcm 201606L [C++17] - __cpp_lib_generate_random 202403L [C++26] - __cpp_lib_generic_associative_lookup 201304L [C++14] - __cpp_lib_generic_unordered_lookup 201811L [C++20] - __cpp_lib_hardware_interference_size 201703L [C++17] - __cpp_lib_has_unique_object_representations 201606L [C++17] - __cpp_lib_hazard_pointer 202306L [C++26] - __cpp_lib_hypot 201603L [C++17] - __cpp_lib_incomplete_container_elements 201505L [C++17] - __cpp_lib_inplace_vector 202406L [C++26] - __cpp_lib_int_pow2 202002L [C++20] - __cpp_lib_integer_comparison_functions 202002L [C++20] - __cpp_lib_integer_sequence 201304L [C++14] - __cpp_lib_integral_constant_callable 201304L [C++14] - __cpp_lib_interpolate 201902L [C++20] - __cpp_lib_invoke 201411L [C++17] - __cpp_lib_invoke_r 202106L [C++23] - __cpp_lib_ios_noreplace 202207L [C++23] - __cpp_lib_is_aggregate 201703L [C++17] - __cpp_lib_is_constant_evaluated 201811L [C++20] - __cpp_lib_is_final 201402L [C++14] - __cpp_lib_is_implicit_lifetime 202302L [C++23] - __cpp_lib_is_invocable 201703L [C++17] - __cpp_lib_is_layout_compatible 201907L [C++20] - __cpp_lib_is_nothrow_convertible 201806L [C++20] - __cpp_lib_is_null_pointer 201309L [C++14] - __cpp_lib_is_pointer_interconvertible 201907L [C++20] - __cpp_lib_is_scoped_enum 202011L [C++23] - __cpp_lib_is_swappable 201603L [C++17] - __cpp_lib_is_virtual_base_of 202406L [C++26] - __cpp_lib_is_within_lifetime 202306L [C++26] - __cpp_lib_jthread 201911L [C++20] - __cpp_lib_latch 201907L [C++20] - __cpp_lib_launder 201606L [C++17] - __cpp_lib_linalg 202311L [C++26] - __cpp_lib_list_remove_return_type 201806L [C++20] - __cpp_lib_logical_traits 201510L [C++17] - __cpp_lib_make_from_tuple 201606L [C++17] - __cpp_lib_make_reverse_iterator 201402L [C++14] - __cpp_lib_make_unique 201304L [C++14] - __cpp_lib_map_try_emplace 201411L [C++17] - __cpp_lib_math_constants 201907L [C++20] - __cpp_lib_math_special_functions 201603L [C++17] - __cpp_lib_mdspan 202207L [C++23] - 202406L [C++26] - __cpp_lib_memory_resource 201603L [C++17] - __cpp_lib_modules 202207L [C++23] - __cpp_lib_move_iterator_concept 202207L [C++20] - __cpp_lib_move_only_function 202110L [C++23] - __cpp_lib_node_extract 201606L [C++17] - __cpp_lib_nonmember_container_access 201411L [C++17] - __cpp_lib_not_fn 201603L [C++17] - 202306L [C++26] - __cpp_lib_null_iterators 201304L [C++14] - __cpp_lib_optional 201606L [C++17] - 202106L [C++20] - 202110L [C++23] - __cpp_lib_optional_range_support 202406L [C++26] - __cpp_lib_out_ptr 202106L [C++23] - 202311L [C++26] - __cpp_lib_parallel_algorithm 201603L [C++17] - __cpp_lib_philox_engine 202406L [C++26] - __cpp_lib_polymorphic_allocator 201902L [C++20] - __cpp_lib_print 202207L [C++23] - __cpp_lib_quoted_string_io 201304L [C++14] - __cpp_lib_ranges 202110L [C++20] - 202406L [C++23] - __cpp_lib_ranges_as_const 202207L [C++23] - __cpp_lib_ranges_as_rvalue 202207L [C++23] - __cpp_lib_ranges_chunk 202202L [C++23] - __cpp_lib_ranges_chunk_by 202202L [C++23] - __cpp_lib_ranges_concat 202403L [C++26] - __cpp_lib_ranges_contains 202207L [C++23] - __cpp_lib_ranges_find_last 202207L [C++23] - __cpp_lib_ranges_iota 202202L [C++23] - __cpp_lib_ranges_join_with 202202L [C++23] - __cpp_lib_ranges_repeat 202207L [C++23] - __cpp_lib_ranges_slide 202202L [C++23] - __cpp_lib_ranges_starts_ends_with 202106L [C++23] - __cpp_lib_ranges_to_container 202202L [C++23] - __cpp_lib_ranges_zip 202110L [C++23] - __cpp_lib_ratio 202306L [C++26] - __cpp_lib_raw_memory_algorithms 201606L [C++17] - __cpp_lib_rcu 202306L [C++26] - __cpp_lib_reference_from_temporary 202202L [C++23] - __cpp_lib_reference_wrapper 202403L [C++26] - __cpp_lib_remove_cvref 201711L [C++20] - __cpp_lib_result_of_sfinae 201210L [C++14] - __cpp_lib_robust_nonmodifying_seq_ops 201304L [C++14] - __cpp_lib_sample 201603L [C++17] - __cpp_lib_saturation_arithmetic 202311L [C++26] - __cpp_lib_scoped_lock 201703L [C++17] - __cpp_lib_semaphore 201907L [C++20] - __cpp_lib_senders 202406L [C++26] - __cpp_lib_shared_mutex 201505L [C++17] - __cpp_lib_shared_ptr_arrays 201611L [C++17] - 201707L [C++20] - __cpp_lib_shared_ptr_weak_type 201606L [C++17] - __cpp_lib_shared_timed_mutex 201402L [C++14] - __cpp_lib_shift 201806L [C++20] - __cpp_lib_smart_ptr_for_overwrite 202002L [C++20] - __cpp_lib_smart_ptr_owner_equality 202306L [C++26] - __cpp_lib_source_location 201907L [C++20] - __cpp_lib_span 202002L [C++20] - __cpp_lib_span_at 202311L [C++26] - __cpp_lib_span_initializer_list 202311L [C++26] - __cpp_lib_spanstream 202106L [C++23] - __cpp_lib_ssize 201902L [C++20] - __cpp_lib_sstream_from_string_view 202306L [C++26] - __cpp_lib_stacktrace 202011L [C++23] - __cpp_lib_starts_ends_with 201711L [C++20] - __cpp_lib_stdatomic_h 202011L [C++23] - __cpp_lib_string_contains 202011L [C++23] - __cpp_lib_string_resize_and_overwrite 202110L [C++23] - __cpp_lib_string_udls 201304L [C++14] - __cpp_lib_string_view 201606L [C++17] - 201803L [C++20] - 202403L [C++26] - __cpp_lib_submdspan 202306L [C++26] - __cpp_lib_syncbuf 201803L [C++20] - __cpp_lib_text_encoding 202306L [C++26] - __cpp_lib_three_way_comparison 201907L [C++20] - __cpp_lib_to_address 201711L [C++20] - __cpp_lib_to_array 201907L [C++20] - __cpp_lib_to_chars 201611L [C++17] - 202306L [C++26] - __cpp_lib_to_string 202306L [C++26] - __cpp_lib_to_underlying 202102L [C++23] - __cpp_lib_transformation_trait_aliases 201304L [C++14] - __cpp_lib_transparent_operators 201210L [C++14] - 201510L [C++17] - __cpp_lib_tuple_element_t 201402L [C++14] - __cpp_lib_tuple_like 202207L [C++23] - 202311L [C++26] - __cpp_lib_tuples_by_type 201304L [C++14] - __cpp_lib_type_identity 201806L [C++20] - __cpp_lib_type_trait_variable_templates 201510L [C++17] - __cpp_lib_uncaught_exceptions 201411L [C++17] - __cpp_lib_unordered_map_try_emplace 201411L [C++17] - __cpp_lib_unreachable 202202L [C++23] - __cpp_lib_unwrap_ref 201811L [C++20] - __cpp_lib_variant 202102L [C++17] - 202106L [C++20] - 202306L [C++26] - __cpp_lib_void_t 201411L [C++17] -*/ ->>>>>>> 3e1b3b8f0316 (Make forward_list constexpr as part of P3372R3) #include #include "test_macros.h" @@ -433,19 +192,13 @@ # error "__cpp_lib_constexpr_complex should not be defined before c++20" # endif -<<<<<<< HEAD # ifdef __cpp_lib_constexpr_dynamic_alloc # error "__cpp_lib_constexpr_dynamic_alloc should not be defined before c++20" # endif -======= -# ifdef __cpp_lib_constexpr_forward_list -# error "__cpp_lib_constexpr_forward_list should not be defined before c++26" -# endif -# ifdef __cpp_lib_constexpr_functional -# error "__cpp_lib_constexpr_functional should not be defined before c++20" -# endif ->>>>>>> 3e1b3b8f0316 (Make forward_list constexpr as part of P3372R3) +# ifdef __cpp_lib_constexpr_forward_list +# error "__cpp_lib_constexpr_forward_list should not be defined before c++26" +# endif # ifdef __cpp_lib_constexpr_functional # error "__cpp_lib_constexpr_functional should not be defined before c++20" @@ -1185,233 +938,9 @@ # error "__cpp_lib_array_constexpr should not be defined before c++17" # endif -<<<<<<< HEAD # ifdef __cpp_lib_as_const # error "__cpp_lib_as_const should not be defined before c++17" # endif -======= -# ifdef __cpp_lib_associative_heterogeneous_erasure -# error "__cpp_lib_associative_heterogeneous_erasure should not be defined before c++23" -# endif - -# ifdef __cpp_lib_associative_heterogeneous_insertion -# error "__cpp_lib_associative_heterogeneous_insertion should not be defined before c++26" -# endif - -# ifdef __cpp_lib_assume_aligned -# error "__cpp_lib_assume_aligned should not be defined before c++20" -# endif - -# ifdef __cpp_lib_atomic_flag_test -# error "__cpp_lib_atomic_flag_test should not be defined before c++20" -# endif - -# ifdef __cpp_lib_atomic_float -# error "__cpp_lib_atomic_float should not be defined before c++20" -# endif - -# ifdef __cpp_lib_atomic_is_always_lock_free -# error "__cpp_lib_atomic_is_always_lock_free should not be defined before c++17" -# endif - -# ifdef __cpp_lib_atomic_lock_free_type_aliases -# error "__cpp_lib_atomic_lock_free_type_aliases should not be defined before c++20" -# endif - -# ifdef __cpp_lib_atomic_min_max -# error "__cpp_lib_atomic_min_max should not be defined before c++26" -# endif - -# ifdef __cpp_lib_atomic_ref -# error "__cpp_lib_atomic_ref should not be defined before c++20" -# endif - -# ifdef __cpp_lib_atomic_shared_ptr -# error "__cpp_lib_atomic_shared_ptr should not be defined before c++20" -# endif - -# ifdef __cpp_lib_atomic_value_initialization -# error "__cpp_lib_atomic_value_initialization should not be defined before c++20" -# endif - -# ifdef __cpp_lib_atomic_wait -# error "__cpp_lib_atomic_wait should not be defined before c++20" -# endif - -# ifdef __cpp_lib_barrier -# error "__cpp_lib_barrier should not be defined before c++20" -# endif - -# ifdef __cpp_lib_bind_back -# error "__cpp_lib_bind_back should not be defined before c++23" -# endif - -# ifdef __cpp_lib_bind_front -# error "__cpp_lib_bind_front should not be defined before c++20" -# endif - -# ifdef __cpp_lib_bit_cast -# error "__cpp_lib_bit_cast should not be defined before c++20" -# endif - -# ifdef __cpp_lib_bitops -# error "__cpp_lib_bitops should not be defined before c++20" -# endif - -# ifdef __cpp_lib_bitset -# error "__cpp_lib_bitset should not be defined before c++26" -# endif - -# ifdef __cpp_lib_bool_constant -# error "__cpp_lib_bool_constant should not be defined before c++17" -# endif - -# ifdef __cpp_lib_bounded_array_traits -# error "__cpp_lib_bounded_array_traits should not be defined before c++20" -# endif - -# ifdef __cpp_lib_boyer_moore_searcher -# error "__cpp_lib_boyer_moore_searcher should not be defined before c++17" -# endif - -# ifdef __cpp_lib_byte -# error "__cpp_lib_byte should not be defined before c++17" -# endif - -# ifdef __cpp_lib_byteswap -# error "__cpp_lib_byteswap should not be defined before c++23" -# endif - -# ifdef __cpp_lib_char8_t -# error "__cpp_lib_char8_t should not be defined before c++20" -# endif - -# ifdef __cpp_lib_chrono -# error "__cpp_lib_chrono should not be defined before c++17" -# endif - -# ifndef __cpp_lib_chrono_udls -# error "__cpp_lib_chrono_udls should be defined in c++14" -# endif -# if __cpp_lib_chrono_udls != 201304L -# error "__cpp_lib_chrono_udls should have the value 201304L in c++14" -# endif - -# ifdef __cpp_lib_clamp -# error "__cpp_lib_clamp should not be defined before c++17" -# endif - -# ifndef __cpp_lib_complex_udls -# error "__cpp_lib_complex_udls should be defined in c++14" -# endif -# if __cpp_lib_complex_udls != 201309L -# error "__cpp_lib_complex_udls should have the value 201309L in c++14" -# endif - -# ifdef __cpp_lib_concepts -# error "__cpp_lib_concepts should not be defined before c++20" -# endif - -# ifdef __cpp_lib_constexpr_algorithms -# error "__cpp_lib_constexpr_algorithms should not be defined before c++20" -# endif - -# ifdef __cpp_lib_constexpr_bitset -# error "__cpp_lib_constexpr_bitset should not be defined before c++23" -# endif - -# ifdef __cpp_lib_constexpr_charconv -# error "__cpp_lib_constexpr_charconv should not be defined before c++23" -# endif - -# ifdef __cpp_lib_constexpr_cmath -# error "__cpp_lib_constexpr_cmath should not be defined before c++23" -# endif - -# ifdef __cpp_lib_constexpr_complex -# error "__cpp_lib_constexpr_complex should not be defined before c++20" -# endif - -# ifdef __cpp_lib_constexpr_dynamic_alloc -# error "__cpp_lib_constexpr_dynamic_alloc should not be defined before c++20" -# endif - -# ifdef __cpp_lib_constexpr_forward_list -# error "__cpp_lib_constexpr_forward_list should not be defined before c++26" -# endif - -# ifdef __cpp_lib_constexpr_functional -# error "__cpp_lib_constexpr_functional should not be defined before c++20" -# endif - -# ifdef __cpp_lib_constexpr_iterator -# error "__cpp_lib_constexpr_iterator should not be defined before c++20" -# endif - -# ifdef __cpp_lib_constexpr_memory -# error "__cpp_lib_constexpr_memory should not be defined before c++20" -# endif - -# ifdef __cpp_lib_constexpr_new -# error "__cpp_lib_constexpr_new should not be defined before c++26" -# endif - -# ifdef __cpp_lib_constexpr_numeric -# error "__cpp_lib_constexpr_numeric should not be defined before c++20" -# endif - -# ifdef __cpp_lib_constexpr_string -# error "__cpp_lib_constexpr_string should not be defined before c++20" -# endif - -# ifdef __cpp_lib_constexpr_string_view -# error "__cpp_lib_constexpr_string_view should not be defined before c++20" -# endif - -# ifdef __cpp_lib_constexpr_tuple -# error "__cpp_lib_constexpr_tuple should not be defined before c++20" -# endif - -# ifdef __cpp_lib_constexpr_typeinfo -# error "__cpp_lib_constexpr_typeinfo should not be defined before c++23" -# endif - -# ifdef __cpp_lib_constexpr_utility -# error "__cpp_lib_constexpr_utility should not be defined before c++20" -# endif - -# ifdef __cpp_lib_constexpr_vector -# error "__cpp_lib_constexpr_vector should not be defined before c++20" -# endif - -# ifdef __cpp_lib_constrained_equality -# error "__cpp_lib_constrained_equality should not be defined before c++26" -# endif - -# ifdef __cpp_lib_containers_ranges -# error "__cpp_lib_containers_ranges should not be defined before c++23" -# endif - -# ifdef __cpp_lib_copyable_function -# error "__cpp_lib_copyable_function should not be defined before c++26" -# endif - -# ifdef __cpp_lib_coroutine -# error "__cpp_lib_coroutine should not be defined before c++20" -# endif - -# ifdef __cpp_lib_debugging -# error "__cpp_lib_debugging should not be defined before c++26" -# endif - -# ifdef __cpp_lib_default_template_type_for_algorithm_values -# error "__cpp_lib_default_template_type_for_algorithm_values should not be defined before c++26" -# endif - -# ifdef __cpp_lib_destroying_delete -# error "__cpp_lib_destroying_delete should not be defined before c++20" -# endif ->>>>>>> 3e1b3b8f0316 (Make forward_list constexpr as part of P3372R3) # ifdef __cpp_lib_associative_heterogeneous_erasure # error "__cpp_lib_associative_heterogeneous_erasure should not be defined before c++23" @@ -1559,6 +1088,10 @@ # error "__cpp_lib_constexpr_dynamic_alloc should not be defined before c++20" # endif +# ifdef __cpp_lib_constexpr_forward_list +# error "__cpp_lib_constexpr_forward_list should not be defined before c++26" +# endif + # ifdef __cpp_lib_constexpr_functional # error "__cpp_lib_constexpr_functional should not be defined before c++20" # endif @@ -2331,7 +1864,6 @@ #elif TEST_STD_VER == 17 -<<<<<<< HEAD # ifdef __cpp_lib_adaptor_iterator_pair_constructor # error "__cpp_lib_adaptor_iterator_pair_constructor should not be defined before c++23" # endif @@ -2550,6 +2082,10 @@ # error "__cpp_lib_constexpr_dynamic_alloc should not be defined before c++20" # endif +# ifdef __cpp_lib_constexpr_forward_list +# error "__cpp_lib_constexpr_forward_list should not be defined before c++26" +# endif + # ifdef __cpp_lib_constexpr_functional # error "__cpp_lib_constexpr_functional should not be defined before c++20" # endif @@ -3780,6 +3316,10 @@ # error "__cpp_lib_constexpr_dynamic_alloc should have the value 201907L in c++20" # endif +# ifdef __cpp_lib_constexpr_forward_list +# error "__cpp_lib_constexpr_forward_list should not be defined before c++26" +# endif + # ifndef __cpp_lib_constexpr_functional # error "__cpp_lib_constexpr_functional should be defined in c++20" # endif @@ -5232,6 +4772,10 @@ # error "__cpp_lib_constexpr_dynamic_alloc should have the value 201907L in c++23" # endif +# ifdef __cpp_lib_constexpr_forward_list +# error "__cpp_lib_constexpr_forward_list should not be defined before c++26" +# endif + # ifndef __cpp_lib_constexpr_functional # error "__cpp_lib_constexpr_functional should be defined in c++23" # endif @@ -6903,6 +6447,13 @@ # error "__cpp_lib_constexpr_dynamic_alloc should have the value 201907L in c++26" # endif +# ifndef __cpp_lib_constexpr_forward_list +# error "__cpp_lib_constexpr_forward_list should be defined in c++26" +# endif +# if __cpp_lib_constexpr_forward_list != 202502L +# error "__cpp_lib_constexpr_forward_list should have the value 202502L in c++26" +# endif + # ifndef __cpp_lib_constexpr_functional # error "__cpp_lib_constexpr_functional should be defined in c++26" # endif @@ -8518,6180 +8069,6 @@ # if __cpp_lib_void_t != 201411L # error "__cpp_lib_void_t should have the value 201411L in c++26" # endif -======= -# ifdef __cpp_lib_adaptor_iterator_pair_constructor -# error "__cpp_lib_adaptor_iterator_pair_constructor should not be defined before c++23" -# endif - -# ifndef __cpp_lib_addressof_constexpr -# error "__cpp_lib_addressof_constexpr should be defined in c++17" -# endif -# if __cpp_lib_addressof_constexpr != 201603L -# error "__cpp_lib_addressof_constexpr should have the value 201603L in c++17" -# endif - -# ifdef __cpp_lib_allocate_at_least -# error "__cpp_lib_allocate_at_least should not be defined before c++23" -# endif - -# ifndef __cpp_lib_allocator_traits_is_always_equal -# error "__cpp_lib_allocator_traits_is_always_equal should be defined in c++17" -# endif -# if __cpp_lib_allocator_traits_is_always_equal != 201411L -# error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++17" -# endif - -# ifndef __cpp_lib_any -# error "__cpp_lib_any should be defined in c++17" -# endif -# if __cpp_lib_any != 201606L -# error "__cpp_lib_any should have the value 201606L in c++17" -# endif - -# ifndef __cpp_lib_apply -# error "__cpp_lib_apply should be defined in c++17" -# endif -# if __cpp_lib_apply != 201603L -# error "__cpp_lib_apply should have the value 201603L in c++17" -# endif - -# ifndef __cpp_lib_array_constexpr -# error "__cpp_lib_array_constexpr should be defined in c++17" -# endif -# if __cpp_lib_array_constexpr != 201603L -# error "__cpp_lib_array_constexpr should have the value 201603L in c++17" -# endif - -# ifndef __cpp_lib_as_const -# error "__cpp_lib_as_const should be defined in c++17" -# endif -# if __cpp_lib_as_const != 201510L -# error "__cpp_lib_as_const should have the value 201510L in c++17" -# endif - -# ifdef __cpp_lib_associative_heterogeneous_erasure -# error "__cpp_lib_associative_heterogeneous_erasure should not be defined before c++23" -# endif - -# ifdef __cpp_lib_associative_heterogeneous_insertion -# error "__cpp_lib_associative_heterogeneous_insertion should not be defined before c++26" -# endif - -# ifdef __cpp_lib_assume_aligned -# error "__cpp_lib_assume_aligned should not be defined before c++20" -# endif - -# ifdef __cpp_lib_atomic_flag_test -# error "__cpp_lib_atomic_flag_test should not be defined before c++20" -# endif - -# ifdef __cpp_lib_atomic_float -# error "__cpp_lib_atomic_float should not be defined before c++20" -# endif - -# ifndef __cpp_lib_atomic_is_always_lock_free -# error "__cpp_lib_atomic_is_always_lock_free should be defined in c++17" -# endif -# if __cpp_lib_atomic_is_always_lock_free != 201603L -# error "__cpp_lib_atomic_is_always_lock_free should have the value 201603L in c++17" -# endif - -# ifdef __cpp_lib_atomic_lock_free_type_aliases -# error "__cpp_lib_atomic_lock_free_type_aliases should not be defined before c++20" -# endif - -# ifdef __cpp_lib_atomic_min_max -# error "__cpp_lib_atomic_min_max should not be defined before c++26" -# endif - -# ifdef __cpp_lib_atomic_ref -# error "__cpp_lib_atomic_ref should not be defined before c++20" -# endif - -# ifdef __cpp_lib_atomic_shared_ptr -# error "__cpp_lib_atomic_shared_ptr should not be defined before c++20" -# endif - -# ifdef __cpp_lib_atomic_value_initialization -# error "__cpp_lib_atomic_value_initialization should not be defined before c++20" -# endif - -# ifdef __cpp_lib_atomic_wait -# error "__cpp_lib_atomic_wait should not be defined before c++20" -# endif - -# ifdef __cpp_lib_barrier -# error "__cpp_lib_barrier should not be defined before c++20" -# endif - -# ifdef __cpp_lib_bind_back -# error "__cpp_lib_bind_back should not be defined before c++23" -# endif - -# ifdef __cpp_lib_bind_front -# error "__cpp_lib_bind_front should not be defined before c++20" -# endif - -# ifdef __cpp_lib_bit_cast -# error "__cpp_lib_bit_cast should not be defined before c++20" -# endif - -# ifdef __cpp_lib_bitops -# error "__cpp_lib_bitops should not be defined before c++20" -# endif - -# ifdef __cpp_lib_bitset -# error "__cpp_lib_bitset should not be defined before c++26" -# endif - -# ifndef __cpp_lib_bool_constant -# error "__cpp_lib_bool_constant should be defined in c++17" -# endif -# if __cpp_lib_bool_constant != 201505L -# error "__cpp_lib_bool_constant should have the value 201505L in c++17" -# endif - -# ifdef __cpp_lib_bounded_array_traits -# error "__cpp_lib_bounded_array_traits should not be defined before c++20" -# endif - -# ifndef __cpp_lib_boyer_moore_searcher -# error "__cpp_lib_boyer_moore_searcher should be defined in c++17" -# endif -# if __cpp_lib_boyer_moore_searcher != 201603L -# error "__cpp_lib_boyer_moore_searcher should have the value 201603L in c++17" -# endif - -# ifndef __cpp_lib_byte -# error "__cpp_lib_byte should be defined in c++17" -# endif -# if __cpp_lib_byte != 201603L -# error "__cpp_lib_byte should have the value 201603L in c++17" -# endif - -# ifdef __cpp_lib_byteswap -# error "__cpp_lib_byteswap should not be defined before c++23" -# endif - -# ifdef __cpp_lib_char8_t -# error "__cpp_lib_char8_t should not be defined before c++20" -# endif - -# ifndef __cpp_lib_chrono -# error "__cpp_lib_chrono should be defined in c++17" -# endif -# if __cpp_lib_chrono != 201611L -# error "__cpp_lib_chrono should have the value 201611L in c++17" -# endif - -# ifndef __cpp_lib_chrono_udls -# error "__cpp_lib_chrono_udls should be defined in c++17" -# endif -# if __cpp_lib_chrono_udls != 201304L -# error "__cpp_lib_chrono_udls should have the value 201304L in c++17" -# endif - -# ifndef __cpp_lib_clamp -# error "__cpp_lib_clamp should be defined in c++17" -# endif -# if __cpp_lib_clamp != 201603L -# error "__cpp_lib_clamp should have the value 201603L in c++17" -# endif - -# ifndef __cpp_lib_complex_udls -# error "__cpp_lib_complex_udls should be defined in c++17" -# endif -# if __cpp_lib_complex_udls != 201309L -# error "__cpp_lib_complex_udls should have the value 201309L in c++17" -# endif - -# ifdef __cpp_lib_concepts -# error "__cpp_lib_concepts should not be defined before c++20" -# endif - -# ifdef __cpp_lib_constexpr_algorithms -# error "__cpp_lib_constexpr_algorithms should not be defined before c++20" -# endif - -# ifdef __cpp_lib_constexpr_bitset -# error "__cpp_lib_constexpr_bitset should not be defined before c++23" -# endif - -# ifdef __cpp_lib_constexpr_charconv -# error "__cpp_lib_constexpr_charconv should not be defined before c++23" -# endif - -# ifdef __cpp_lib_constexpr_cmath -# error "__cpp_lib_constexpr_cmath should not be defined before c++23" -# endif - -# ifdef __cpp_lib_constexpr_complex -# error "__cpp_lib_constexpr_complex should not be defined before c++20" -# endif - -# ifdef __cpp_lib_constexpr_dynamic_alloc -# error "__cpp_lib_constexpr_dynamic_alloc should not be defined before c++20" -# endif - -# ifdef __cpp_lib_constexpr_forward_list -# error "__cpp_lib_constexpr_forward_list should not be defined before c++26" -# endif - -# ifdef __cpp_lib_constexpr_functional -# error "__cpp_lib_constexpr_functional should not be defined before c++20" -# endif - -# ifdef __cpp_lib_constexpr_iterator -# error "__cpp_lib_constexpr_iterator should not be defined before c++20" -# endif - -# ifdef __cpp_lib_constexpr_memory -# error "__cpp_lib_constexpr_memory should not be defined before c++20" -# endif - -# ifdef __cpp_lib_constexpr_new -# error "__cpp_lib_constexpr_new should not be defined before c++26" -# endif - -# ifdef __cpp_lib_constexpr_numeric -# error "__cpp_lib_constexpr_numeric should not be defined before c++20" -# endif - -# ifdef __cpp_lib_constexpr_string -# error "__cpp_lib_constexpr_string should not be defined before c++20" -# endif - -# ifdef __cpp_lib_constexpr_string_view -# error "__cpp_lib_constexpr_string_view should not be defined before c++20" -# endif - -# ifdef __cpp_lib_constexpr_tuple -# error "__cpp_lib_constexpr_tuple should not be defined before c++20" -# endif - -# ifdef __cpp_lib_constexpr_typeinfo -# error "__cpp_lib_constexpr_typeinfo should not be defined before c++23" -# endif - -# ifdef __cpp_lib_constexpr_utility -# error "__cpp_lib_constexpr_utility should not be defined before c++20" -# endif - -# ifdef __cpp_lib_constexpr_vector -# error "__cpp_lib_constexpr_vector should not be defined before c++20" -# endif - -# ifdef __cpp_lib_constrained_equality -# error "__cpp_lib_constrained_equality should not be defined before c++26" -# endif - -# ifdef __cpp_lib_containers_ranges -# error "__cpp_lib_containers_ranges should not be defined before c++23" -# endif - -# ifdef __cpp_lib_copyable_function -# error "__cpp_lib_copyable_function should not be defined before c++26" -# endif - -# ifdef __cpp_lib_coroutine -# error "__cpp_lib_coroutine should not be defined before c++20" -# endif - -# ifdef __cpp_lib_debugging -# error "__cpp_lib_debugging should not be defined before c++26" -# endif - -# ifdef __cpp_lib_default_template_type_for_algorithm_values -# error "__cpp_lib_default_template_type_for_algorithm_values should not be defined before c++26" -# endif - -# ifdef __cpp_lib_destroying_delete -# error "__cpp_lib_destroying_delete should not be defined before c++20" -# endif - -# ifndef __cpp_lib_enable_shared_from_this -# error "__cpp_lib_enable_shared_from_this should be defined in c++17" -# endif -# if __cpp_lib_enable_shared_from_this != 201603L -# error "__cpp_lib_enable_shared_from_this should have the value 201603L in c++17" -# endif - -# ifdef __cpp_lib_endian -# error "__cpp_lib_endian should not be defined before c++20" -# endif - -# ifdef __cpp_lib_erase_if -# error "__cpp_lib_erase_if should not be defined before c++20" -# endif - -# ifndef __cpp_lib_exchange_function -# error "__cpp_lib_exchange_function should be defined in c++17" -# endif -# if __cpp_lib_exchange_function != 201304L -# error "__cpp_lib_exchange_function should have the value 201304L in c++17" -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_execution -# error "__cpp_lib_execution should be defined in c++17" -# endif -# if __cpp_lib_execution != 201603L -# error "__cpp_lib_execution should have the value 201603L in c++17" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_execution -# error "__cpp_lib_execution should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# ifdef __cpp_lib_expected -# error "__cpp_lib_expected should not be defined before c++23" -# endif - -# if !defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_FILESYSTEM && _LIBCPP_AVAILABILITY_HAS_FILESYSTEM_LIBRARY) -# ifndef __cpp_lib_filesystem -# error "__cpp_lib_filesystem should be defined in c++17" -# endif -# if __cpp_lib_filesystem != 201703L -# error "__cpp_lib_filesystem should have the value 201703L in c++17" -# endif -# else -# ifdef __cpp_lib_filesystem -# error "__cpp_lib_filesystem should not be defined when the requirement '!defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_FILESYSTEM && _LIBCPP_AVAILABILITY_HAS_FILESYSTEM_LIBRARY)' is not met!" -# endif -# endif - -# ifdef __cpp_lib_flat_map -# error "__cpp_lib_flat_map should not be defined before c++23" -# endif - -# ifdef __cpp_lib_flat_set -# error "__cpp_lib_flat_set should not be defined before c++23" -# endif - -# ifdef __cpp_lib_format -# error "__cpp_lib_format should not be defined before c++20" -# endif - -# ifdef __cpp_lib_format_path -# error "__cpp_lib_format_path should not be defined before c++26" -# endif - -# ifdef __cpp_lib_format_ranges -# error "__cpp_lib_format_ranges should not be defined before c++23" -# endif - -# ifdef __cpp_lib_format_uchar -# error "__cpp_lib_format_uchar should not be defined before c++20" -# endif - -# ifdef __cpp_lib_formatters -# error "__cpp_lib_formatters should not be defined before c++23" -# endif - -# ifdef __cpp_lib_forward_like -# error "__cpp_lib_forward_like should not be defined before c++23" -# endif - -# ifdef __cpp_lib_freestanding_algorithm -# error "__cpp_lib_freestanding_algorithm should not be defined before c++26" -# endif - -# ifdef __cpp_lib_freestanding_array -# error "__cpp_lib_freestanding_array should not be defined before c++26" -# endif - -# ifdef __cpp_lib_freestanding_cstring -# error "__cpp_lib_freestanding_cstring should not be defined before c++26" -# endif - -# ifdef __cpp_lib_freestanding_expected -# error "__cpp_lib_freestanding_expected should not be defined before c++26" -# endif - -# ifdef __cpp_lib_freestanding_mdspan -# error "__cpp_lib_freestanding_mdspan should not be defined before c++26" -# endif - -# ifdef __cpp_lib_freestanding_optional -# error "__cpp_lib_freestanding_optional should not be defined before c++26" -# endif - -# ifdef __cpp_lib_freestanding_string_view -# error "__cpp_lib_freestanding_string_view should not be defined before c++26" -# endif - -# ifdef __cpp_lib_freestanding_variant -# error "__cpp_lib_freestanding_variant should not be defined before c++26" -# endif - -# ifdef __cpp_lib_fstream_native_handle -# error "__cpp_lib_fstream_native_handle should not be defined before c++26" -# endif - -# ifdef __cpp_lib_function_ref -# error "__cpp_lib_function_ref should not be defined before c++26" -# endif - -# ifndef __cpp_lib_gcd_lcm -# error "__cpp_lib_gcd_lcm should be defined in c++17" -# endif -# if __cpp_lib_gcd_lcm != 201606L -# error "__cpp_lib_gcd_lcm should have the value 201606L in c++17" -# endif - -# ifdef __cpp_lib_generate_random -# error "__cpp_lib_generate_random should not be defined before c++26" -# endif - -# ifndef __cpp_lib_generic_associative_lookup -# error "__cpp_lib_generic_associative_lookup should be defined in c++17" -# endif -# if __cpp_lib_generic_associative_lookup != 201304L -# error "__cpp_lib_generic_associative_lookup should have the value 201304L in c++17" -# endif - -# ifdef __cpp_lib_generic_unordered_lookup -# error "__cpp_lib_generic_unordered_lookup should not be defined before c++20" -# endif - -# if !defined(_LIBCPP_VERSION) || (defined(__GCC_DESTRUCTIVE_SIZE) && defined(__GCC_CONSTRUCTIVE_SIZE)) -# ifndef __cpp_lib_hardware_interference_size -# error "__cpp_lib_hardware_interference_size should be defined in c++17" -# endif -# if __cpp_lib_hardware_interference_size != 201703L -# error "__cpp_lib_hardware_interference_size should have the value 201703L in c++17" -# endif -# else -# ifdef __cpp_lib_hardware_interference_size -# error "__cpp_lib_hardware_interference_size should not be defined when the requirement '!defined(_LIBCPP_VERSION) || (defined(__GCC_DESTRUCTIVE_SIZE) && defined(__GCC_CONSTRUCTIVE_SIZE))' is not met!" -# endif -# endif - -# ifndef __cpp_lib_has_unique_object_representations -# error "__cpp_lib_has_unique_object_representations should be defined in c++17" -# endif -# if __cpp_lib_has_unique_object_representations != 201606L -# error "__cpp_lib_has_unique_object_representations should have the value 201606L in c++17" -# endif - -# ifdef __cpp_lib_hazard_pointer -# error "__cpp_lib_hazard_pointer should not be defined before c++26" -# endif - -# ifndef __cpp_lib_hypot -# error "__cpp_lib_hypot should be defined in c++17" -# endif -# if __cpp_lib_hypot != 201603L -# error "__cpp_lib_hypot should have the value 201603L in c++17" -# endif - -# ifndef __cpp_lib_incomplete_container_elements -# error "__cpp_lib_incomplete_container_elements should be defined in c++17" -# endif -# if __cpp_lib_incomplete_container_elements != 201505L -# error "__cpp_lib_incomplete_container_elements should have the value 201505L in c++17" -# endif - -# ifdef __cpp_lib_inplace_vector -# error "__cpp_lib_inplace_vector should not be defined before c++26" -# endif - -# ifdef __cpp_lib_int_pow2 -# error "__cpp_lib_int_pow2 should not be defined before c++20" -# endif - -# ifdef __cpp_lib_integer_comparison_functions -# error "__cpp_lib_integer_comparison_functions should not be defined before c++20" -# endif - -# ifndef __cpp_lib_integer_sequence -# error "__cpp_lib_integer_sequence should be defined in c++17" -# endif -# if __cpp_lib_integer_sequence != 201304L -# error "__cpp_lib_integer_sequence should have the value 201304L in c++17" -# endif - -# ifndef __cpp_lib_integral_constant_callable -# error "__cpp_lib_integral_constant_callable should be defined in c++17" -# endif -# if __cpp_lib_integral_constant_callable != 201304L -# error "__cpp_lib_integral_constant_callable should have the value 201304L in c++17" -# endif - -# ifdef __cpp_lib_interpolate -# error "__cpp_lib_interpolate should not be defined before c++20" -# endif - -# ifndef __cpp_lib_invoke -# error "__cpp_lib_invoke should be defined in c++17" -# endif -# if __cpp_lib_invoke != 201411L -# error "__cpp_lib_invoke should have the value 201411L in c++17" -# endif - -# ifdef __cpp_lib_invoke_r -# error "__cpp_lib_invoke_r should not be defined before c++23" -# endif - -# ifdef __cpp_lib_ios_noreplace -# error "__cpp_lib_ios_noreplace should not be defined before c++23" -# endif - -# ifndef __cpp_lib_is_aggregate -# error "__cpp_lib_is_aggregate should be defined in c++17" -# endif -# if __cpp_lib_is_aggregate != 201703L -# error "__cpp_lib_is_aggregate should have the value 201703L in c++17" -# endif - -# ifdef __cpp_lib_is_constant_evaluated -# error "__cpp_lib_is_constant_evaluated should not be defined before c++20" -# endif - -# ifndef __cpp_lib_is_final -# error "__cpp_lib_is_final should be defined in c++17" -# endif -# if __cpp_lib_is_final != 201402L -# error "__cpp_lib_is_final should have the value 201402L in c++17" -# endif - -# ifdef __cpp_lib_is_implicit_lifetime -# error "__cpp_lib_is_implicit_lifetime should not be defined before c++23" -# endif - -# ifndef __cpp_lib_is_invocable -# error "__cpp_lib_is_invocable should be defined in c++17" -# endif -# if __cpp_lib_is_invocable != 201703L -# error "__cpp_lib_is_invocable should have the value 201703L in c++17" -# endif - -# ifdef __cpp_lib_is_layout_compatible -# error "__cpp_lib_is_layout_compatible should not be defined before c++20" -# endif - -# ifdef __cpp_lib_is_nothrow_convertible -# error "__cpp_lib_is_nothrow_convertible should not be defined before c++20" -# endif - -# ifndef __cpp_lib_is_null_pointer -# error "__cpp_lib_is_null_pointer should be defined in c++17" -# endif -# if __cpp_lib_is_null_pointer != 201309L -# error "__cpp_lib_is_null_pointer should have the value 201309L in c++17" -# endif - -# ifdef __cpp_lib_is_pointer_interconvertible -# error "__cpp_lib_is_pointer_interconvertible should not be defined before c++20" -# endif - -# ifdef __cpp_lib_is_scoped_enum -# error "__cpp_lib_is_scoped_enum should not be defined before c++23" -# endif - -# ifndef __cpp_lib_is_swappable -# error "__cpp_lib_is_swappable should be defined in c++17" -# endif -# if __cpp_lib_is_swappable != 201603L -# error "__cpp_lib_is_swappable should have the value 201603L in c++17" -# endif - -# ifdef __cpp_lib_is_virtual_base_of -# error "__cpp_lib_is_virtual_base_of should not be defined before c++26" -# endif - -# ifdef __cpp_lib_is_within_lifetime -# error "__cpp_lib_is_within_lifetime should not be defined before c++26" -# endif - -# ifdef __cpp_lib_jthread -# error "__cpp_lib_jthread should not be defined before c++20" -# endif - -# ifdef __cpp_lib_latch -# error "__cpp_lib_latch should not be defined before c++20" -# endif - -# ifndef __cpp_lib_launder -# error "__cpp_lib_launder should be defined in c++17" -# endif -# if __cpp_lib_launder != 201606L -# error "__cpp_lib_launder should have the value 201606L in c++17" -# endif - -# ifdef __cpp_lib_linalg -# error "__cpp_lib_linalg should not be defined before c++26" -# endif - -# ifdef __cpp_lib_list_remove_return_type -# error "__cpp_lib_list_remove_return_type should not be defined before c++20" -# endif - -# ifndef __cpp_lib_logical_traits -# error "__cpp_lib_logical_traits should be defined in c++17" -# endif -# if __cpp_lib_logical_traits != 201510L -# error "__cpp_lib_logical_traits should have the value 201510L in c++17" -# endif - -# ifndef __cpp_lib_make_from_tuple -# error "__cpp_lib_make_from_tuple should be defined in c++17" -# endif -# if __cpp_lib_make_from_tuple != 201606L -# error "__cpp_lib_make_from_tuple should have the value 201606L in c++17" -# endif - -# ifndef __cpp_lib_make_reverse_iterator -# error "__cpp_lib_make_reverse_iterator should be defined in c++17" -# endif -# if __cpp_lib_make_reverse_iterator != 201402L -# error "__cpp_lib_make_reverse_iterator should have the value 201402L in c++17" -# endif - -# ifndef __cpp_lib_make_unique -# error "__cpp_lib_make_unique should be defined in c++17" -# endif -# if __cpp_lib_make_unique != 201304L -# error "__cpp_lib_make_unique should have the value 201304L in c++17" -# endif - -# ifndef __cpp_lib_map_try_emplace -# error "__cpp_lib_map_try_emplace should be defined in c++17" -# endif -# if __cpp_lib_map_try_emplace != 201411L -# error "__cpp_lib_map_try_emplace should have the value 201411L in c++17" -# endif - -# ifdef __cpp_lib_math_constants -# error "__cpp_lib_math_constants should not be defined before c++20" -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_math_special_functions -# error "__cpp_lib_math_special_functions should be defined in c++17" -# endif -# if __cpp_lib_math_special_functions != 201603L -# error "__cpp_lib_math_special_functions should have the value 201603L in c++17" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_math_special_functions -# error "__cpp_lib_math_special_functions should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# ifdef __cpp_lib_mdspan -# error "__cpp_lib_mdspan should not be defined before c++23" -# endif - -# if !defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_PMR -# ifndef __cpp_lib_memory_resource -# error "__cpp_lib_memory_resource should be defined in c++17" -# endif -# if __cpp_lib_memory_resource != 201603L -# error "__cpp_lib_memory_resource should have the value 201603L in c++17" -# endif -# else -# ifdef __cpp_lib_memory_resource -# error "__cpp_lib_memory_resource should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_PMR' is not met!" -# endif -# endif - -# ifdef __cpp_lib_modules -# error "__cpp_lib_modules should not be defined before c++23" -# endif - -# ifdef __cpp_lib_move_iterator_concept -# error "__cpp_lib_move_iterator_concept should not be defined before c++20" -# endif - -# ifdef __cpp_lib_move_only_function -# error "__cpp_lib_move_only_function should not be defined before c++23" -# endif - -# ifndef __cpp_lib_node_extract -# error "__cpp_lib_node_extract should be defined in c++17" -# endif -# if __cpp_lib_node_extract != 201606L -# error "__cpp_lib_node_extract should have the value 201606L in c++17" -# endif - -# ifndef __cpp_lib_nonmember_container_access -# error "__cpp_lib_nonmember_container_access should be defined in c++17" -# endif -# if __cpp_lib_nonmember_container_access != 201411L -# error "__cpp_lib_nonmember_container_access should have the value 201411L in c++17" -# endif - -# ifndef __cpp_lib_not_fn -# error "__cpp_lib_not_fn should be defined in c++17" -# endif -# if __cpp_lib_not_fn != 201603L -# error "__cpp_lib_not_fn should have the value 201603L in c++17" -# endif - -# ifndef __cpp_lib_null_iterators -# error "__cpp_lib_null_iterators should be defined in c++17" -# endif -# if __cpp_lib_null_iterators != 201304L -# error "__cpp_lib_null_iterators should have the value 201304L in c++17" -# endif - -# ifndef __cpp_lib_optional -# error "__cpp_lib_optional should be defined in c++17" -# endif -# if __cpp_lib_optional != 201606L -# error "__cpp_lib_optional should have the value 201606L in c++17" -# endif - -# ifdef __cpp_lib_optional_range_support -# error "__cpp_lib_optional_range_support should not be defined before c++26" -# endif - -# ifdef __cpp_lib_out_ptr -# error "__cpp_lib_out_ptr should not be defined before c++23" -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_parallel_algorithm -# error "__cpp_lib_parallel_algorithm should be defined in c++17" -# endif -# if __cpp_lib_parallel_algorithm != 201603L -# error "__cpp_lib_parallel_algorithm should have the value 201603L in c++17" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_parallel_algorithm -# error "__cpp_lib_parallel_algorithm should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# ifdef __cpp_lib_philox_engine -# error "__cpp_lib_philox_engine should not be defined before c++26" -# endif - -# ifdef __cpp_lib_polymorphic_allocator -# error "__cpp_lib_polymorphic_allocator should not be defined before c++20" -# endif - -# ifdef __cpp_lib_print -# error "__cpp_lib_print should not be defined before c++23" -# endif - -# if !defined(_LIBCPP_VERSION) || _LIBCPP_HAS_LOCALIZATION -# ifndef __cpp_lib_quoted_string_io -# error "__cpp_lib_quoted_string_io should be defined in c++17" -# endif -# if __cpp_lib_quoted_string_io != 201304L -# error "__cpp_lib_quoted_string_io should have the value 201304L in c++17" -# endif -# else -# ifdef __cpp_lib_quoted_string_io -# error "__cpp_lib_quoted_string_io should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_HAS_LOCALIZATION' is not met!" -# endif -# endif - -# ifdef __cpp_lib_ranges -# error "__cpp_lib_ranges should not be defined before c++20" -# endif - -# ifdef __cpp_lib_ranges_as_const -# error "__cpp_lib_ranges_as_const should not be defined before c++23" -# endif - -# ifdef __cpp_lib_ranges_as_rvalue -# error "__cpp_lib_ranges_as_rvalue should not be defined before c++23" -# endif - -# ifdef __cpp_lib_ranges_chunk -# error "__cpp_lib_ranges_chunk should not be defined before c++23" -# endif - -# ifdef __cpp_lib_ranges_chunk_by -# error "__cpp_lib_ranges_chunk_by should not be defined before c++23" -# endif - -# ifdef __cpp_lib_ranges_concat -# error "__cpp_lib_ranges_concat should not be defined before c++26" -# endif - -# ifdef __cpp_lib_ranges_contains -# error "__cpp_lib_ranges_contains should not be defined before c++23" -# endif - -# ifdef __cpp_lib_ranges_find_last -# error "__cpp_lib_ranges_find_last should not be defined before c++23" -# endif - -# ifdef __cpp_lib_ranges_iota -# error "__cpp_lib_ranges_iota should not be defined before c++23" -# endif - -# ifdef __cpp_lib_ranges_join_with -# error "__cpp_lib_ranges_join_with should not be defined before c++23" -# endif - -# ifdef __cpp_lib_ranges_repeat -# error "__cpp_lib_ranges_repeat should not be defined before c++23" -# endif - -# ifdef __cpp_lib_ranges_slide -# error "__cpp_lib_ranges_slide should not be defined before c++23" -# endif - -# ifdef __cpp_lib_ranges_starts_ends_with -# error "__cpp_lib_ranges_starts_ends_with should not be defined before c++23" -# endif - -# ifdef __cpp_lib_ranges_to_container -# error "__cpp_lib_ranges_to_container should not be defined before c++23" -# endif - -# ifdef __cpp_lib_ranges_zip -# error "__cpp_lib_ranges_zip should not be defined before c++23" -# endif - -# ifdef __cpp_lib_ratio -# error "__cpp_lib_ratio should not be defined before c++26" -# endif - -# ifndef __cpp_lib_raw_memory_algorithms -# error "__cpp_lib_raw_memory_algorithms should be defined in c++17" -# endif -# if __cpp_lib_raw_memory_algorithms != 201606L -# error "__cpp_lib_raw_memory_algorithms should have the value 201606L in c++17" -# endif - -# ifdef __cpp_lib_rcu -# error "__cpp_lib_rcu should not be defined before c++26" -# endif - -# ifdef __cpp_lib_reference_from_temporary -# error "__cpp_lib_reference_from_temporary should not be defined before c++23" -# endif - -# ifdef __cpp_lib_reference_wrapper -# error "__cpp_lib_reference_wrapper should not be defined before c++26" -# endif - -# ifdef __cpp_lib_remove_cvref -# error "__cpp_lib_remove_cvref should not be defined before c++20" -# endif - -# ifndef __cpp_lib_result_of_sfinae -# error "__cpp_lib_result_of_sfinae should be defined in c++17" -# endif -# if __cpp_lib_result_of_sfinae != 201210L -# error "__cpp_lib_result_of_sfinae should have the value 201210L in c++17" -# endif - -# ifndef __cpp_lib_robust_nonmodifying_seq_ops -# error "__cpp_lib_robust_nonmodifying_seq_ops should be defined in c++17" -# endif -# if __cpp_lib_robust_nonmodifying_seq_ops != 201304L -# error "__cpp_lib_robust_nonmodifying_seq_ops should have the value 201304L in c++17" -# endif - -# ifndef __cpp_lib_sample -# error "__cpp_lib_sample should be defined in c++17" -# endif -# if __cpp_lib_sample != 201603L -# error "__cpp_lib_sample should have the value 201603L in c++17" -# endif - -# ifdef __cpp_lib_saturation_arithmetic -# error "__cpp_lib_saturation_arithmetic should not be defined before c++26" -# endif - -# if !defined(_LIBCPP_VERSION) || _LIBCPP_HAS_THREADS -# ifndef __cpp_lib_scoped_lock -# error "__cpp_lib_scoped_lock should be defined in c++17" -# endif -# if __cpp_lib_scoped_lock != 201703L -# error "__cpp_lib_scoped_lock should have the value 201703L in c++17" -# endif -# else -# ifdef __cpp_lib_scoped_lock -# error "__cpp_lib_scoped_lock should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_HAS_THREADS' is not met!" -# endif -# endif - -# ifdef __cpp_lib_semaphore -# error "__cpp_lib_semaphore should not be defined before c++20" -# endif - -# ifdef __cpp_lib_senders -# error "__cpp_lib_senders should not be defined before c++26" -# endif - -# if _LIBCPP_HAS_THREADS -# ifndef __cpp_lib_shared_mutex -# error "__cpp_lib_shared_mutex should be defined in c++17" -# endif -# if __cpp_lib_shared_mutex != 201505L -# error "__cpp_lib_shared_mutex should have the value 201505L in c++17" -# endif -# else -# ifdef __cpp_lib_shared_mutex -# error "__cpp_lib_shared_mutex should not be defined when the requirement '_LIBCPP_HAS_THREADS' is not met!" -# endif -# endif - -# ifndef __cpp_lib_shared_ptr_arrays -# error "__cpp_lib_shared_ptr_arrays should be defined in c++17" -# endif -# if __cpp_lib_shared_ptr_arrays != 201611L -# error "__cpp_lib_shared_ptr_arrays should have the value 201611L in c++17" -# endif - -# ifndef __cpp_lib_shared_ptr_weak_type -# error "__cpp_lib_shared_ptr_weak_type should be defined in c++17" -# endif -# if __cpp_lib_shared_ptr_weak_type != 201606L -# error "__cpp_lib_shared_ptr_weak_type should have the value 201606L in c++17" -# endif - -# if _LIBCPP_HAS_THREADS -# ifndef __cpp_lib_shared_timed_mutex -# error "__cpp_lib_shared_timed_mutex should be defined in c++17" -# endif -# if __cpp_lib_shared_timed_mutex != 201402L -# error "__cpp_lib_shared_timed_mutex should have the value 201402L in c++17" -# endif -# else -# ifdef __cpp_lib_shared_timed_mutex -# error "__cpp_lib_shared_timed_mutex should not be defined when the requirement '_LIBCPP_HAS_THREADS' is not met!" -# endif -# endif - -# ifdef __cpp_lib_shift -# error "__cpp_lib_shift should not be defined before c++20" -# endif - -# ifdef __cpp_lib_smart_ptr_for_overwrite -# error "__cpp_lib_smart_ptr_for_overwrite should not be defined before c++20" -# endif - -# ifdef __cpp_lib_smart_ptr_owner_equality -# error "__cpp_lib_smart_ptr_owner_equality should not be defined before c++26" -# endif - -# ifdef __cpp_lib_source_location -# error "__cpp_lib_source_location should not be defined before c++20" -# endif - -# ifdef __cpp_lib_span -# error "__cpp_lib_span should not be defined before c++20" -# endif - -# ifdef __cpp_lib_span_at -# error "__cpp_lib_span_at should not be defined before c++26" -# endif - -# ifdef __cpp_lib_span_initializer_list -# error "__cpp_lib_span_initializer_list should not be defined before c++26" -# endif - -# ifdef __cpp_lib_spanstream -# error "__cpp_lib_spanstream should not be defined before c++23" -# endif - -# ifdef __cpp_lib_ssize -# error "__cpp_lib_ssize should not be defined before c++20" -# endif - -# ifdef __cpp_lib_sstream_from_string_view -# error "__cpp_lib_sstream_from_string_view should not be defined before c++26" -# endif - -# ifdef __cpp_lib_stacktrace -# error "__cpp_lib_stacktrace should not be defined before c++23" -# endif - -# ifdef __cpp_lib_starts_ends_with -# error "__cpp_lib_starts_ends_with should not be defined before c++20" -# endif - -# ifdef __cpp_lib_stdatomic_h -# error "__cpp_lib_stdatomic_h should not be defined before c++23" -# endif - -# ifdef __cpp_lib_string_contains -# error "__cpp_lib_string_contains should not be defined before c++23" -# endif - -# ifdef __cpp_lib_string_resize_and_overwrite -# error "__cpp_lib_string_resize_and_overwrite should not be defined before c++23" -# endif - -# ifndef __cpp_lib_string_udls -# error "__cpp_lib_string_udls should be defined in c++17" -# endif -# if __cpp_lib_string_udls != 201304L -# error "__cpp_lib_string_udls should have the value 201304L in c++17" -# endif - -# ifndef __cpp_lib_string_view -# error "__cpp_lib_string_view should be defined in c++17" -# endif -# if __cpp_lib_string_view != 201606L -# error "__cpp_lib_string_view should have the value 201606L in c++17" -# endif - -# ifdef __cpp_lib_submdspan -# error "__cpp_lib_submdspan should not be defined before c++26" -# endif - -# ifdef __cpp_lib_syncbuf -# error "__cpp_lib_syncbuf should not be defined before c++20" -# endif - -# ifdef __cpp_lib_text_encoding -# error "__cpp_lib_text_encoding should not be defined before c++26" -# endif - -# ifdef __cpp_lib_three_way_comparison -# error "__cpp_lib_three_way_comparison should not be defined before c++20" -# endif - -# ifdef __cpp_lib_to_address -# error "__cpp_lib_to_address should not be defined before c++20" -# endif - -# ifdef __cpp_lib_to_array -# error "__cpp_lib_to_array should not be defined before c++20" -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_to_chars -# error "__cpp_lib_to_chars should be defined in c++17" -# endif -# if __cpp_lib_to_chars != 201611L -# error "__cpp_lib_to_chars should have the value 201611L in c++17" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_to_chars -# error "__cpp_lib_to_chars should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# ifdef __cpp_lib_to_string -# error "__cpp_lib_to_string should not be defined before c++26" -# endif - -# ifdef __cpp_lib_to_underlying -# error "__cpp_lib_to_underlying should not be defined before c++23" -# endif - -# ifndef __cpp_lib_transformation_trait_aliases -# error "__cpp_lib_transformation_trait_aliases should be defined in c++17" -# endif -# if __cpp_lib_transformation_trait_aliases != 201304L -# error "__cpp_lib_transformation_trait_aliases should have the value 201304L in c++17" -# endif - -# ifndef __cpp_lib_transparent_operators -# error "__cpp_lib_transparent_operators should be defined in c++17" -# endif -# if __cpp_lib_transparent_operators != 201510L -# error "__cpp_lib_transparent_operators should have the value 201510L in c++17" -# endif - -# ifndef __cpp_lib_tuple_element_t -# error "__cpp_lib_tuple_element_t should be defined in c++17" -# endif -# if __cpp_lib_tuple_element_t != 201402L -# error "__cpp_lib_tuple_element_t should have the value 201402L in c++17" -# endif - -# ifdef __cpp_lib_tuple_like -# error "__cpp_lib_tuple_like should not be defined before c++23" -# endif - -# ifndef __cpp_lib_tuples_by_type -# error "__cpp_lib_tuples_by_type should be defined in c++17" -# endif -# if __cpp_lib_tuples_by_type != 201304L -# error "__cpp_lib_tuples_by_type should have the value 201304L in c++17" -# endif - -# ifdef __cpp_lib_type_identity -# error "__cpp_lib_type_identity should not be defined before c++20" -# endif - -# ifndef __cpp_lib_type_trait_variable_templates -# error "__cpp_lib_type_trait_variable_templates should be defined in c++17" -# endif -# if __cpp_lib_type_trait_variable_templates != 201510L -# error "__cpp_lib_type_trait_variable_templates should have the value 201510L in c++17" -# endif - -# ifndef __cpp_lib_uncaught_exceptions -# error "__cpp_lib_uncaught_exceptions should be defined in c++17" -# endif -# if __cpp_lib_uncaught_exceptions != 201411L -# error "__cpp_lib_uncaught_exceptions should have the value 201411L in c++17" -# endif - -# ifndef __cpp_lib_unordered_map_try_emplace -# error "__cpp_lib_unordered_map_try_emplace should be defined in c++17" -# endif -# if __cpp_lib_unordered_map_try_emplace != 201411L -# error "__cpp_lib_unordered_map_try_emplace should have the value 201411L in c++17" -# endif - -# ifdef __cpp_lib_unreachable -# error "__cpp_lib_unreachable should not be defined before c++23" -# endif - -# ifdef __cpp_lib_unwrap_ref -# error "__cpp_lib_unwrap_ref should not be defined before c++20" -# endif - -# ifndef __cpp_lib_variant -# error "__cpp_lib_variant should be defined in c++17" -# endif -# if __cpp_lib_variant != 202102L -# error "__cpp_lib_variant should have the value 202102L in c++17" -# endif - -# ifndef __cpp_lib_void_t -# error "__cpp_lib_void_t should be defined in c++17" -# endif -# if __cpp_lib_void_t != 201411L -# error "__cpp_lib_void_t should have the value 201411L in c++17" -# endif - -#elif TEST_STD_VER == 20 - -# ifdef __cpp_lib_adaptor_iterator_pair_constructor -# error "__cpp_lib_adaptor_iterator_pair_constructor should not be defined before c++23" -# endif - -# ifndef __cpp_lib_addressof_constexpr -# error "__cpp_lib_addressof_constexpr should be defined in c++20" -# endif -# if __cpp_lib_addressof_constexpr != 201603L -# error "__cpp_lib_addressof_constexpr should have the value 201603L in c++20" -# endif - -# ifdef __cpp_lib_allocate_at_least -# error "__cpp_lib_allocate_at_least should not be defined before c++23" -# endif - -# ifndef __cpp_lib_allocator_traits_is_always_equal -# error "__cpp_lib_allocator_traits_is_always_equal should be defined in c++20" -# endif -# if __cpp_lib_allocator_traits_is_always_equal != 201411L -# error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++20" -# endif - -# ifndef __cpp_lib_any -# error "__cpp_lib_any should be defined in c++20" -# endif -# if __cpp_lib_any != 201606L -# error "__cpp_lib_any should have the value 201606L in c++20" -# endif - -# ifndef __cpp_lib_apply -# error "__cpp_lib_apply should be defined in c++20" -# endif -# if __cpp_lib_apply != 201603L -# error "__cpp_lib_apply should have the value 201603L in c++20" -# endif - -# ifndef __cpp_lib_array_constexpr -# error "__cpp_lib_array_constexpr should be defined in c++20" -# endif -# if __cpp_lib_array_constexpr != 201811L -# error "__cpp_lib_array_constexpr should have the value 201811L in c++20" -# endif - -# ifndef __cpp_lib_as_const -# error "__cpp_lib_as_const should be defined in c++20" -# endif -# if __cpp_lib_as_const != 201510L -# error "__cpp_lib_as_const should have the value 201510L in c++20" -# endif - -# ifdef __cpp_lib_associative_heterogeneous_erasure -# error "__cpp_lib_associative_heterogeneous_erasure should not be defined before c++23" -# endif - -# ifdef __cpp_lib_associative_heterogeneous_insertion -# error "__cpp_lib_associative_heterogeneous_insertion should not be defined before c++26" -# endif - -# ifndef __cpp_lib_assume_aligned -# error "__cpp_lib_assume_aligned should be defined in c++20" -# endif -# if __cpp_lib_assume_aligned != 201811L -# error "__cpp_lib_assume_aligned should have the value 201811L in c++20" -# endif - -# ifndef __cpp_lib_atomic_flag_test -# error "__cpp_lib_atomic_flag_test should be defined in c++20" -# endif -# if __cpp_lib_atomic_flag_test != 201907L -# error "__cpp_lib_atomic_flag_test should have the value 201907L in c++20" -# endif - -# ifndef __cpp_lib_atomic_float -# error "__cpp_lib_atomic_float should be defined in c++20" -# endif -# if __cpp_lib_atomic_float != 201711L -# error "__cpp_lib_atomic_float should have the value 201711L in c++20" -# endif - -# ifndef __cpp_lib_atomic_is_always_lock_free -# error "__cpp_lib_atomic_is_always_lock_free should be defined in c++20" -# endif -# if __cpp_lib_atomic_is_always_lock_free != 201603L -# error "__cpp_lib_atomic_is_always_lock_free should have the value 201603L in c++20" -# endif - -# ifndef __cpp_lib_atomic_lock_free_type_aliases -# error "__cpp_lib_atomic_lock_free_type_aliases should be defined in c++20" -# endif -# if __cpp_lib_atomic_lock_free_type_aliases != 201907L -# error "__cpp_lib_atomic_lock_free_type_aliases should have the value 201907L in c++20" -# endif - -# ifdef __cpp_lib_atomic_min_max -# error "__cpp_lib_atomic_min_max should not be defined before c++26" -# endif - -# ifndef __cpp_lib_atomic_ref -# error "__cpp_lib_atomic_ref should be defined in c++20" -# endif -# if __cpp_lib_atomic_ref != 201806L -# error "__cpp_lib_atomic_ref should have the value 201806L in c++20" -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_atomic_shared_ptr -# error "__cpp_lib_atomic_shared_ptr should be defined in c++20" -# endif -# if __cpp_lib_atomic_shared_ptr != 201711L -# error "__cpp_lib_atomic_shared_ptr should have the value 201711L in c++20" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_atomic_shared_ptr -# error "__cpp_lib_atomic_shared_ptr should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# ifndef __cpp_lib_atomic_value_initialization -# error "__cpp_lib_atomic_value_initialization should be defined in c++20" -# endif -# if __cpp_lib_atomic_value_initialization != 201911L -# error "__cpp_lib_atomic_value_initialization should have the value 201911L in c++20" -# endif - -# if !defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_SYNC -# ifndef __cpp_lib_atomic_wait -# error "__cpp_lib_atomic_wait should be defined in c++20" -# endif -# if __cpp_lib_atomic_wait != 201907L -# error "__cpp_lib_atomic_wait should have the value 201907L in c++20" -# endif -# else -# ifdef __cpp_lib_atomic_wait -# error "__cpp_lib_atomic_wait should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_SYNC' is not met!" -# endif -# endif - -# if !defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC) -# ifndef __cpp_lib_barrier -# error "__cpp_lib_barrier should be defined in c++20" -# endif -# if __cpp_lib_barrier != 201907L -# error "__cpp_lib_barrier should have the value 201907L in c++20" -# endif -# else -# ifdef __cpp_lib_barrier -# error "__cpp_lib_barrier should not be defined when the requirement '!defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC)' is not met!" -# endif -# endif - -# ifdef __cpp_lib_bind_back -# error "__cpp_lib_bind_back should not be defined before c++23" -# endif - -# ifndef __cpp_lib_bind_front -# error "__cpp_lib_bind_front should be defined in c++20" -# endif -# if __cpp_lib_bind_front != 201907L -# error "__cpp_lib_bind_front should have the value 201907L in c++20" -# endif - -# ifndef __cpp_lib_bit_cast -# error "__cpp_lib_bit_cast should be defined in c++20" -# endif -# if __cpp_lib_bit_cast != 201806L -# error "__cpp_lib_bit_cast should have the value 201806L in c++20" -# endif - -# ifndef __cpp_lib_bitops -# error "__cpp_lib_bitops should be defined in c++20" -# endif -# if __cpp_lib_bitops != 201907L -# error "__cpp_lib_bitops should have the value 201907L in c++20" -# endif - -# ifdef __cpp_lib_bitset -# error "__cpp_lib_bitset should not be defined before c++26" -# endif - -# ifndef __cpp_lib_bool_constant -# error "__cpp_lib_bool_constant should be defined in c++20" -# endif -# if __cpp_lib_bool_constant != 201505L -# error "__cpp_lib_bool_constant should have the value 201505L in c++20" -# endif - -# ifndef __cpp_lib_bounded_array_traits -# error "__cpp_lib_bounded_array_traits should be defined in c++20" -# endif -# if __cpp_lib_bounded_array_traits != 201902L -# error "__cpp_lib_bounded_array_traits should have the value 201902L in c++20" -# endif - -# ifndef __cpp_lib_boyer_moore_searcher -# error "__cpp_lib_boyer_moore_searcher should be defined in c++20" -# endif -# if __cpp_lib_boyer_moore_searcher != 201603L -# error "__cpp_lib_boyer_moore_searcher should have the value 201603L in c++20" -# endif - -# ifndef __cpp_lib_byte -# error "__cpp_lib_byte should be defined in c++20" -# endif -# if __cpp_lib_byte != 201603L -# error "__cpp_lib_byte should have the value 201603L in c++20" -# endif - -# ifdef __cpp_lib_byteswap -# error "__cpp_lib_byteswap should not be defined before c++23" -# endif - -# if defined(__cpp_char8_t) -# ifndef __cpp_lib_char8_t -# error "__cpp_lib_char8_t should be defined in c++20" -# endif -# if __cpp_lib_char8_t != 201907L -# error "__cpp_lib_char8_t should have the value 201907L in c++20" -# endif -# else -# ifdef __cpp_lib_char8_t -# error "__cpp_lib_char8_t should not be defined when the requirement 'defined(__cpp_char8_t)' is not met!" -# endif -# endif - -# ifndef __cpp_lib_chrono -# error "__cpp_lib_chrono should be defined in c++20" -# endif -# if __cpp_lib_chrono != 201611L -# error "__cpp_lib_chrono should have the value 201611L in c++20" -# endif - -# ifndef __cpp_lib_chrono_udls -# error "__cpp_lib_chrono_udls should be defined in c++20" -# endif -# if __cpp_lib_chrono_udls != 201304L -# error "__cpp_lib_chrono_udls should have the value 201304L in c++20" -# endif - -# ifndef __cpp_lib_clamp -# error "__cpp_lib_clamp should be defined in c++20" -# endif -# if __cpp_lib_clamp != 201603L -# error "__cpp_lib_clamp should have the value 201603L in c++20" -# endif - -# ifndef __cpp_lib_complex_udls -# error "__cpp_lib_complex_udls should be defined in c++20" -# endif -# if __cpp_lib_complex_udls != 201309L -# error "__cpp_lib_complex_udls should have the value 201309L in c++20" -# endif - -# ifndef __cpp_lib_concepts -# error "__cpp_lib_concepts should be defined in c++20" -# endif -# if __cpp_lib_concepts != 202002L -# error "__cpp_lib_concepts should have the value 202002L in c++20" -# endif - -# ifndef __cpp_lib_constexpr_algorithms -# error "__cpp_lib_constexpr_algorithms should be defined in c++20" -# endif -# if __cpp_lib_constexpr_algorithms != 201806L -# error "__cpp_lib_constexpr_algorithms should have the value 201806L in c++20" -# endif - -# ifdef __cpp_lib_constexpr_bitset -# error "__cpp_lib_constexpr_bitset should not be defined before c++23" -# endif - -# ifdef __cpp_lib_constexpr_charconv -# error "__cpp_lib_constexpr_charconv should not be defined before c++23" -# endif - -# ifdef __cpp_lib_constexpr_cmath -# error "__cpp_lib_constexpr_cmath should not be defined before c++23" -# endif - -# ifndef __cpp_lib_constexpr_complex -# error "__cpp_lib_constexpr_complex should be defined in c++20" -# endif -# if __cpp_lib_constexpr_complex != 201711L -# error "__cpp_lib_constexpr_complex should have the value 201711L in c++20" -# endif - -# ifndef __cpp_lib_constexpr_dynamic_alloc -# error "__cpp_lib_constexpr_dynamic_alloc should be defined in c++20" -# endif -# if __cpp_lib_constexpr_dynamic_alloc != 201907L -# error "__cpp_lib_constexpr_dynamic_alloc should have the value 201907L in c++20" -# endif - -# ifdef __cpp_lib_constexpr_forward_list -# error "__cpp_lib_constexpr_forward_list should not be defined before c++26" -# endif - -# ifndef __cpp_lib_constexpr_functional -# error "__cpp_lib_constexpr_functional should be defined in c++20" -# endif -# if __cpp_lib_constexpr_functional != 201907L -# error "__cpp_lib_constexpr_functional should have the value 201907L in c++20" -# endif - -# ifndef __cpp_lib_constexpr_iterator -# error "__cpp_lib_constexpr_iterator should be defined in c++20" -# endif -# if __cpp_lib_constexpr_iterator != 201811L -# error "__cpp_lib_constexpr_iterator should have the value 201811L in c++20" -# endif - -# ifndef __cpp_lib_constexpr_memory -# error "__cpp_lib_constexpr_memory should be defined in c++20" -# endif -# if __cpp_lib_constexpr_memory != 201811L -# error "__cpp_lib_constexpr_memory should have the value 201811L in c++20" -# endif - -# ifdef __cpp_lib_constexpr_new -# error "__cpp_lib_constexpr_new should not be defined before c++26" -# endif - -# ifndef __cpp_lib_constexpr_numeric -# error "__cpp_lib_constexpr_numeric should be defined in c++20" -# endif -# if __cpp_lib_constexpr_numeric != 201911L -# error "__cpp_lib_constexpr_numeric should have the value 201911L in c++20" -# endif - -# ifndef __cpp_lib_constexpr_string -# error "__cpp_lib_constexpr_string should be defined in c++20" -# endif -# if __cpp_lib_constexpr_string != 201907L -# error "__cpp_lib_constexpr_string should have the value 201907L in c++20" -# endif - -# ifndef __cpp_lib_constexpr_string_view -# error "__cpp_lib_constexpr_string_view should be defined in c++20" -# endif -# if __cpp_lib_constexpr_string_view != 201811L -# error "__cpp_lib_constexpr_string_view should have the value 201811L in c++20" -# endif - -# ifndef __cpp_lib_constexpr_tuple -# error "__cpp_lib_constexpr_tuple should be defined in c++20" -# endif -# if __cpp_lib_constexpr_tuple != 201811L -# error "__cpp_lib_constexpr_tuple should have the value 201811L in c++20" -# endif - -# ifdef __cpp_lib_constexpr_typeinfo -# error "__cpp_lib_constexpr_typeinfo should not be defined before c++23" -# endif - -# ifndef __cpp_lib_constexpr_utility -# error "__cpp_lib_constexpr_utility should be defined in c++20" -# endif -# if __cpp_lib_constexpr_utility != 201811L -# error "__cpp_lib_constexpr_utility should have the value 201811L in c++20" -# endif - -# ifndef __cpp_lib_constexpr_vector -# error "__cpp_lib_constexpr_vector should be defined in c++20" -# endif -# if __cpp_lib_constexpr_vector != 201907L -# error "__cpp_lib_constexpr_vector should have the value 201907L in c++20" -# endif - -# ifdef __cpp_lib_constrained_equality -# error "__cpp_lib_constrained_equality should not be defined before c++26" -# endif - -# ifdef __cpp_lib_containers_ranges -# error "__cpp_lib_containers_ranges should not be defined before c++23" -# endif - -# ifdef __cpp_lib_copyable_function -# error "__cpp_lib_copyable_function should not be defined before c++26" -# endif - -# ifndef __cpp_lib_coroutine -# error "__cpp_lib_coroutine should be defined in c++20" -# endif -# if __cpp_lib_coroutine != 201902L -# error "__cpp_lib_coroutine should have the value 201902L in c++20" -# endif - -# ifdef __cpp_lib_debugging -# error "__cpp_lib_debugging should not be defined before c++26" -# endif - -# ifdef __cpp_lib_default_template_type_for_algorithm_values -# error "__cpp_lib_default_template_type_for_algorithm_values should not be defined before c++26" -# endif - -# if TEST_STD_VER > 17 && defined(__cpp_impl_destroying_delete) && __cpp_impl_destroying_delete >= 201806L -# ifndef __cpp_lib_destroying_delete -# error "__cpp_lib_destroying_delete should be defined in c++20" -# endif -# if __cpp_lib_destroying_delete != 201806L -# error "__cpp_lib_destroying_delete should have the value 201806L in c++20" -# endif -# else -# ifdef __cpp_lib_destroying_delete -# error "__cpp_lib_destroying_delete should not be defined when the requirement 'TEST_STD_VER > 17 && defined(__cpp_impl_destroying_delete) && __cpp_impl_destroying_delete >= 201806L' is not met!" -# endif -# endif - -# ifndef __cpp_lib_enable_shared_from_this -# error "__cpp_lib_enable_shared_from_this should be defined in c++20" -# endif -# if __cpp_lib_enable_shared_from_this != 201603L -# error "__cpp_lib_enable_shared_from_this should have the value 201603L in c++20" -# endif - -# ifndef __cpp_lib_endian -# error "__cpp_lib_endian should be defined in c++20" -# endif -# if __cpp_lib_endian != 201907L -# error "__cpp_lib_endian should have the value 201907L in c++20" -# endif - -# ifndef __cpp_lib_erase_if -# error "__cpp_lib_erase_if should be defined in c++20" -# endif -# if __cpp_lib_erase_if != 202002L -# error "__cpp_lib_erase_if should have the value 202002L in c++20" -# endif - -# ifndef __cpp_lib_exchange_function -# error "__cpp_lib_exchange_function should be defined in c++20" -# endif -# if __cpp_lib_exchange_function != 201304L -# error "__cpp_lib_exchange_function should have the value 201304L in c++20" -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_execution -# error "__cpp_lib_execution should be defined in c++20" -# endif -# if __cpp_lib_execution != 201902L -# error "__cpp_lib_execution should have the value 201902L in c++20" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_execution -# error "__cpp_lib_execution should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# ifdef __cpp_lib_expected -# error "__cpp_lib_expected should not be defined before c++23" -# endif - -# if !defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_FILESYSTEM && _LIBCPP_AVAILABILITY_HAS_FILESYSTEM_LIBRARY) -# ifndef __cpp_lib_filesystem -# error "__cpp_lib_filesystem should be defined in c++20" -# endif -# if __cpp_lib_filesystem != 201703L -# error "__cpp_lib_filesystem should have the value 201703L in c++20" -# endif -# else -# ifdef __cpp_lib_filesystem -# error "__cpp_lib_filesystem should not be defined when the requirement '!defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_FILESYSTEM && _LIBCPP_AVAILABILITY_HAS_FILESYSTEM_LIBRARY)' is not met!" -# endif -# endif - -# ifdef __cpp_lib_flat_map -# error "__cpp_lib_flat_map should not be defined before c++23" -# endif - -# ifdef __cpp_lib_flat_set -# error "__cpp_lib_flat_set should not be defined before c++23" -# endif - -# if !defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_TO_CHARS_FLOATING_POINT -# ifndef __cpp_lib_format -# error "__cpp_lib_format should be defined in c++20" -# endif -# if __cpp_lib_format != 202110L -# error "__cpp_lib_format should have the value 202110L in c++20" -# endif -# else -# ifdef __cpp_lib_format -# error "__cpp_lib_format should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_TO_CHARS_FLOATING_POINT' is not met!" -# endif -# endif - -# ifdef __cpp_lib_format_path -# error "__cpp_lib_format_path should not be defined before c++26" -# endif - -# ifdef __cpp_lib_format_ranges -# error "__cpp_lib_format_ranges should not be defined before c++23" -# endif - -# ifndef __cpp_lib_format_uchar -# error "__cpp_lib_format_uchar should be defined in c++20" -# endif -# if __cpp_lib_format_uchar != 202311L -# error "__cpp_lib_format_uchar should have the value 202311L in c++20" -# endif - -# ifdef __cpp_lib_formatters -# error "__cpp_lib_formatters should not be defined before c++23" -# endif - -# ifdef __cpp_lib_forward_like -# error "__cpp_lib_forward_like should not be defined before c++23" -# endif - -# ifdef __cpp_lib_freestanding_algorithm -# error "__cpp_lib_freestanding_algorithm should not be defined before c++26" -# endif - -# ifdef __cpp_lib_freestanding_array -# error "__cpp_lib_freestanding_array should not be defined before c++26" -# endif - -# ifdef __cpp_lib_freestanding_cstring -# error "__cpp_lib_freestanding_cstring should not be defined before c++26" -# endif - -# ifdef __cpp_lib_freestanding_expected -# error "__cpp_lib_freestanding_expected should not be defined before c++26" -# endif - -# ifdef __cpp_lib_freestanding_mdspan -# error "__cpp_lib_freestanding_mdspan should not be defined before c++26" -# endif - -# ifdef __cpp_lib_freestanding_optional -# error "__cpp_lib_freestanding_optional should not be defined before c++26" -# endif - -# ifdef __cpp_lib_freestanding_string_view -# error "__cpp_lib_freestanding_string_view should not be defined before c++26" -# endif - -# ifdef __cpp_lib_freestanding_variant -# error "__cpp_lib_freestanding_variant should not be defined before c++26" -# endif - -# ifdef __cpp_lib_fstream_native_handle -# error "__cpp_lib_fstream_native_handle should not be defined before c++26" -# endif - -# ifdef __cpp_lib_function_ref -# error "__cpp_lib_function_ref should not be defined before c++26" -# endif - -# ifndef __cpp_lib_gcd_lcm -# error "__cpp_lib_gcd_lcm should be defined in c++20" -# endif -# if __cpp_lib_gcd_lcm != 201606L -# error "__cpp_lib_gcd_lcm should have the value 201606L in c++20" -# endif - -# ifdef __cpp_lib_generate_random -# error "__cpp_lib_generate_random should not be defined before c++26" -# endif - -# ifndef __cpp_lib_generic_associative_lookup -# error "__cpp_lib_generic_associative_lookup should be defined in c++20" -# endif -# if __cpp_lib_generic_associative_lookup != 201304L -# error "__cpp_lib_generic_associative_lookup should have the value 201304L in c++20" -# endif - -# ifndef __cpp_lib_generic_unordered_lookup -# error "__cpp_lib_generic_unordered_lookup should be defined in c++20" -# endif -# if __cpp_lib_generic_unordered_lookup != 201811L -# error "__cpp_lib_generic_unordered_lookup should have the value 201811L in c++20" -# endif - -# if !defined(_LIBCPP_VERSION) || (defined(__GCC_DESTRUCTIVE_SIZE) && defined(__GCC_CONSTRUCTIVE_SIZE)) -# ifndef __cpp_lib_hardware_interference_size -# error "__cpp_lib_hardware_interference_size should be defined in c++20" -# endif -# if __cpp_lib_hardware_interference_size != 201703L -# error "__cpp_lib_hardware_interference_size should have the value 201703L in c++20" -# endif -# else -# ifdef __cpp_lib_hardware_interference_size -# error "__cpp_lib_hardware_interference_size should not be defined when the requirement '!defined(_LIBCPP_VERSION) || (defined(__GCC_DESTRUCTIVE_SIZE) && defined(__GCC_CONSTRUCTIVE_SIZE))' is not met!" -# endif -# endif - -# ifndef __cpp_lib_has_unique_object_representations -# error "__cpp_lib_has_unique_object_representations should be defined in c++20" -# endif -# if __cpp_lib_has_unique_object_representations != 201606L -# error "__cpp_lib_has_unique_object_representations should have the value 201606L in c++20" -# endif - -# ifdef __cpp_lib_hazard_pointer -# error "__cpp_lib_hazard_pointer should not be defined before c++26" -# endif - -# ifndef __cpp_lib_hypot -# error "__cpp_lib_hypot should be defined in c++20" -# endif -# if __cpp_lib_hypot != 201603L -# error "__cpp_lib_hypot should have the value 201603L in c++20" -# endif - -# ifndef __cpp_lib_incomplete_container_elements -# error "__cpp_lib_incomplete_container_elements should be defined in c++20" -# endif -# if __cpp_lib_incomplete_container_elements != 201505L -# error "__cpp_lib_incomplete_container_elements should have the value 201505L in c++20" -# endif - -# ifdef __cpp_lib_inplace_vector -# error "__cpp_lib_inplace_vector should not be defined before c++26" -# endif - -# ifndef __cpp_lib_int_pow2 -# error "__cpp_lib_int_pow2 should be defined in c++20" -# endif -# if __cpp_lib_int_pow2 != 202002L -# error "__cpp_lib_int_pow2 should have the value 202002L in c++20" -# endif - -# ifndef __cpp_lib_integer_comparison_functions -# error "__cpp_lib_integer_comparison_functions should be defined in c++20" -# endif -# if __cpp_lib_integer_comparison_functions != 202002L -# error "__cpp_lib_integer_comparison_functions should have the value 202002L in c++20" -# endif - -# ifndef __cpp_lib_integer_sequence -# error "__cpp_lib_integer_sequence should be defined in c++20" -# endif -# if __cpp_lib_integer_sequence != 201304L -# error "__cpp_lib_integer_sequence should have the value 201304L in c++20" -# endif - -# ifndef __cpp_lib_integral_constant_callable -# error "__cpp_lib_integral_constant_callable should be defined in c++20" -# endif -# if __cpp_lib_integral_constant_callable != 201304L -# error "__cpp_lib_integral_constant_callable should have the value 201304L in c++20" -# endif - -# ifndef __cpp_lib_interpolate -# error "__cpp_lib_interpolate should be defined in c++20" -# endif -# if __cpp_lib_interpolate != 201902L -# error "__cpp_lib_interpolate should have the value 201902L in c++20" -# endif - -# ifndef __cpp_lib_invoke -# error "__cpp_lib_invoke should be defined in c++20" -# endif -# if __cpp_lib_invoke != 201411L -# error "__cpp_lib_invoke should have the value 201411L in c++20" -# endif - -# ifdef __cpp_lib_invoke_r -# error "__cpp_lib_invoke_r should not be defined before c++23" -# endif - -# ifdef __cpp_lib_ios_noreplace -# error "__cpp_lib_ios_noreplace should not be defined before c++23" -# endif - -# ifndef __cpp_lib_is_aggregate -# error "__cpp_lib_is_aggregate should be defined in c++20" -# endif -# if __cpp_lib_is_aggregate != 201703L -# error "__cpp_lib_is_aggregate should have the value 201703L in c++20" -# endif - -# ifndef __cpp_lib_is_constant_evaluated -# error "__cpp_lib_is_constant_evaluated should be defined in c++20" -# endif -# if __cpp_lib_is_constant_evaluated != 201811L -# error "__cpp_lib_is_constant_evaluated should have the value 201811L in c++20" -# endif - -# ifndef __cpp_lib_is_final -# error "__cpp_lib_is_final should be defined in c++20" -# endif -# if __cpp_lib_is_final != 201402L -# error "__cpp_lib_is_final should have the value 201402L in c++20" -# endif - -# ifdef __cpp_lib_is_implicit_lifetime -# error "__cpp_lib_is_implicit_lifetime should not be defined before c++23" -# endif - -# ifndef __cpp_lib_is_invocable -# error "__cpp_lib_is_invocable should be defined in c++20" -# endif -# if __cpp_lib_is_invocable != 201703L -# error "__cpp_lib_is_invocable should have the value 201703L in c++20" -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_is_layout_compatible -# error "__cpp_lib_is_layout_compatible should be defined in c++20" -# endif -# if __cpp_lib_is_layout_compatible != 201907L -# error "__cpp_lib_is_layout_compatible should have the value 201907L in c++20" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_is_layout_compatible -# error "__cpp_lib_is_layout_compatible should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# ifndef __cpp_lib_is_nothrow_convertible -# error "__cpp_lib_is_nothrow_convertible should be defined in c++20" -# endif -# if __cpp_lib_is_nothrow_convertible != 201806L -# error "__cpp_lib_is_nothrow_convertible should have the value 201806L in c++20" -# endif - -# ifndef __cpp_lib_is_null_pointer -# error "__cpp_lib_is_null_pointer should be defined in c++20" -# endif -# if __cpp_lib_is_null_pointer != 201309L -# error "__cpp_lib_is_null_pointer should have the value 201309L in c++20" -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_is_pointer_interconvertible -# error "__cpp_lib_is_pointer_interconvertible should be defined in c++20" -# endif -# if __cpp_lib_is_pointer_interconvertible != 201907L -# error "__cpp_lib_is_pointer_interconvertible should have the value 201907L in c++20" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_is_pointer_interconvertible -# error "__cpp_lib_is_pointer_interconvertible should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# ifdef __cpp_lib_is_scoped_enum -# error "__cpp_lib_is_scoped_enum should not be defined before c++23" -# endif - -# ifndef __cpp_lib_is_swappable -# error "__cpp_lib_is_swappable should be defined in c++20" -# endif -# if __cpp_lib_is_swappable != 201603L -# error "__cpp_lib_is_swappable should have the value 201603L in c++20" -# endif - -# ifdef __cpp_lib_is_virtual_base_of -# error "__cpp_lib_is_virtual_base_of should not be defined before c++26" -# endif - -# ifdef __cpp_lib_is_within_lifetime -# error "__cpp_lib_is_within_lifetime should not be defined before c++26" -# endif - -# if !defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC) -# ifndef __cpp_lib_jthread -# error "__cpp_lib_jthread should be defined in c++20" -# endif -# if __cpp_lib_jthread != 201911L -# error "__cpp_lib_jthread should have the value 201911L in c++20" -# endif -# else -# ifdef __cpp_lib_jthread -# error "__cpp_lib_jthread should not be defined when the requirement '!defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC)' is not met!" -# endif -# endif - -# if !defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC) -# ifndef __cpp_lib_latch -# error "__cpp_lib_latch should be defined in c++20" -# endif -# if __cpp_lib_latch != 201907L -# error "__cpp_lib_latch should have the value 201907L in c++20" -# endif -# else -# ifdef __cpp_lib_latch -# error "__cpp_lib_latch should not be defined when the requirement '!defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC)' is not met!" -# endif -# endif - -# ifndef __cpp_lib_launder -# error "__cpp_lib_launder should be defined in c++20" -# endif -# if __cpp_lib_launder != 201606L -# error "__cpp_lib_launder should have the value 201606L in c++20" -# endif - -# ifdef __cpp_lib_linalg -# error "__cpp_lib_linalg should not be defined before c++26" -# endif - -# ifndef __cpp_lib_list_remove_return_type -# error "__cpp_lib_list_remove_return_type should be defined in c++20" -# endif -# if __cpp_lib_list_remove_return_type != 201806L -# error "__cpp_lib_list_remove_return_type should have the value 201806L in c++20" -# endif - -# ifndef __cpp_lib_logical_traits -# error "__cpp_lib_logical_traits should be defined in c++20" -# endif -# if __cpp_lib_logical_traits != 201510L -# error "__cpp_lib_logical_traits should have the value 201510L in c++20" -# endif - -# ifndef __cpp_lib_make_from_tuple -# error "__cpp_lib_make_from_tuple should be defined in c++20" -# endif -# if __cpp_lib_make_from_tuple != 201606L -# error "__cpp_lib_make_from_tuple should have the value 201606L in c++20" -# endif - -# ifndef __cpp_lib_make_reverse_iterator -# error "__cpp_lib_make_reverse_iterator should be defined in c++20" -# endif -# if __cpp_lib_make_reverse_iterator != 201402L -# error "__cpp_lib_make_reverse_iterator should have the value 201402L in c++20" -# endif - -# ifndef __cpp_lib_make_unique -# error "__cpp_lib_make_unique should be defined in c++20" -# endif -# if __cpp_lib_make_unique != 201304L -# error "__cpp_lib_make_unique should have the value 201304L in c++20" -# endif - -# ifndef __cpp_lib_map_try_emplace -# error "__cpp_lib_map_try_emplace should be defined in c++20" -# endif -# if __cpp_lib_map_try_emplace != 201411L -# error "__cpp_lib_map_try_emplace should have the value 201411L in c++20" -# endif - -# ifndef __cpp_lib_math_constants -# error "__cpp_lib_math_constants should be defined in c++20" -# endif -# if __cpp_lib_math_constants != 201907L -# error "__cpp_lib_math_constants should have the value 201907L in c++20" -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_math_special_functions -# error "__cpp_lib_math_special_functions should be defined in c++20" -# endif -# if __cpp_lib_math_special_functions != 201603L -# error "__cpp_lib_math_special_functions should have the value 201603L in c++20" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_math_special_functions -# error "__cpp_lib_math_special_functions should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# ifdef __cpp_lib_mdspan -# error "__cpp_lib_mdspan should not be defined before c++23" -# endif - -# if !defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_PMR -# ifndef __cpp_lib_memory_resource -# error "__cpp_lib_memory_resource should be defined in c++20" -# endif -# if __cpp_lib_memory_resource != 201603L -# error "__cpp_lib_memory_resource should have the value 201603L in c++20" -# endif -# else -# ifdef __cpp_lib_memory_resource -# error "__cpp_lib_memory_resource should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_PMR' is not met!" -# endif -# endif - -# ifdef __cpp_lib_modules -# error "__cpp_lib_modules should not be defined before c++23" -# endif - -# ifndef __cpp_lib_move_iterator_concept -# error "__cpp_lib_move_iterator_concept should be defined in c++20" -# endif -# if __cpp_lib_move_iterator_concept != 202207L -# error "__cpp_lib_move_iterator_concept should have the value 202207L in c++20" -# endif - -# ifdef __cpp_lib_move_only_function -# error "__cpp_lib_move_only_function should not be defined before c++23" -# endif - -# ifndef __cpp_lib_node_extract -# error "__cpp_lib_node_extract should be defined in c++20" -# endif -# if __cpp_lib_node_extract != 201606L -# error "__cpp_lib_node_extract should have the value 201606L in c++20" -# endif - -# ifndef __cpp_lib_nonmember_container_access -# error "__cpp_lib_nonmember_container_access should be defined in c++20" -# endif -# if __cpp_lib_nonmember_container_access != 201411L -# error "__cpp_lib_nonmember_container_access should have the value 201411L in c++20" -# endif - -# ifndef __cpp_lib_not_fn -# error "__cpp_lib_not_fn should be defined in c++20" -# endif -# if __cpp_lib_not_fn != 201603L -# error "__cpp_lib_not_fn should have the value 201603L in c++20" -# endif - -# ifndef __cpp_lib_null_iterators -# error "__cpp_lib_null_iterators should be defined in c++20" -# endif -# if __cpp_lib_null_iterators != 201304L -# error "__cpp_lib_null_iterators should have the value 201304L in c++20" -# endif - -# ifndef __cpp_lib_optional -# error "__cpp_lib_optional should be defined in c++20" -# endif -# if __cpp_lib_optional != 202106L -# error "__cpp_lib_optional should have the value 202106L in c++20" -# endif - -# ifdef __cpp_lib_optional_range_support -# error "__cpp_lib_optional_range_support should not be defined before c++26" -# endif - -# ifdef __cpp_lib_out_ptr -# error "__cpp_lib_out_ptr should not be defined before c++23" -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_parallel_algorithm -# error "__cpp_lib_parallel_algorithm should be defined in c++20" -# endif -# if __cpp_lib_parallel_algorithm != 201603L -# error "__cpp_lib_parallel_algorithm should have the value 201603L in c++20" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_parallel_algorithm -# error "__cpp_lib_parallel_algorithm should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# ifdef __cpp_lib_philox_engine -# error "__cpp_lib_philox_engine should not be defined before c++26" -# endif - -# if !defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_PMR -# ifndef __cpp_lib_polymorphic_allocator -# error "__cpp_lib_polymorphic_allocator should be defined in c++20" -# endif -# if __cpp_lib_polymorphic_allocator != 201902L -# error "__cpp_lib_polymorphic_allocator should have the value 201902L in c++20" -# endif -# else -# ifdef __cpp_lib_polymorphic_allocator -# error "__cpp_lib_polymorphic_allocator should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_PMR' is not met!" -# endif -# endif - -# ifdef __cpp_lib_print -# error "__cpp_lib_print should not be defined before c++23" -# endif - -# if !defined(_LIBCPP_VERSION) || _LIBCPP_HAS_LOCALIZATION -# ifndef __cpp_lib_quoted_string_io -# error "__cpp_lib_quoted_string_io should be defined in c++20" -# endif -# if __cpp_lib_quoted_string_io != 201304L -# error "__cpp_lib_quoted_string_io should have the value 201304L in c++20" -# endif -# else -# ifdef __cpp_lib_quoted_string_io -# error "__cpp_lib_quoted_string_io should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_HAS_LOCALIZATION' is not met!" -# endif -# endif - -# ifndef __cpp_lib_ranges -# error "__cpp_lib_ranges should be defined in c++20" -# endif -# if __cpp_lib_ranges != 202110L -# error "__cpp_lib_ranges should have the value 202110L in c++20" -# endif - -# ifdef __cpp_lib_ranges_as_const -# error "__cpp_lib_ranges_as_const should not be defined before c++23" -# endif - -# ifdef __cpp_lib_ranges_as_rvalue -# error "__cpp_lib_ranges_as_rvalue should not be defined before c++23" -# endif - -# ifdef __cpp_lib_ranges_chunk -# error "__cpp_lib_ranges_chunk should not be defined before c++23" -# endif - -# ifdef __cpp_lib_ranges_chunk_by -# error "__cpp_lib_ranges_chunk_by should not be defined before c++23" -# endif - -# ifdef __cpp_lib_ranges_concat -# error "__cpp_lib_ranges_concat should not be defined before c++26" -# endif - -# ifdef __cpp_lib_ranges_contains -# error "__cpp_lib_ranges_contains should not be defined before c++23" -# endif - -# ifdef __cpp_lib_ranges_find_last -# error "__cpp_lib_ranges_find_last should not be defined before c++23" -# endif - -# ifdef __cpp_lib_ranges_iota -# error "__cpp_lib_ranges_iota should not be defined before c++23" -# endif - -# ifdef __cpp_lib_ranges_join_with -# error "__cpp_lib_ranges_join_with should not be defined before c++23" -# endif - -# ifdef __cpp_lib_ranges_repeat -# error "__cpp_lib_ranges_repeat should not be defined before c++23" -# endif - -# ifdef __cpp_lib_ranges_slide -# error "__cpp_lib_ranges_slide should not be defined before c++23" -# endif - -# ifdef __cpp_lib_ranges_starts_ends_with -# error "__cpp_lib_ranges_starts_ends_with should not be defined before c++23" -# endif - -# ifdef __cpp_lib_ranges_to_container -# error "__cpp_lib_ranges_to_container should not be defined before c++23" -# endif - -# ifdef __cpp_lib_ranges_zip -# error "__cpp_lib_ranges_zip should not be defined before c++23" -# endif - -# ifdef __cpp_lib_ratio -# error "__cpp_lib_ratio should not be defined before c++26" -# endif - -# ifndef __cpp_lib_raw_memory_algorithms -# error "__cpp_lib_raw_memory_algorithms should be defined in c++20" -# endif -# if __cpp_lib_raw_memory_algorithms != 201606L -# error "__cpp_lib_raw_memory_algorithms should have the value 201606L in c++20" -# endif - -# ifdef __cpp_lib_rcu -# error "__cpp_lib_rcu should not be defined before c++26" -# endif - -# ifdef __cpp_lib_reference_from_temporary -# error "__cpp_lib_reference_from_temporary should not be defined before c++23" -# endif - -# ifdef __cpp_lib_reference_wrapper -# error "__cpp_lib_reference_wrapper should not be defined before c++26" -# endif - -# ifndef __cpp_lib_remove_cvref -# error "__cpp_lib_remove_cvref should be defined in c++20" -# endif -# if __cpp_lib_remove_cvref != 201711L -# error "__cpp_lib_remove_cvref should have the value 201711L in c++20" -# endif - -# ifndef __cpp_lib_result_of_sfinae -# error "__cpp_lib_result_of_sfinae should be defined in c++20" -# endif -# if __cpp_lib_result_of_sfinae != 201210L -# error "__cpp_lib_result_of_sfinae should have the value 201210L in c++20" -# endif - -# ifndef __cpp_lib_robust_nonmodifying_seq_ops -# error "__cpp_lib_robust_nonmodifying_seq_ops should be defined in c++20" -# endif -# if __cpp_lib_robust_nonmodifying_seq_ops != 201304L -# error "__cpp_lib_robust_nonmodifying_seq_ops should have the value 201304L in c++20" -# endif - -# ifndef __cpp_lib_sample -# error "__cpp_lib_sample should be defined in c++20" -# endif -# if __cpp_lib_sample != 201603L -# error "__cpp_lib_sample should have the value 201603L in c++20" -# endif - -# ifdef __cpp_lib_saturation_arithmetic -# error "__cpp_lib_saturation_arithmetic should not be defined before c++26" -# endif - -# if !defined(_LIBCPP_VERSION) || _LIBCPP_HAS_THREADS -# ifndef __cpp_lib_scoped_lock -# error "__cpp_lib_scoped_lock should be defined in c++20" -# endif -# if __cpp_lib_scoped_lock != 201703L -# error "__cpp_lib_scoped_lock should have the value 201703L in c++20" -# endif -# else -# ifdef __cpp_lib_scoped_lock -# error "__cpp_lib_scoped_lock should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_HAS_THREADS' is not met!" -# endif -# endif - -# if !defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC) -# ifndef __cpp_lib_semaphore -# error "__cpp_lib_semaphore should be defined in c++20" -# endif -# if __cpp_lib_semaphore != 201907L -# error "__cpp_lib_semaphore should have the value 201907L in c++20" -# endif -# else -# ifdef __cpp_lib_semaphore -# error "__cpp_lib_semaphore should not be defined when the requirement '!defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC)' is not met!" -# endif -# endif - -# ifdef __cpp_lib_senders -# error "__cpp_lib_senders should not be defined before c++26" -# endif - -# if _LIBCPP_HAS_THREADS -# ifndef __cpp_lib_shared_mutex -# error "__cpp_lib_shared_mutex should be defined in c++20" -# endif -# if __cpp_lib_shared_mutex != 201505L -# error "__cpp_lib_shared_mutex should have the value 201505L in c++20" -# endif -# else -# ifdef __cpp_lib_shared_mutex -# error "__cpp_lib_shared_mutex should not be defined when the requirement '_LIBCPP_HAS_THREADS' is not met!" -# endif -# endif - -# ifndef __cpp_lib_shared_ptr_arrays -# error "__cpp_lib_shared_ptr_arrays should be defined in c++20" -# endif -# if __cpp_lib_shared_ptr_arrays != 201707L -# error "__cpp_lib_shared_ptr_arrays should have the value 201707L in c++20" -# endif - -# ifndef __cpp_lib_shared_ptr_weak_type -# error "__cpp_lib_shared_ptr_weak_type should be defined in c++20" -# endif -# if __cpp_lib_shared_ptr_weak_type != 201606L -# error "__cpp_lib_shared_ptr_weak_type should have the value 201606L in c++20" -# endif - -# if _LIBCPP_HAS_THREADS -# ifndef __cpp_lib_shared_timed_mutex -# error "__cpp_lib_shared_timed_mutex should be defined in c++20" -# endif -# if __cpp_lib_shared_timed_mutex != 201402L -# error "__cpp_lib_shared_timed_mutex should have the value 201402L in c++20" -# endif -# else -# ifdef __cpp_lib_shared_timed_mutex -# error "__cpp_lib_shared_timed_mutex should not be defined when the requirement '_LIBCPP_HAS_THREADS' is not met!" -# endif -# endif - -# ifndef __cpp_lib_shift -# error "__cpp_lib_shift should be defined in c++20" -# endif -# if __cpp_lib_shift != 201806L -# error "__cpp_lib_shift should have the value 201806L in c++20" -# endif - -# ifndef __cpp_lib_smart_ptr_for_overwrite -# error "__cpp_lib_smart_ptr_for_overwrite should be defined in c++20" -# endif -# if __cpp_lib_smart_ptr_for_overwrite != 202002L -# error "__cpp_lib_smart_ptr_for_overwrite should have the value 202002L in c++20" -# endif - -# ifdef __cpp_lib_smart_ptr_owner_equality -# error "__cpp_lib_smart_ptr_owner_equality should not be defined before c++26" -# endif - -# ifndef __cpp_lib_source_location -# error "__cpp_lib_source_location should be defined in c++20" -# endif -# if __cpp_lib_source_location != 201907L -# error "__cpp_lib_source_location should have the value 201907L in c++20" -# endif - -# ifndef __cpp_lib_span -# error "__cpp_lib_span should be defined in c++20" -# endif -# if __cpp_lib_span != 202002L -# error "__cpp_lib_span should have the value 202002L in c++20" -# endif - -# ifdef __cpp_lib_span_at -# error "__cpp_lib_span_at should not be defined before c++26" -# endif - -# ifdef __cpp_lib_span_initializer_list -# error "__cpp_lib_span_initializer_list should not be defined before c++26" -# endif - -# ifdef __cpp_lib_spanstream -# error "__cpp_lib_spanstream should not be defined before c++23" -# endif - -# ifndef __cpp_lib_ssize -# error "__cpp_lib_ssize should be defined in c++20" -# endif -# if __cpp_lib_ssize != 201902L -# error "__cpp_lib_ssize should have the value 201902L in c++20" -# endif - -# ifdef __cpp_lib_sstream_from_string_view -# error "__cpp_lib_sstream_from_string_view should not be defined before c++26" -# endif - -# ifdef __cpp_lib_stacktrace -# error "__cpp_lib_stacktrace should not be defined before c++23" -# endif - -# ifndef __cpp_lib_starts_ends_with -# error "__cpp_lib_starts_ends_with should be defined in c++20" -# endif -# if __cpp_lib_starts_ends_with != 201711L -# error "__cpp_lib_starts_ends_with should have the value 201711L in c++20" -# endif - -# ifdef __cpp_lib_stdatomic_h -# error "__cpp_lib_stdatomic_h should not be defined before c++23" -# endif - -# ifdef __cpp_lib_string_contains -# error "__cpp_lib_string_contains should not be defined before c++23" -# endif - -# ifdef __cpp_lib_string_resize_and_overwrite -# error "__cpp_lib_string_resize_and_overwrite should not be defined before c++23" -# endif - -# ifndef __cpp_lib_string_udls -# error "__cpp_lib_string_udls should be defined in c++20" -# endif -# if __cpp_lib_string_udls != 201304L -# error "__cpp_lib_string_udls should have the value 201304L in c++20" -# endif - -# ifndef __cpp_lib_string_view -# error "__cpp_lib_string_view should be defined in c++20" -# endif -# if __cpp_lib_string_view != 201803L -# error "__cpp_lib_string_view should have the value 201803L in c++20" -# endif - -# ifdef __cpp_lib_submdspan -# error "__cpp_lib_submdspan should not be defined before c++26" -# endif - -# if !defined(_LIBCPP_VERSION) || _LIBCPP_HAS_EXPERIMENTAL_SYNCSTREAM -# ifndef __cpp_lib_syncbuf -# error "__cpp_lib_syncbuf should be defined in c++20" -# endif -# if __cpp_lib_syncbuf != 201803L -# error "__cpp_lib_syncbuf should have the value 201803L in c++20" -# endif -# else -# ifdef __cpp_lib_syncbuf -# error "__cpp_lib_syncbuf should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_HAS_EXPERIMENTAL_SYNCSTREAM' is not met!" -# endif -# endif - -# ifdef __cpp_lib_text_encoding -# error "__cpp_lib_text_encoding should not be defined before c++26" -# endif - -# ifndef __cpp_lib_three_way_comparison -# error "__cpp_lib_three_way_comparison should be defined in c++20" -# endif -# if __cpp_lib_three_way_comparison != 201907L -# error "__cpp_lib_three_way_comparison should have the value 201907L in c++20" -# endif - -# ifndef __cpp_lib_to_address -# error "__cpp_lib_to_address should be defined in c++20" -# endif -# if __cpp_lib_to_address != 201711L -# error "__cpp_lib_to_address should have the value 201711L in c++20" -# endif - -# ifndef __cpp_lib_to_array -# error "__cpp_lib_to_array should be defined in c++20" -# endif -# if __cpp_lib_to_array != 201907L -# error "__cpp_lib_to_array should have the value 201907L in c++20" -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_to_chars -# error "__cpp_lib_to_chars should be defined in c++20" -# endif -# if __cpp_lib_to_chars != 201611L -# error "__cpp_lib_to_chars should have the value 201611L in c++20" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_to_chars -# error "__cpp_lib_to_chars should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# ifdef __cpp_lib_to_string -# error "__cpp_lib_to_string should not be defined before c++26" -# endif - -# ifdef __cpp_lib_to_underlying -# error "__cpp_lib_to_underlying should not be defined before c++23" -# endif - -# ifndef __cpp_lib_transformation_trait_aliases -# error "__cpp_lib_transformation_trait_aliases should be defined in c++20" -# endif -# if __cpp_lib_transformation_trait_aliases != 201304L -# error "__cpp_lib_transformation_trait_aliases should have the value 201304L in c++20" -# endif - -# ifndef __cpp_lib_transparent_operators -# error "__cpp_lib_transparent_operators should be defined in c++20" -# endif -# if __cpp_lib_transparent_operators != 201510L -# error "__cpp_lib_transparent_operators should have the value 201510L in c++20" -# endif - -# ifndef __cpp_lib_tuple_element_t -# error "__cpp_lib_tuple_element_t should be defined in c++20" -# endif -# if __cpp_lib_tuple_element_t != 201402L -# error "__cpp_lib_tuple_element_t should have the value 201402L in c++20" -# endif - -# ifdef __cpp_lib_tuple_like -# error "__cpp_lib_tuple_like should not be defined before c++23" -# endif - -# ifndef __cpp_lib_tuples_by_type -# error "__cpp_lib_tuples_by_type should be defined in c++20" -# endif -# if __cpp_lib_tuples_by_type != 201304L -# error "__cpp_lib_tuples_by_type should have the value 201304L in c++20" -# endif - -# ifndef __cpp_lib_type_identity -# error "__cpp_lib_type_identity should be defined in c++20" -# endif -# if __cpp_lib_type_identity != 201806L -# error "__cpp_lib_type_identity should have the value 201806L in c++20" -# endif - -# ifndef __cpp_lib_type_trait_variable_templates -# error "__cpp_lib_type_trait_variable_templates should be defined in c++20" -# endif -# if __cpp_lib_type_trait_variable_templates != 201510L -# error "__cpp_lib_type_trait_variable_templates should have the value 201510L in c++20" -# endif - -# ifndef __cpp_lib_uncaught_exceptions -# error "__cpp_lib_uncaught_exceptions should be defined in c++20" -# endif -# if __cpp_lib_uncaught_exceptions != 201411L -# error "__cpp_lib_uncaught_exceptions should have the value 201411L in c++20" -# endif - -# ifndef __cpp_lib_unordered_map_try_emplace -# error "__cpp_lib_unordered_map_try_emplace should be defined in c++20" -# endif -# if __cpp_lib_unordered_map_try_emplace != 201411L -# error "__cpp_lib_unordered_map_try_emplace should have the value 201411L in c++20" -# endif - -# ifdef __cpp_lib_unreachable -# error "__cpp_lib_unreachable should not be defined before c++23" -# endif - -# ifndef __cpp_lib_unwrap_ref -# error "__cpp_lib_unwrap_ref should be defined in c++20" -# endif -# if __cpp_lib_unwrap_ref != 201811L -# error "__cpp_lib_unwrap_ref should have the value 201811L in c++20" -# endif - -# ifndef __cpp_lib_variant -# error "__cpp_lib_variant should be defined in c++20" -# endif -# if __cpp_lib_variant != 202106L -# error "__cpp_lib_variant should have the value 202106L in c++20" -# endif - -# ifndef __cpp_lib_void_t -# error "__cpp_lib_void_t should be defined in c++20" -# endif -# if __cpp_lib_void_t != 201411L -# error "__cpp_lib_void_t should have the value 201411L in c++20" -# endif - -#elif TEST_STD_VER == 23 - -# ifndef __cpp_lib_adaptor_iterator_pair_constructor -# error "__cpp_lib_adaptor_iterator_pair_constructor should be defined in c++23" -# endif -# if __cpp_lib_adaptor_iterator_pair_constructor != 202106L -# error "__cpp_lib_adaptor_iterator_pair_constructor should have the value 202106L in c++23" -# endif - -# ifndef __cpp_lib_addressof_constexpr -# error "__cpp_lib_addressof_constexpr should be defined in c++23" -# endif -# if __cpp_lib_addressof_constexpr != 201603L -# error "__cpp_lib_addressof_constexpr should have the value 201603L in c++23" -# endif - -# ifndef __cpp_lib_allocate_at_least -# error "__cpp_lib_allocate_at_least should be defined in c++23" -# endif -# if __cpp_lib_allocate_at_least != 202302L -# error "__cpp_lib_allocate_at_least should have the value 202302L in c++23" -# endif - -# ifndef __cpp_lib_allocator_traits_is_always_equal -# error "__cpp_lib_allocator_traits_is_always_equal should be defined in c++23" -# endif -# if __cpp_lib_allocator_traits_is_always_equal != 201411L -# error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++23" -# endif - -# ifndef __cpp_lib_any -# error "__cpp_lib_any should be defined in c++23" -# endif -# if __cpp_lib_any != 201606L -# error "__cpp_lib_any should have the value 201606L in c++23" -# endif - -# ifndef __cpp_lib_apply -# error "__cpp_lib_apply should be defined in c++23" -# endif -# if __cpp_lib_apply != 201603L -# error "__cpp_lib_apply should have the value 201603L in c++23" -# endif - -# ifndef __cpp_lib_array_constexpr -# error "__cpp_lib_array_constexpr should be defined in c++23" -# endif -# if __cpp_lib_array_constexpr != 201811L -# error "__cpp_lib_array_constexpr should have the value 201811L in c++23" -# endif - -# ifndef __cpp_lib_as_const -# error "__cpp_lib_as_const should be defined in c++23" -# endif -# if __cpp_lib_as_const != 201510L -# error "__cpp_lib_as_const should have the value 201510L in c++23" -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_associative_heterogeneous_erasure -# error "__cpp_lib_associative_heterogeneous_erasure should be defined in c++23" -# endif -# if __cpp_lib_associative_heterogeneous_erasure != 202110L -# error "__cpp_lib_associative_heterogeneous_erasure should have the value 202110L in c++23" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_associative_heterogeneous_erasure -# error "__cpp_lib_associative_heterogeneous_erasure should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# ifdef __cpp_lib_associative_heterogeneous_insertion -# error "__cpp_lib_associative_heterogeneous_insertion should not be defined before c++26" -# endif - -# ifndef __cpp_lib_assume_aligned -# error "__cpp_lib_assume_aligned should be defined in c++23" -# endif -# if __cpp_lib_assume_aligned != 201811L -# error "__cpp_lib_assume_aligned should have the value 201811L in c++23" -# endif - -# ifndef __cpp_lib_atomic_flag_test -# error "__cpp_lib_atomic_flag_test should be defined in c++23" -# endif -# if __cpp_lib_atomic_flag_test != 201907L -# error "__cpp_lib_atomic_flag_test should have the value 201907L in c++23" -# endif - -# ifndef __cpp_lib_atomic_float -# error "__cpp_lib_atomic_float should be defined in c++23" -# endif -# if __cpp_lib_atomic_float != 201711L -# error "__cpp_lib_atomic_float should have the value 201711L in c++23" -# endif - -# ifndef __cpp_lib_atomic_is_always_lock_free -# error "__cpp_lib_atomic_is_always_lock_free should be defined in c++23" -# endif -# if __cpp_lib_atomic_is_always_lock_free != 201603L -# error "__cpp_lib_atomic_is_always_lock_free should have the value 201603L in c++23" -# endif - -# ifndef __cpp_lib_atomic_lock_free_type_aliases -# error "__cpp_lib_atomic_lock_free_type_aliases should be defined in c++23" -# endif -# if __cpp_lib_atomic_lock_free_type_aliases != 201907L -# error "__cpp_lib_atomic_lock_free_type_aliases should have the value 201907L in c++23" -# endif - -# ifdef __cpp_lib_atomic_min_max -# error "__cpp_lib_atomic_min_max should not be defined before c++26" -# endif - -# ifndef __cpp_lib_atomic_ref -# error "__cpp_lib_atomic_ref should be defined in c++23" -# endif -# if __cpp_lib_atomic_ref != 201806L -# error "__cpp_lib_atomic_ref should have the value 201806L in c++23" -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_atomic_shared_ptr -# error "__cpp_lib_atomic_shared_ptr should be defined in c++23" -# endif -# if __cpp_lib_atomic_shared_ptr != 201711L -# error "__cpp_lib_atomic_shared_ptr should have the value 201711L in c++23" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_atomic_shared_ptr -# error "__cpp_lib_atomic_shared_ptr should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# ifndef __cpp_lib_atomic_value_initialization -# error "__cpp_lib_atomic_value_initialization should be defined in c++23" -# endif -# if __cpp_lib_atomic_value_initialization != 201911L -# error "__cpp_lib_atomic_value_initialization should have the value 201911L in c++23" -# endif - -# if !defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_SYNC -# ifndef __cpp_lib_atomic_wait -# error "__cpp_lib_atomic_wait should be defined in c++23" -# endif -# if __cpp_lib_atomic_wait != 201907L -# error "__cpp_lib_atomic_wait should have the value 201907L in c++23" -# endif -# else -# ifdef __cpp_lib_atomic_wait -# error "__cpp_lib_atomic_wait should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_SYNC' is not met!" -# endif -# endif - -# if !defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC) -# ifndef __cpp_lib_barrier -# error "__cpp_lib_barrier should be defined in c++23" -# endif -# if __cpp_lib_barrier != 201907L -# error "__cpp_lib_barrier should have the value 201907L in c++23" -# endif -# else -# ifdef __cpp_lib_barrier -# error "__cpp_lib_barrier should not be defined when the requirement '!defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC)' is not met!" -# endif -# endif - -# ifndef __cpp_lib_bind_back -# error "__cpp_lib_bind_back should be defined in c++23" -# endif -# if __cpp_lib_bind_back != 202202L -# error "__cpp_lib_bind_back should have the value 202202L in c++23" -# endif - -# ifndef __cpp_lib_bind_front -# error "__cpp_lib_bind_front should be defined in c++23" -# endif -# if __cpp_lib_bind_front != 201907L -# error "__cpp_lib_bind_front should have the value 201907L in c++23" -# endif - -# ifndef __cpp_lib_bit_cast -# error "__cpp_lib_bit_cast should be defined in c++23" -# endif -# if __cpp_lib_bit_cast != 201806L -# error "__cpp_lib_bit_cast should have the value 201806L in c++23" -# endif - -# ifndef __cpp_lib_bitops -# error "__cpp_lib_bitops should be defined in c++23" -# endif -# if __cpp_lib_bitops != 201907L -# error "__cpp_lib_bitops should have the value 201907L in c++23" -# endif - -# ifdef __cpp_lib_bitset -# error "__cpp_lib_bitset should not be defined before c++26" -# endif - -# ifndef __cpp_lib_bool_constant -# error "__cpp_lib_bool_constant should be defined in c++23" -# endif -# if __cpp_lib_bool_constant != 201505L -# error "__cpp_lib_bool_constant should have the value 201505L in c++23" -# endif - -# ifndef __cpp_lib_bounded_array_traits -# error "__cpp_lib_bounded_array_traits should be defined in c++23" -# endif -# if __cpp_lib_bounded_array_traits != 201902L -# error "__cpp_lib_bounded_array_traits should have the value 201902L in c++23" -# endif - -# ifndef __cpp_lib_boyer_moore_searcher -# error "__cpp_lib_boyer_moore_searcher should be defined in c++23" -# endif -# if __cpp_lib_boyer_moore_searcher != 201603L -# error "__cpp_lib_boyer_moore_searcher should have the value 201603L in c++23" -# endif - -# ifndef __cpp_lib_byte -# error "__cpp_lib_byte should be defined in c++23" -# endif -# if __cpp_lib_byte != 201603L -# error "__cpp_lib_byte should have the value 201603L in c++23" -# endif - -# ifndef __cpp_lib_byteswap -# error "__cpp_lib_byteswap should be defined in c++23" -# endif -# if __cpp_lib_byteswap != 202110L -# error "__cpp_lib_byteswap should have the value 202110L in c++23" -# endif - -# if defined(__cpp_char8_t) -# ifndef __cpp_lib_char8_t -# error "__cpp_lib_char8_t should be defined in c++23" -# endif -# if __cpp_lib_char8_t != 201907L -# error "__cpp_lib_char8_t should have the value 201907L in c++23" -# endif -# else -# ifdef __cpp_lib_char8_t -# error "__cpp_lib_char8_t should not be defined when the requirement 'defined(__cpp_char8_t)' is not met!" -# endif -# endif - -# ifndef __cpp_lib_chrono -# error "__cpp_lib_chrono should be defined in c++23" -# endif -# if __cpp_lib_chrono != 201611L -# error "__cpp_lib_chrono should have the value 201611L in c++23" -# endif - -# ifndef __cpp_lib_chrono_udls -# error "__cpp_lib_chrono_udls should be defined in c++23" -# endif -# if __cpp_lib_chrono_udls != 201304L -# error "__cpp_lib_chrono_udls should have the value 201304L in c++23" -# endif - -# ifndef __cpp_lib_clamp -# error "__cpp_lib_clamp should be defined in c++23" -# endif -# if __cpp_lib_clamp != 201603L -# error "__cpp_lib_clamp should have the value 201603L in c++23" -# endif - -# ifndef __cpp_lib_complex_udls -# error "__cpp_lib_complex_udls should be defined in c++23" -# endif -# if __cpp_lib_complex_udls != 201309L -# error "__cpp_lib_complex_udls should have the value 201309L in c++23" -# endif - -# ifndef __cpp_lib_concepts -# error "__cpp_lib_concepts should be defined in c++23" -# endif -# if __cpp_lib_concepts != 202002L -# error "__cpp_lib_concepts should have the value 202002L in c++23" -# endif - -# ifndef __cpp_lib_constexpr_algorithms -# error "__cpp_lib_constexpr_algorithms should be defined in c++23" -# endif -# if __cpp_lib_constexpr_algorithms != 201806L -# error "__cpp_lib_constexpr_algorithms should have the value 201806L in c++23" -# endif - -# ifndef __cpp_lib_constexpr_bitset -# error "__cpp_lib_constexpr_bitset should be defined in c++23" -# endif -# if __cpp_lib_constexpr_bitset != 202207L -# error "__cpp_lib_constexpr_bitset should have the value 202207L in c++23" -# endif - -# ifndef __cpp_lib_constexpr_charconv -# error "__cpp_lib_constexpr_charconv should be defined in c++23" -# endif -# if __cpp_lib_constexpr_charconv != 202207L -# error "__cpp_lib_constexpr_charconv should have the value 202207L in c++23" -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_constexpr_cmath -# error "__cpp_lib_constexpr_cmath should be defined in c++23" -# endif -# if __cpp_lib_constexpr_cmath != 202202L -# error "__cpp_lib_constexpr_cmath should have the value 202202L in c++23" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_constexpr_cmath -# error "__cpp_lib_constexpr_cmath should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# ifndef __cpp_lib_constexpr_complex -# error "__cpp_lib_constexpr_complex should be defined in c++23" -# endif -# if __cpp_lib_constexpr_complex != 201711L -# error "__cpp_lib_constexpr_complex should have the value 201711L in c++23" -# endif - -# ifndef __cpp_lib_constexpr_dynamic_alloc -# error "__cpp_lib_constexpr_dynamic_alloc should be defined in c++23" -# endif -# if __cpp_lib_constexpr_dynamic_alloc != 201907L -# error "__cpp_lib_constexpr_dynamic_alloc should have the value 201907L in c++23" -# endif - -# ifdef __cpp_lib_constexpr_forward_list -# error "__cpp_lib_constexpr_forward_list should not be defined before c++26" -# endif - -# ifndef __cpp_lib_constexpr_functional -# error "__cpp_lib_constexpr_functional should be defined in c++23" -# endif -# if __cpp_lib_constexpr_functional != 201907L -# error "__cpp_lib_constexpr_functional should have the value 201907L in c++23" -# endif - -# ifndef __cpp_lib_constexpr_iterator -# error "__cpp_lib_constexpr_iterator should be defined in c++23" -# endif -# if __cpp_lib_constexpr_iterator != 201811L -# error "__cpp_lib_constexpr_iterator should have the value 201811L in c++23" -# endif - -# ifndef __cpp_lib_constexpr_memory -# error "__cpp_lib_constexpr_memory should be defined in c++23" -# endif -# if __cpp_lib_constexpr_memory != 202202L -# error "__cpp_lib_constexpr_memory should have the value 202202L in c++23" -# endif - -# ifdef __cpp_lib_constexpr_new -# error "__cpp_lib_constexpr_new should not be defined before c++26" -# endif - -# ifndef __cpp_lib_constexpr_numeric -# error "__cpp_lib_constexpr_numeric should be defined in c++23" -# endif -# if __cpp_lib_constexpr_numeric != 201911L -# error "__cpp_lib_constexpr_numeric should have the value 201911L in c++23" -# endif - -# ifndef __cpp_lib_constexpr_string -# error "__cpp_lib_constexpr_string should be defined in c++23" -# endif -# if __cpp_lib_constexpr_string != 201907L -# error "__cpp_lib_constexpr_string should have the value 201907L in c++23" -# endif - -# ifndef __cpp_lib_constexpr_string_view -# error "__cpp_lib_constexpr_string_view should be defined in c++23" -# endif -# if __cpp_lib_constexpr_string_view != 201811L -# error "__cpp_lib_constexpr_string_view should have the value 201811L in c++23" -# endif - -# ifndef __cpp_lib_constexpr_tuple -# error "__cpp_lib_constexpr_tuple should be defined in c++23" -# endif -# if __cpp_lib_constexpr_tuple != 201811L -# error "__cpp_lib_constexpr_tuple should have the value 201811L in c++23" -# endif - -# ifndef __cpp_lib_constexpr_typeinfo -# error "__cpp_lib_constexpr_typeinfo should be defined in c++23" -# endif -# if __cpp_lib_constexpr_typeinfo != 202106L -# error "__cpp_lib_constexpr_typeinfo should have the value 202106L in c++23" -# endif - -# ifndef __cpp_lib_constexpr_utility -# error "__cpp_lib_constexpr_utility should be defined in c++23" -# endif -# if __cpp_lib_constexpr_utility != 201811L -# error "__cpp_lib_constexpr_utility should have the value 201811L in c++23" -# endif - -# ifndef __cpp_lib_constexpr_vector -# error "__cpp_lib_constexpr_vector should be defined in c++23" -# endif -# if __cpp_lib_constexpr_vector != 201907L -# error "__cpp_lib_constexpr_vector should have the value 201907L in c++23" -# endif - -# ifdef __cpp_lib_constrained_equality -# error "__cpp_lib_constrained_equality should not be defined before c++26" -# endif - -# ifndef __cpp_lib_containers_ranges -# error "__cpp_lib_containers_ranges should be defined in c++23" -# endif -# if __cpp_lib_containers_ranges != 202202L -# error "__cpp_lib_containers_ranges should have the value 202202L in c++23" -# endif - -# ifdef __cpp_lib_copyable_function -# error "__cpp_lib_copyable_function should not be defined before c++26" -# endif - -# ifndef __cpp_lib_coroutine -# error "__cpp_lib_coroutine should be defined in c++23" -# endif -# if __cpp_lib_coroutine != 201902L -# error "__cpp_lib_coroutine should have the value 201902L in c++23" -# endif - -# ifdef __cpp_lib_debugging -# error "__cpp_lib_debugging should not be defined before c++26" -# endif - -# ifdef __cpp_lib_default_template_type_for_algorithm_values -# error "__cpp_lib_default_template_type_for_algorithm_values should not be defined before c++26" -# endif - -# if TEST_STD_VER > 17 && defined(__cpp_impl_destroying_delete) && __cpp_impl_destroying_delete >= 201806L -# ifndef __cpp_lib_destroying_delete -# error "__cpp_lib_destroying_delete should be defined in c++23" -# endif -# if __cpp_lib_destroying_delete != 201806L -# error "__cpp_lib_destroying_delete should have the value 201806L in c++23" -# endif -# else -# ifdef __cpp_lib_destroying_delete -# error "__cpp_lib_destroying_delete should not be defined when the requirement 'TEST_STD_VER > 17 && defined(__cpp_impl_destroying_delete) && __cpp_impl_destroying_delete >= 201806L' is not met!" -# endif -# endif - -# ifndef __cpp_lib_enable_shared_from_this -# error "__cpp_lib_enable_shared_from_this should be defined in c++23" -# endif -# if __cpp_lib_enable_shared_from_this != 201603L -# error "__cpp_lib_enable_shared_from_this should have the value 201603L in c++23" -# endif - -# ifndef __cpp_lib_endian -# error "__cpp_lib_endian should be defined in c++23" -# endif -# if __cpp_lib_endian != 201907L -# error "__cpp_lib_endian should have the value 201907L in c++23" -# endif - -# ifndef __cpp_lib_erase_if -# error "__cpp_lib_erase_if should be defined in c++23" -# endif -# if __cpp_lib_erase_if != 202002L -# error "__cpp_lib_erase_if should have the value 202002L in c++23" -# endif - -# ifndef __cpp_lib_exchange_function -# error "__cpp_lib_exchange_function should be defined in c++23" -# endif -# if __cpp_lib_exchange_function != 201304L -# error "__cpp_lib_exchange_function should have the value 201304L in c++23" -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_execution -# error "__cpp_lib_execution should be defined in c++23" -# endif -# if __cpp_lib_execution != 201902L -# error "__cpp_lib_execution should have the value 201902L in c++23" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_execution -# error "__cpp_lib_execution should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# ifndef __cpp_lib_expected -# error "__cpp_lib_expected should be defined in c++23" -# endif -# if __cpp_lib_expected != 202211L -# error "__cpp_lib_expected should have the value 202211L in c++23" -# endif - -# if !defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_FILESYSTEM && _LIBCPP_AVAILABILITY_HAS_FILESYSTEM_LIBRARY) -# ifndef __cpp_lib_filesystem -# error "__cpp_lib_filesystem should be defined in c++23" -# endif -# if __cpp_lib_filesystem != 201703L -# error "__cpp_lib_filesystem should have the value 201703L in c++23" -# endif -# else -# ifdef __cpp_lib_filesystem -# error "__cpp_lib_filesystem should not be defined when the requirement '!defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_FILESYSTEM && _LIBCPP_AVAILABILITY_HAS_FILESYSTEM_LIBRARY)' is not met!" -# endif -# endif - -# ifndef __cpp_lib_flat_map -# error "__cpp_lib_flat_map should be defined in c++23" -# endif -# if __cpp_lib_flat_map != 202207L -# error "__cpp_lib_flat_map should have the value 202207L in c++23" -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_flat_set -# error "__cpp_lib_flat_set should be defined in c++23" -# endif -# if __cpp_lib_flat_set != 202207L -# error "__cpp_lib_flat_set should have the value 202207L in c++23" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_flat_set -# error "__cpp_lib_flat_set should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# if !defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_TO_CHARS_FLOATING_POINT -# ifndef __cpp_lib_format -# error "__cpp_lib_format should be defined in c++23" -# endif -# if __cpp_lib_format != 202110L -# error "__cpp_lib_format should have the value 202110L in c++23" -# endif -# else -# ifdef __cpp_lib_format -# error "__cpp_lib_format should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_TO_CHARS_FLOATING_POINT' is not met!" -# endif -# endif - -# ifdef __cpp_lib_format_path -# error "__cpp_lib_format_path should not be defined before c++26" -# endif - -# ifndef __cpp_lib_format_ranges -# error "__cpp_lib_format_ranges should be defined in c++23" -# endif -# if __cpp_lib_format_ranges != 202207L -# error "__cpp_lib_format_ranges should have the value 202207L in c++23" -# endif - -# ifndef __cpp_lib_format_uchar -# error "__cpp_lib_format_uchar should be defined in c++23" -# endif -# if __cpp_lib_format_uchar != 202311L -# error "__cpp_lib_format_uchar should have the value 202311L in c++23" -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_formatters -# error "__cpp_lib_formatters should be defined in c++23" -# endif -# if __cpp_lib_formatters != 202302L -# error "__cpp_lib_formatters should have the value 202302L in c++23" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_formatters -# error "__cpp_lib_formatters should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# ifndef __cpp_lib_forward_like -# error "__cpp_lib_forward_like should be defined in c++23" -# endif -# if __cpp_lib_forward_like != 202207L -# error "__cpp_lib_forward_like should have the value 202207L in c++23" -# endif - -# ifdef __cpp_lib_freestanding_algorithm -# error "__cpp_lib_freestanding_algorithm should not be defined before c++26" -# endif - -# ifdef __cpp_lib_freestanding_array -# error "__cpp_lib_freestanding_array should not be defined before c++26" -# endif - -# ifdef __cpp_lib_freestanding_cstring -# error "__cpp_lib_freestanding_cstring should not be defined before c++26" -# endif - -# ifdef __cpp_lib_freestanding_expected -# error "__cpp_lib_freestanding_expected should not be defined before c++26" -# endif - -# ifdef __cpp_lib_freestanding_mdspan -# error "__cpp_lib_freestanding_mdspan should not be defined before c++26" -# endif - -# ifdef __cpp_lib_freestanding_optional -# error "__cpp_lib_freestanding_optional should not be defined before c++26" -# endif - -# ifdef __cpp_lib_freestanding_string_view -# error "__cpp_lib_freestanding_string_view should not be defined before c++26" -# endif - -# ifdef __cpp_lib_freestanding_variant -# error "__cpp_lib_freestanding_variant should not be defined before c++26" -# endif - -# ifdef __cpp_lib_fstream_native_handle -# error "__cpp_lib_fstream_native_handle should not be defined before c++26" -# endif - -# ifdef __cpp_lib_function_ref -# error "__cpp_lib_function_ref should not be defined before c++26" -# endif - -# ifndef __cpp_lib_gcd_lcm -# error "__cpp_lib_gcd_lcm should be defined in c++23" -# endif -# if __cpp_lib_gcd_lcm != 201606L -# error "__cpp_lib_gcd_lcm should have the value 201606L in c++23" -# endif - -# ifdef __cpp_lib_generate_random -# error "__cpp_lib_generate_random should not be defined before c++26" -# endif - -# ifndef __cpp_lib_generic_associative_lookup -# error "__cpp_lib_generic_associative_lookup should be defined in c++23" -# endif -# if __cpp_lib_generic_associative_lookup != 201304L -# error "__cpp_lib_generic_associative_lookup should have the value 201304L in c++23" -# endif - -# ifndef __cpp_lib_generic_unordered_lookup -# error "__cpp_lib_generic_unordered_lookup should be defined in c++23" -# endif -# if __cpp_lib_generic_unordered_lookup != 201811L -# error "__cpp_lib_generic_unordered_lookup should have the value 201811L in c++23" -# endif - -# if !defined(_LIBCPP_VERSION) || (defined(__GCC_DESTRUCTIVE_SIZE) && defined(__GCC_CONSTRUCTIVE_SIZE)) -# ifndef __cpp_lib_hardware_interference_size -# error "__cpp_lib_hardware_interference_size should be defined in c++23" -# endif -# if __cpp_lib_hardware_interference_size != 201703L -# error "__cpp_lib_hardware_interference_size should have the value 201703L in c++23" -# endif -# else -# ifdef __cpp_lib_hardware_interference_size -# error "__cpp_lib_hardware_interference_size should not be defined when the requirement '!defined(_LIBCPP_VERSION) || (defined(__GCC_DESTRUCTIVE_SIZE) && defined(__GCC_CONSTRUCTIVE_SIZE))' is not met!" -# endif -# endif - -# ifndef __cpp_lib_has_unique_object_representations -# error "__cpp_lib_has_unique_object_representations should be defined in c++23" -# endif -# if __cpp_lib_has_unique_object_representations != 201606L -# error "__cpp_lib_has_unique_object_representations should have the value 201606L in c++23" -# endif - -# ifdef __cpp_lib_hazard_pointer -# error "__cpp_lib_hazard_pointer should not be defined before c++26" -# endif - -# ifndef __cpp_lib_hypot -# error "__cpp_lib_hypot should be defined in c++23" -# endif -# if __cpp_lib_hypot != 201603L -# error "__cpp_lib_hypot should have the value 201603L in c++23" -# endif - -# ifndef __cpp_lib_incomplete_container_elements -# error "__cpp_lib_incomplete_container_elements should be defined in c++23" -# endif -# if __cpp_lib_incomplete_container_elements != 201505L -# error "__cpp_lib_incomplete_container_elements should have the value 201505L in c++23" -# endif - -# ifdef __cpp_lib_inplace_vector -# error "__cpp_lib_inplace_vector should not be defined before c++26" -# endif - -# ifndef __cpp_lib_int_pow2 -# error "__cpp_lib_int_pow2 should be defined in c++23" -# endif -# if __cpp_lib_int_pow2 != 202002L -# error "__cpp_lib_int_pow2 should have the value 202002L in c++23" -# endif - -# ifndef __cpp_lib_integer_comparison_functions -# error "__cpp_lib_integer_comparison_functions should be defined in c++23" -# endif -# if __cpp_lib_integer_comparison_functions != 202002L -# error "__cpp_lib_integer_comparison_functions should have the value 202002L in c++23" -# endif - -# ifndef __cpp_lib_integer_sequence -# error "__cpp_lib_integer_sequence should be defined in c++23" -# endif -# if __cpp_lib_integer_sequence != 201304L -# error "__cpp_lib_integer_sequence should have the value 201304L in c++23" -# endif - -# ifndef __cpp_lib_integral_constant_callable -# error "__cpp_lib_integral_constant_callable should be defined in c++23" -# endif -# if __cpp_lib_integral_constant_callable != 201304L -# error "__cpp_lib_integral_constant_callable should have the value 201304L in c++23" -# endif - -# ifndef __cpp_lib_interpolate -# error "__cpp_lib_interpolate should be defined in c++23" -# endif -# if __cpp_lib_interpolate != 201902L -# error "__cpp_lib_interpolate should have the value 201902L in c++23" -# endif - -# ifndef __cpp_lib_invoke -# error "__cpp_lib_invoke should be defined in c++23" -# endif -# if __cpp_lib_invoke != 201411L -# error "__cpp_lib_invoke should have the value 201411L in c++23" -# endif - -# ifndef __cpp_lib_invoke_r -# error "__cpp_lib_invoke_r should be defined in c++23" -# endif -# if __cpp_lib_invoke_r != 202106L -# error "__cpp_lib_invoke_r should have the value 202106L in c++23" -# endif - -# ifndef __cpp_lib_ios_noreplace -# error "__cpp_lib_ios_noreplace should be defined in c++23" -# endif -# if __cpp_lib_ios_noreplace != 202207L -# error "__cpp_lib_ios_noreplace should have the value 202207L in c++23" -# endif - -# ifndef __cpp_lib_is_aggregate -# error "__cpp_lib_is_aggregate should be defined in c++23" -# endif -# if __cpp_lib_is_aggregate != 201703L -# error "__cpp_lib_is_aggregate should have the value 201703L in c++23" -# endif - -# ifndef __cpp_lib_is_constant_evaluated -# error "__cpp_lib_is_constant_evaluated should be defined in c++23" -# endif -# if __cpp_lib_is_constant_evaluated != 201811L -# error "__cpp_lib_is_constant_evaluated should have the value 201811L in c++23" -# endif - -# ifndef __cpp_lib_is_final -# error "__cpp_lib_is_final should be defined in c++23" -# endif -# if __cpp_lib_is_final != 201402L -# error "__cpp_lib_is_final should have the value 201402L in c++23" -# endif - -# if __has_builtin(__builtin_is_implicit_lifetime) -# ifndef __cpp_lib_is_implicit_lifetime -# error "__cpp_lib_is_implicit_lifetime should be defined in c++23" -# endif -# if __cpp_lib_is_implicit_lifetime != 202302L -# error "__cpp_lib_is_implicit_lifetime should have the value 202302L in c++23" -# endif -# else -# ifdef __cpp_lib_is_implicit_lifetime -# error "__cpp_lib_is_implicit_lifetime should not be defined when the requirement '__has_builtin(__builtin_is_implicit_lifetime)' is not met!" -# endif -# endif - -# ifndef __cpp_lib_is_invocable -# error "__cpp_lib_is_invocable should be defined in c++23" -# endif -# if __cpp_lib_is_invocable != 201703L -# error "__cpp_lib_is_invocable should have the value 201703L in c++23" -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_is_layout_compatible -# error "__cpp_lib_is_layout_compatible should be defined in c++23" -# endif -# if __cpp_lib_is_layout_compatible != 201907L -# error "__cpp_lib_is_layout_compatible should have the value 201907L in c++23" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_is_layout_compatible -# error "__cpp_lib_is_layout_compatible should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# ifndef __cpp_lib_is_nothrow_convertible -# error "__cpp_lib_is_nothrow_convertible should be defined in c++23" -# endif -# if __cpp_lib_is_nothrow_convertible != 201806L -# error "__cpp_lib_is_nothrow_convertible should have the value 201806L in c++23" -# endif - -# ifndef __cpp_lib_is_null_pointer -# error "__cpp_lib_is_null_pointer should be defined in c++23" -# endif -# if __cpp_lib_is_null_pointer != 201309L -# error "__cpp_lib_is_null_pointer should have the value 201309L in c++23" -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_is_pointer_interconvertible -# error "__cpp_lib_is_pointer_interconvertible should be defined in c++23" -# endif -# if __cpp_lib_is_pointer_interconvertible != 201907L -# error "__cpp_lib_is_pointer_interconvertible should have the value 201907L in c++23" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_is_pointer_interconvertible -# error "__cpp_lib_is_pointer_interconvertible should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# ifndef __cpp_lib_is_scoped_enum -# error "__cpp_lib_is_scoped_enum should be defined in c++23" -# endif -# if __cpp_lib_is_scoped_enum != 202011L -# error "__cpp_lib_is_scoped_enum should have the value 202011L in c++23" -# endif - -# ifndef __cpp_lib_is_swappable -# error "__cpp_lib_is_swappable should be defined in c++23" -# endif -# if __cpp_lib_is_swappable != 201603L -# error "__cpp_lib_is_swappable should have the value 201603L in c++23" -# endif - -# ifdef __cpp_lib_is_virtual_base_of -# error "__cpp_lib_is_virtual_base_of should not be defined before c++26" -# endif - -# ifdef __cpp_lib_is_within_lifetime -# error "__cpp_lib_is_within_lifetime should not be defined before c++26" -# endif - -# if !defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC) -# ifndef __cpp_lib_jthread -# error "__cpp_lib_jthread should be defined in c++23" -# endif -# if __cpp_lib_jthread != 201911L -# error "__cpp_lib_jthread should have the value 201911L in c++23" -# endif -# else -# ifdef __cpp_lib_jthread -# error "__cpp_lib_jthread should not be defined when the requirement '!defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC)' is not met!" -# endif -# endif - -# if !defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC) -# ifndef __cpp_lib_latch -# error "__cpp_lib_latch should be defined in c++23" -# endif -# if __cpp_lib_latch != 201907L -# error "__cpp_lib_latch should have the value 201907L in c++23" -# endif -# else -# ifdef __cpp_lib_latch -# error "__cpp_lib_latch should not be defined when the requirement '!defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC)' is not met!" -# endif -# endif - -# ifndef __cpp_lib_launder -# error "__cpp_lib_launder should be defined in c++23" -# endif -# if __cpp_lib_launder != 201606L -# error "__cpp_lib_launder should have the value 201606L in c++23" -# endif - -# ifdef __cpp_lib_linalg -# error "__cpp_lib_linalg should not be defined before c++26" -# endif - -# ifndef __cpp_lib_list_remove_return_type -# error "__cpp_lib_list_remove_return_type should be defined in c++23" -# endif -# if __cpp_lib_list_remove_return_type != 201806L -# error "__cpp_lib_list_remove_return_type should have the value 201806L in c++23" -# endif - -# ifndef __cpp_lib_logical_traits -# error "__cpp_lib_logical_traits should be defined in c++23" -# endif -# if __cpp_lib_logical_traits != 201510L -# error "__cpp_lib_logical_traits should have the value 201510L in c++23" -# endif - -# ifndef __cpp_lib_make_from_tuple -# error "__cpp_lib_make_from_tuple should be defined in c++23" -# endif -# if __cpp_lib_make_from_tuple != 201606L -# error "__cpp_lib_make_from_tuple should have the value 201606L in c++23" -# endif - -# ifndef __cpp_lib_make_reverse_iterator -# error "__cpp_lib_make_reverse_iterator should be defined in c++23" -# endif -# if __cpp_lib_make_reverse_iterator != 201402L -# error "__cpp_lib_make_reverse_iterator should have the value 201402L in c++23" -# endif - -# ifndef __cpp_lib_make_unique -# error "__cpp_lib_make_unique should be defined in c++23" -# endif -# if __cpp_lib_make_unique != 201304L -# error "__cpp_lib_make_unique should have the value 201304L in c++23" -# endif - -# ifndef __cpp_lib_map_try_emplace -# error "__cpp_lib_map_try_emplace should be defined in c++23" -# endif -# if __cpp_lib_map_try_emplace != 201411L -# error "__cpp_lib_map_try_emplace should have the value 201411L in c++23" -# endif - -# ifndef __cpp_lib_math_constants -# error "__cpp_lib_math_constants should be defined in c++23" -# endif -# if __cpp_lib_math_constants != 201907L -# error "__cpp_lib_math_constants should have the value 201907L in c++23" -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_math_special_functions -# error "__cpp_lib_math_special_functions should be defined in c++23" -# endif -# if __cpp_lib_math_special_functions != 201603L -# error "__cpp_lib_math_special_functions should have the value 201603L in c++23" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_math_special_functions -# error "__cpp_lib_math_special_functions should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# ifndef __cpp_lib_mdspan -# error "__cpp_lib_mdspan should be defined in c++23" -# endif -# if __cpp_lib_mdspan != 202207L -# error "__cpp_lib_mdspan should have the value 202207L in c++23" -# endif - -# if !defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_PMR -# ifndef __cpp_lib_memory_resource -# error "__cpp_lib_memory_resource should be defined in c++23" -# endif -# if __cpp_lib_memory_resource != 201603L -# error "__cpp_lib_memory_resource should have the value 201603L in c++23" -# endif -# else -# ifdef __cpp_lib_memory_resource -# error "__cpp_lib_memory_resource should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_PMR' is not met!" -# endif -# endif - -# ifndef __cpp_lib_modules -# error "__cpp_lib_modules should be defined in c++23" -# endif -# if __cpp_lib_modules != 202207L -# error "__cpp_lib_modules should have the value 202207L in c++23" -# endif - -# ifndef __cpp_lib_move_iterator_concept -# error "__cpp_lib_move_iterator_concept should be defined in c++23" -# endif -# if __cpp_lib_move_iterator_concept != 202207L -# error "__cpp_lib_move_iterator_concept should have the value 202207L in c++23" -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_move_only_function -# error "__cpp_lib_move_only_function should be defined in c++23" -# endif -# if __cpp_lib_move_only_function != 202110L -# error "__cpp_lib_move_only_function should have the value 202110L in c++23" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_move_only_function -# error "__cpp_lib_move_only_function should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# ifndef __cpp_lib_node_extract -# error "__cpp_lib_node_extract should be defined in c++23" -# endif -# if __cpp_lib_node_extract != 201606L -# error "__cpp_lib_node_extract should have the value 201606L in c++23" -# endif - -# ifndef __cpp_lib_nonmember_container_access -# error "__cpp_lib_nonmember_container_access should be defined in c++23" -# endif -# if __cpp_lib_nonmember_container_access != 201411L -# error "__cpp_lib_nonmember_container_access should have the value 201411L in c++23" -# endif - -# ifndef __cpp_lib_not_fn -# error "__cpp_lib_not_fn should be defined in c++23" -# endif -# if __cpp_lib_not_fn != 201603L -# error "__cpp_lib_not_fn should have the value 201603L in c++23" -# endif - -# ifndef __cpp_lib_null_iterators -# error "__cpp_lib_null_iterators should be defined in c++23" -# endif -# if __cpp_lib_null_iterators != 201304L -# error "__cpp_lib_null_iterators should have the value 201304L in c++23" -# endif - -# ifndef __cpp_lib_optional -# error "__cpp_lib_optional should be defined in c++23" -# endif -# if __cpp_lib_optional != 202110L -# error "__cpp_lib_optional should have the value 202110L in c++23" -# endif - -# ifdef __cpp_lib_optional_range_support -# error "__cpp_lib_optional_range_support should not be defined before c++26" -# endif - -# ifndef __cpp_lib_out_ptr -# error "__cpp_lib_out_ptr should be defined in c++23" -# endif -# if __cpp_lib_out_ptr != 202106L -# error "__cpp_lib_out_ptr should have the value 202106L in c++23" -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_parallel_algorithm -# error "__cpp_lib_parallel_algorithm should be defined in c++23" -# endif -# if __cpp_lib_parallel_algorithm != 201603L -# error "__cpp_lib_parallel_algorithm should have the value 201603L in c++23" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_parallel_algorithm -# error "__cpp_lib_parallel_algorithm should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# ifdef __cpp_lib_philox_engine -# error "__cpp_lib_philox_engine should not be defined before c++26" -# endif - -# if !defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_PMR -# ifndef __cpp_lib_polymorphic_allocator -# error "__cpp_lib_polymorphic_allocator should be defined in c++23" -# endif -# if __cpp_lib_polymorphic_allocator != 201902L -# error "__cpp_lib_polymorphic_allocator should have the value 201902L in c++23" -# endif -# else -# ifdef __cpp_lib_polymorphic_allocator -# error "__cpp_lib_polymorphic_allocator should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_PMR' is not met!" -# endif -# endif - -# if !defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_TO_CHARS_FLOATING_POINT -# ifndef __cpp_lib_print -# error "__cpp_lib_print should be defined in c++23" -# endif -# if __cpp_lib_print != 202207L -# error "__cpp_lib_print should have the value 202207L in c++23" -# endif -# else -# ifdef __cpp_lib_print -# error "__cpp_lib_print should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_TO_CHARS_FLOATING_POINT' is not met!" -# endif -# endif - -# if !defined(_LIBCPP_VERSION) || _LIBCPP_HAS_LOCALIZATION -# ifndef __cpp_lib_quoted_string_io -# error "__cpp_lib_quoted_string_io should be defined in c++23" -# endif -# if __cpp_lib_quoted_string_io != 201304L -# error "__cpp_lib_quoted_string_io should have the value 201304L in c++23" -# endif -# else -# ifdef __cpp_lib_quoted_string_io -# error "__cpp_lib_quoted_string_io should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_HAS_LOCALIZATION' is not met!" -# endif -# endif - -# ifndef __cpp_lib_ranges -# error "__cpp_lib_ranges should be defined in c++23" -# endif -# if __cpp_lib_ranges != 202406L -# error "__cpp_lib_ranges should have the value 202406L in c++23" -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_ranges_as_const -# error "__cpp_lib_ranges_as_const should be defined in c++23" -# endif -# if __cpp_lib_ranges_as_const != 202207L -# error "__cpp_lib_ranges_as_const should have the value 202207L in c++23" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_ranges_as_const -# error "__cpp_lib_ranges_as_const should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# ifndef __cpp_lib_ranges_as_rvalue -# error "__cpp_lib_ranges_as_rvalue should be defined in c++23" -# endif -# if __cpp_lib_ranges_as_rvalue != 202207L -# error "__cpp_lib_ranges_as_rvalue should have the value 202207L in c++23" -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_ranges_chunk -# error "__cpp_lib_ranges_chunk should be defined in c++23" -# endif -# if __cpp_lib_ranges_chunk != 202202L -# error "__cpp_lib_ranges_chunk should have the value 202202L in c++23" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_ranges_chunk -# error "__cpp_lib_ranges_chunk should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# ifndef __cpp_lib_ranges_chunk_by -# error "__cpp_lib_ranges_chunk_by should be defined in c++23" -# endif -# if __cpp_lib_ranges_chunk_by != 202202L -# error "__cpp_lib_ranges_chunk_by should have the value 202202L in c++23" -# endif - -# ifdef __cpp_lib_ranges_concat -# error "__cpp_lib_ranges_concat should not be defined before c++26" -# endif - -# ifndef __cpp_lib_ranges_contains -# error "__cpp_lib_ranges_contains should be defined in c++23" -# endif -# if __cpp_lib_ranges_contains != 202207L -# error "__cpp_lib_ranges_contains should have the value 202207L in c++23" -# endif - -# ifndef __cpp_lib_ranges_find_last -# error "__cpp_lib_ranges_find_last should be defined in c++23" -# endif -# if __cpp_lib_ranges_find_last != 202207L -# error "__cpp_lib_ranges_find_last should have the value 202207L in c++23" -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_ranges_iota -# error "__cpp_lib_ranges_iota should be defined in c++23" -# endif -# if __cpp_lib_ranges_iota != 202202L -# error "__cpp_lib_ranges_iota should have the value 202202L in c++23" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_ranges_iota -# error "__cpp_lib_ranges_iota should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_ranges_join_with -# error "__cpp_lib_ranges_join_with should be defined in c++23" -# endif -# if __cpp_lib_ranges_join_with != 202202L -# error "__cpp_lib_ranges_join_with should have the value 202202L in c++23" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_ranges_join_with -# error "__cpp_lib_ranges_join_with should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# ifndef __cpp_lib_ranges_repeat -# error "__cpp_lib_ranges_repeat should be defined in c++23" -# endif -# if __cpp_lib_ranges_repeat != 202207L -# error "__cpp_lib_ranges_repeat should have the value 202207L in c++23" -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_ranges_slide -# error "__cpp_lib_ranges_slide should be defined in c++23" -# endif -# if __cpp_lib_ranges_slide != 202202L -# error "__cpp_lib_ranges_slide should have the value 202202L in c++23" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_ranges_slide -# error "__cpp_lib_ranges_slide should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# ifndef __cpp_lib_ranges_starts_ends_with -# error "__cpp_lib_ranges_starts_ends_with should be defined in c++23" -# endif -# if __cpp_lib_ranges_starts_ends_with != 202106L -# error "__cpp_lib_ranges_starts_ends_with should have the value 202106L in c++23" -# endif - -# ifndef __cpp_lib_ranges_to_container -# error "__cpp_lib_ranges_to_container should be defined in c++23" -# endif -# if __cpp_lib_ranges_to_container != 202202L -# error "__cpp_lib_ranges_to_container should have the value 202202L in c++23" -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_ranges_zip -# error "__cpp_lib_ranges_zip should be defined in c++23" -# endif -# if __cpp_lib_ranges_zip != 202110L -# error "__cpp_lib_ranges_zip should have the value 202110L in c++23" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_ranges_zip -# error "__cpp_lib_ranges_zip should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# ifdef __cpp_lib_ratio -# error "__cpp_lib_ratio should not be defined before c++26" -# endif - -# ifndef __cpp_lib_raw_memory_algorithms -# error "__cpp_lib_raw_memory_algorithms should be defined in c++23" -# endif -# if __cpp_lib_raw_memory_algorithms != 201606L -# error "__cpp_lib_raw_memory_algorithms should have the value 201606L in c++23" -# endif - -# ifdef __cpp_lib_rcu -# error "__cpp_lib_rcu should not be defined before c++26" -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_reference_from_temporary -# error "__cpp_lib_reference_from_temporary should be defined in c++23" -# endif -# if __cpp_lib_reference_from_temporary != 202202L -# error "__cpp_lib_reference_from_temporary should have the value 202202L in c++23" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_reference_from_temporary -# error "__cpp_lib_reference_from_temporary should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# ifdef __cpp_lib_reference_wrapper -# error "__cpp_lib_reference_wrapper should not be defined before c++26" -# endif - -# ifndef __cpp_lib_remove_cvref -# error "__cpp_lib_remove_cvref should be defined in c++23" -# endif -# if __cpp_lib_remove_cvref != 201711L -# error "__cpp_lib_remove_cvref should have the value 201711L in c++23" -# endif - -# ifndef __cpp_lib_result_of_sfinae -# error "__cpp_lib_result_of_sfinae should be defined in c++23" -# endif -# if __cpp_lib_result_of_sfinae != 201210L -# error "__cpp_lib_result_of_sfinae should have the value 201210L in c++23" -# endif - -# ifndef __cpp_lib_robust_nonmodifying_seq_ops -# error "__cpp_lib_robust_nonmodifying_seq_ops should be defined in c++23" -# endif -# if __cpp_lib_robust_nonmodifying_seq_ops != 201304L -# error "__cpp_lib_robust_nonmodifying_seq_ops should have the value 201304L in c++23" -# endif - -# ifndef __cpp_lib_sample -# error "__cpp_lib_sample should be defined in c++23" -# endif -# if __cpp_lib_sample != 201603L -# error "__cpp_lib_sample should have the value 201603L in c++23" -# endif - -# ifdef __cpp_lib_saturation_arithmetic -# error "__cpp_lib_saturation_arithmetic should not be defined before c++26" -# endif - -# if !defined(_LIBCPP_VERSION) || _LIBCPP_HAS_THREADS -# ifndef __cpp_lib_scoped_lock -# error "__cpp_lib_scoped_lock should be defined in c++23" -# endif -# if __cpp_lib_scoped_lock != 201703L -# error "__cpp_lib_scoped_lock should have the value 201703L in c++23" -# endif -# else -# ifdef __cpp_lib_scoped_lock -# error "__cpp_lib_scoped_lock should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_HAS_THREADS' is not met!" -# endif -# endif - -# if !defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC) -# ifndef __cpp_lib_semaphore -# error "__cpp_lib_semaphore should be defined in c++23" -# endif -# if __cpp_lib_semaphore != 201907L -# error "__cpp_lib_semaphore should have the value 201907L in c++23" -# endif -# else -# ifdef __cpp_lib_semaphore -# error "__cpp_lib_semaphore should not be defined when the requirement '!defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC)' is not met!" -# endif -# endif - -# ifdef __cpp_lib_senders -# error "__cpp_lib_senders should not be defined before c++26" -# endif - -# if _LIBCPP_HAS_THREADS -# ifndef __cpp_lib_shared_mutex -# error "__cpp_lib_shared_mutex should be defined in c++23" -# endif -# if __cpp_lib_shared_mutex != 201505L -# error "__cpp_lib_shared_mutex should have the value 201505L in c++23" -# endif -# else -# ifdef __cpp_lib_shared_mutex -# error "__cpp_lib_shared_mutex should not be defined when the requirement '_LIBCPP_HAS_THREADS' is not met!" -# endif -# endif - -# ifndef __cpp_lib_shared_ptr_arrays -# error "__cpp_lib_shared_ptr_arrays should be defined in c++23" -# endif -# if __cpp_lib_shared_ptr_arrays != 201707L -# error "__cpp_lib_shared_ptr_arrays should have the value 201707L in c++23" -# endif - -# ifndef __cpp_lib_shared_ptr_weak_type -# error "__cpp_lib_shared_ptr_weak_type should be defined in c++23" -# endif -# if __cpp_lib_shared_ptr_weak_type != 201606L -# error "__cpp_lib_shared_ptr_weak_type should have the value 201606L in c++23" -# endif - -# if _LIBCPP_HAS_THREADS -# ifndef __cpp_lib_shared_timed_mutex -# error "__cpp_lib_shared_timed_mutex should be defined in c++23" -# endif -# if __cpp_lib_shared_timed_mutex != 201402L -# error "__cpp_lib_shared_timed_mutex should have the value 201402L in c++23" -# endif -# else -# ifdef __cpp_lib_shared_timed_mutex -# error "__cpp_lib_shared_timed_mutex should not be defined when the requirement '_LIBCPP_HAS_THREADS' is not met!" -# endif -# endif - -# ifndef __cpp_lib_shift -# error "__cpp_lib_shift should be defined in c++23" -# endif -# if __cpp_lib_shift != 201806L -# error "__cpp_lib_shift should have the value 201806L in c++23" -# endif - -# ifndef __cpp_lib_smart_ptr_for_overwrite -# error "__cpp_lib_smart_ptr_for_overwrite should be defined in c++23" -# endif -# if __cpp_lib_smart_ptr_for_overwrite != 202002L -# error "__cpp_lib_smart_ptr_for_overwrite should have the value 202002L in c++23" -# endif - -# ifdef __cpp_lib_smart_ptr_owner_equality -# error "__cpp_lib_smart_ptr_owner_equality should not be defined before c++26" -# endif - -# ifndef __cpp_lib_source_location -# error "__cpp_lib_source_location should be defined in c++23" -# endif -# if __cpp_lib_source_location != 201907L -# error "__cpp_lib_source_location should have the value 201907L in c++23" -# endif - -# ifndef __cpp_lib_span -# error "__cpp_lib_span should be defined in c++23" -# endif -# if __cpp_lib_span != 202002L -# error "__cpp_lib_span should have the value 202002L in c++23" -# endif - -# ifdef __cpp_lib_span_at -# error "__cpp_lib_span_at should not be defined before c++26" -# endif - -# ifdef __cpp_lib_span_initializer_list -# error "__cpp_lib_span_initializer_list should not be defined before c++26" -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_spanstream -# error "__cpp_lib_spanstream should be defined in c++23" -# endif -# if __cpp_lib_spanstream != 202106L -# error "__cpp_lib_spanstream should have the value 202106L in c++23" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_spanstream -# error "__cpp_lib_spanstream should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# ifndef __cpp_lib_ssize -# error "__cpp_lib_ssize should be defined in c++23" -# endif -# if __cpp_lib_ssize != 201902L -# error "__cpp_lib_ssize should have the value 201902L in c++23" -# endif - -# ifdef __cpp_lib_sstream_from_string_view -# error "__cpp_lib_sstream_from_string_view should not be defined before c++26" -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_stacktrace -# error "__cpp_lib_stacktrace should be defined in c++23" -# endif -# if __cpp_lib_stacktrace != 202011L -# error "__cpp_lib_stacktrace should have the value 202011L in c++23" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_stacktrace -# error "__cpp_lib_stacktrace should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# ifndef __cpp_lib_starts_ends_with -# error "__cpp_lib_starts_ends_with should be defined in c++23" -# endif -# if __cpp_lib_starts_ends_with != 201711L -# error "__cpp_lib_starts_ends_with should have the value 201711L in c++23" -# endif - -# ifndef __cpp_lib_stdatomic_h -# error "__cpp_lib_stdatomic_h should be defined in c++23" -# endif -# if __cpp_lib_stdatomic_h != 202011L -# error "__cpp_lib_stdatomic_h should have the value 202011L in c++23" -# endif - -# ifndef __cpp_lib_string_contains -# error "__cpp_lib_string_contains should be defined in c++23" -# endif -# if __cpp_lib_string_contains != 202011L -# error "__cpp_lib_string_contains should have the value 202011L in c++23" -# endif - -# ifndef __cpp_lib_string_resize_and_overwrite -# error "__cpp_lib_string_resize_and_overwrite should be defined in c++23" -# endif -# if __cpp_lib_string_resize_and_overwrite != 202110L -# error "__cpp_lib_string_resize_and_overwrite should have the value 202110L in c++23" -# endif - -# ifndef __cpp_lib_string_udls -# error "__cpp_lib_string_udls should be defined in c++23" -# endif -# if __cpp_lib_string_udls != 201304L -# error "__cpp_lib_string_udls should have the value 201304L in c++23" -# endif - -# ifndef __cpp_lib_string_view -# error "__cpp_lib_string_view should be defined in c++23" -# endif -# if __cpp_lib_string_view != 201803L -# error "__cpp_lib_string_view should have the value 201803L in c++23" -# endif - -# ifdef __cpp_lib_submdspan -# error "__cpp_lib_submdspan should not be defined before c++26" -# endif - -# if !defined(_LIBCPP_VERSION) || _LIBCPP_HAS_EXPERIMENTAL_SYNCSTREAM -# ifndef __cpp_lib_syncbuf -# error "__cpp_lib_syncbuf should be defined in c++23" -# endif -# if __cpp_lib_syncbuf != 201803L -# error "__cpp_lib_syncbuf should have the value 201803L in c++23" -# endif -# else -# ifdef __cpp_lib_syncbuf -# error "__cpp_lib_syncbuf should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_HAS_EXPERIMENTAL_SYNCSTREAM' is not met!" -# endif -# endif - -# ifdef __cpp_lib_text_encoding -# error "__cpp_lib_text_encoding should not be defined before c++26" -# endif - -# ifndef __cpp_lib_three_way_comparison -# error "__cpp_lib_three_way_comparison should be defined in c++23" -# endif -# if __cpp_lib_three_way_comparison != 201907L -# error "__cpp_lib_three_way_comparison should have the value 201907L in c++23" -# endif - -# ifndef __cpp_lib_to_address -# error "__cpp_lib_to_address should be defined in c++23" -# endif -# if __cpp_lib_to_address != 201711L -# error "__cpp_lib_to_address should have the value 201711L in c++23" -# endif - -# ifndef __cpp_lib_to_array -# error "__cpp_lib_to_array should be defined in c++23" -# endif -# if __cpp_lib_to_array != 201907L -# error "__cpp_lib_to_array should have the value 201907L in c++23" -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_to_chars -# error "__cpp_lib_to_chars should be defined in c++23" -# endif -# if __cpp_lib_to_chars != 201611L -# error "__cpp_lib_to_chars should have the value 201611L in c++23" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_to_chars -# error "__cpp_lib_to_chars should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# ifdef __cpp_lib_to_string -# error "__cpp_lib_to_string should not be defined before c++26" -# endif - -# ifndef __cpp_lib_to_underlying -# error "__cpp_lib_to_underlying should be defined in c++23" -# endif -# if __cpp_lib_to_underlying != 202102L -# error "__cpp_lib_to_underlying should have the value 202102L in c++23" -# endif - -# ifndef __cpp_lib_transformation_trait_aliases -# error "__cpp_lib_transformation_trait_aliases should be defined in c++23" -# endif -# if __cpp_lib_transformation_trait_aliases != 201304L -# error "__cpp_lib_transformation_trait_aliases should have the value 201304L in c++23" -# endif - -# ifndef __cpp_lib_transparent_operators -# error "__cpp_lib_transparent_operators should be defined in c++23" -# endif -# if __cpp_lib_transparent_operators != 201510L -# error "__cpp_lib_transparent_operators should have the value 201510L in c++23" -# endif - -# ifndef __cpp_lib_tuple_element_t -# error "__cpp_lib_tuple_element_t should be defined in c++23" -# endif -# if __cpp_lib_tuple_element_t != 201402L -# error "__cpp_lib_tuple_element_t should have the value 201402L in c++23" -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_tuple_like -# error "__cpp_lib_tuple_like should be defined in c++23" -# endif -# if __cpp_lib_tuple_like != 202207L -# error "__cpp_lib_tuple_like should have the value 202207L in c++23" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_tuple_like -# error "__cpp_lib_tuple_like should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# ifndef __cpp_lib_tuples_by_type -# error "__cpp_lib_tuples_by_type should be defined in c++23" -# endif -# if __cpp_lib_tuples_by_type != 201304L -# error "__cpp_lib_tuples_by_type should have the value 201304L in c++23" -# endif - -# ifndef __cpp_lib_type_identity -# error "__cpp_lib_type_identity should be defined in c++23" -# endif -# if __cpp_lib_type_identity != 201806L -# error "__cpp_lib_type_identity should have the value 201806L in c++23" -# endif - -# ifndef __cpp_lib_type_trait_variable_templates -# error "__cpp_lib_type_trait_variable_templates should be defined in c++23" -# endif -# if __cpp_lib_type_trait_variable_templates != 201510L -# error "__cpp_lib_type_trait_variable_templates should have the value 201510L in c++23" -# endif - -# ifndef __cpp_lib_uncaught_exceptions -# error "__cpp_lib_uncaught_exceptions should be defined in c++23" -# endif -# if __cpp_lib_uncaught_exceptions != 201411L -# error "__cpp_lib_uncaught_exceptions should have the value 201411L in c++23" -# endif - -# ifndef __cpp_lib_unordered_map_try_emplace -# error "__cpp_lib_unordered_map_try_emplace should be defined in c++23" -# endif -# if __cpp_lib_unordered_map_try_emplace != 201411L -# error "__cpp_lib_unordered_map_try_emplace should have the value 201411L in c++23" -# endif - -# ifndef __cpp_lib_unreachable -# error "__cpp_lib_unreachable should be defined in c++23" -# endif -# if __cpp_lib_unreachable != 202202L -# error "__cpp_lib_unreachable should have the value 202202L in c++23" -# endif - -# ifndef __cpp_lib_unwrap_ref -# error "__cpp_lib_unwrap_ref should be defined in c++23" -# endif -# if __cpp_lib_unwrap_ref != 201811L -# error "__cpp_lib_unwrap_ref should have the value 201811L in c++23" -# endif - -# ifndef __cpp_lib_variant -# error "__cpp_lib_variant should be defined in c++23" -# endif -# if __cpp_lib_variant != 202106L -# error "__cpp_lib_variant should have the value 202106L in c++23" -# endif - -# ifndef __cpp_lib_void_t -# error "__cpp_lib_void_t should be defined in c++23" -# endif -# if __cpp_lib_void_t != 201411L -# error "__cpp_lib_void_t should have the value 201411L in c++23" -# endif - -#elif TEST_STD_VER > 23 - -# ifndef __cpp_lib_adaptor_iterator_pair_constructor -# error "__cpp_lib_adaptor_iterator_pair_constructor should be defined in c++26" -# endif -# if __cpp_lib_adaptor_iterator_pair_constructor != 202106L -# error "__cpp_lib_adaptor_iterator_pair_constructor should have the value 202106L in c++26" -# endif - -# ifndef __cpp_lib_addressof_constexpr -# error "__cpp_lib_addressof_constexpr should be defined in c++26" -# endif -# if __cpp_lib_addressof_constexpr != 201603L -# error "__cpp_lib_addressof_constexpr should have the value 201603L in c++26" -# endif - -# ifndef __cpp_lib_allocate_at_least -# error "__cpp_lib_allocate_at_least should be defined in c++26" -# endif -# if __cpp_lib_allocate_at_least != 202302L -# error "__cpp_lib_allocate_at_least should have the value 202302L in c++26" -# endif - -# ifndef __cpp_lib_allocator_traits_is_always_equal -# error "__cpp_lib_allocator_traits_is_always_equal should be defined in c++26" -# endif -# if __cpp_lib_allocator_traits_is_always_equal != 201411L -# error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++26" -# endif - -# ifndef __cpp_lib_any -# error "__cpp_lib_any should be defined in c++26" -# endif -# if __cpp_lib_any != 201606L -# error "__cpp_lib_any should have the value 201606L in c++26" -# endif - -# ifndef __cpp_lib_apply -# error "__cpp_lib_apply should be defined in c++26" -# endif -# if __cpp_lib_apply != 201603L -# error "__cpp_lib_apply should have the value 201603L in c++26" -# endif - -# ifndef __cpp_lib_array_constexpr -# error "__cpp_lib_array_constexpr should be defined in c++26" -# endif -# if __cpp_lib_array_constexpr != 201811L -# error "__cpp_lib_array_constexpr should have the value 201811L in c++26" -# endif - -# ifndef __cpp_lib_as_const -# error "__cpp_lib_as_const should be defined in c++26" -# endif -# if __cpp_lib_as_const != 201510L -# error "__cpp_lib_as_const should have the value 201510L in c++26" -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_associative_heterogeneous_erasure -# error "__cpp_lib_associative_heterogeneous_erasure should be defined in c++26" -# endif -# if __cpp_lib_associative_heterogeneous_erasure != 202110L -# error "__cpp_lib_associative_heterogeneous_erasure should have the value 202110L in c++26" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_associative_heterogeneous_erasure -# error "__cpp_lib_associative_heterogeneous_erasure should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_associative_heterogeneous_insertion -# error "__cpp_lib_associative_heterogeneous_insertion should be defined in c++26" -# endif -# if __cpp_lib_associative_heterogeneous_insertion != 202306L -# error "__cpp_lib_associative_heterogeneous_insertion should have the value 202306L in c++26" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_associative_heterogeneous_insertion -# error "__cpp_lib_associative_heterogeneous_insertion should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# ifndef __cpp_lib_assume_aligned -# error "__cpp_lib_assume_aligned should be defined in c++26" -# endif -# if __cpp_lib_assume_aligned != 201811L -# error "__cpp_lib_assume_aligned should have the value 201811L in c++26" -# endif - -# ifndef __cpp_lib_atomic_flag_test -# error "__cpp_lib_atomic_flag_test should be defined in c++26" -# endif -# if __cpp_lib_atomic_flag_test != 201907L -# error "__cpp_lib_atomic_flag_test should have the value 201907L in c++26" -# endif - -# ifndef __cpp_lib_atomic_float -# error "__cpp_lib_atomic_float should be defined in c++26" -# endif -# if __cpp_lib_atomic_float != 201711L -# error "__cpp_lib_atomic_float should have the value 201711L in c++26" -# endif - -# ifndef __cpp_lib_atomic_is_always_lock_free -# error "__cpp_lib_atomic_is_always_lock_free should be defined in c++26" -# endif -# if __cpp_lib_atomic_is_always_lock_free != 201603L -# error "__cpp_lib_atomic_is_always_lock_free should have the value 201603L in c++26" -# endif - -# ifndef __cpp_lib_atomic_lock_free_type_aliases -# error "__cpp_lib_atomic_lock_free_type_aliases should be defined in c++26" -# endif -# if __cpp_lib_atomic_lock_free_type_aliases != 201907L -# error "__cpp_lib_atomic_lock_free_type_aliases should have the value 201907L in c++26" -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_atomic_min_max -# error "__cpp_lib_atomic_min_max should be defined in c++26" -# endif -# if __cpp_lib_atomic_min_max != 202403L -# error "__cpp_lib_atomic_min_max should have the value 202403L in c++26" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_atomic_min_max -# error "__cpp_lib_atomic_min_max should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# ifndef __cpp_lib_atomic_ref -# error "__cpp_lib_atomic_ref should be defined in c++26" -# endif -# if __cpp_lib_atomic_ref != 201806L -# error "__cpp_lib_atomic_ref should have the value 201806L in c++26" -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_atomic_shared_ptr -# error "__cpp_lib_atomic_shared_ptr should be defined in c++26" -# endif -# if __cpp_lib_atomic_shared_ptr != 201711L -# error "__cpp_lib_atomic_shared_ptr should have the value 201711L in c++26" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_atomic_shared_ptr -# error "__cpp_lib_atomic_shared_ptr should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# ifndef __cpp_lib_atomic_value_initialization -# error "__cpp_lib_atomic_value_initialization should be defined in c++26" -# endif -# if __cpp_lib_atomic_value_initialization != 201911L -# error "__cpp_lib_atomic_value_initialization should have the value 201911L in c++26" -# endif - -# if !defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_SYNC -# ifndef __cpp_lib_atomic_wait -# error "__cpp_lib_atomic_wait should be defined in c++26" -# endif -# if __cpp_lib_atomic_wait != 201907L -# error "__cpp_lib_atomic_wait should have the value 201907L in c++26" -# endif -# else -# ifdef __cpp_lib_atomic_wait -# error "__cpp_lib_atomic_wait should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_SYNC' is not met!" -# endif -# endif - -# if !defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC) -# ifndef __cpp_lib_barrier -# error "__cpp_lib_barrier should be defined in c++26" -# endif -# if __cpp_lib_barrier != 201907L -# error "__cpp_lib_barrier should have the value 201907L in c++26" -# endif -# else -# ifdef __cpp_lib_barrier -# error "__cpp_lib_barrier should not be defined when the requirement '!defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC)' is not met!" -# endif -# endif - -# ifndef __cpp_lib_bind_back -# error "__cpp_lib_bind_back should be defined in c++26" -# endif -# if __cpp_lib_bind_back != 202202L -# error "__cpp_lib_bind_back should have the value 202202L in c++26" -# endif - -# ifndef __cpp_lib_bind_front -# error "__cpp_lib_bind_front should be defined in c++26" -# endif -# if __cpp_lib_bind_front != 202306L -# error "__cpp_lib_bind_front should have the value 202306L in c++26" -# endif - -# ifndef __cpp_lib_bit_cast -# error "__cpp_lib_bit_cast should be defined in c++26" -# endif -# if __cpp_lib_bit_cast != 201806L -# error "__cpp_lib_bit_cast should have the value 201806L in c++26" -# endif - -# ifndef __cpp_lib_bitops -# error "__cpp_lib_bitops should be defined in c++26" -# endif -# if __cpp_lib_bitops != 201907L -# error "__cpp_lib_bitops should have the value 201907L in c++26" -# endif - -# ifndef __cpp_lib_bitset -# error "__cpp_lib_bitset should be defined in c++26" -# endif -# if __cpp_lib_bitset != 202306L -# error "__cpp_lib_bitset should have the value 202306L in c++26" -# endif - -# ifndef __cpp_lib_bool_constant -# error "__cpp_lib_bool_constant should be defined in c++26" -# endif -# if __cpp_lib_bool_constant != 201505L -# error "__cpp_lib_bool_constant should have the value 201505L in c++26" -# endif - -# ifndef __cpp_lib_bounded_array_traits -# error "__cpp_lib_bounded_array_traits should be defined in c++26" -# endif -# if __cpp_lib_bounded_array_traits != 201902L -# error "__cpp_lib_bounded_array_traits should have the value 201902L in c++26" -# endif - -# ifndef __cpp_lib_boyer_moore_searcher -# error "__cpp_lib_boyer_moore_searcher should be defined in c++26" -# endif -# if __cpp_lib_boyer_moore_searcher != 201603L -# error "__cpp_lib_boyer_moore_searcher should have the value 201603L in c++26" -# endif - -# ifndef __cpp_lib_byte -# error "__cpp_lib_byte should be defined in c++26" -# endif -# if __cpp_lib_byte != 201603L -# error "__cpp_lib_byte should have the value 201603L in c++26" -# endif - -# ifndef __cpp_lib_byteswap -# error "__cpp_lib_byteswap should be defined in c++26" -# endif -# if __cpp_lib_byteswap != 202110L -# error "__cpp_lib_byteswap should have the value 202110L in c++26" -# endif - -# if defined(__cpp_char8_t) -# ifndef __cpp_lib_char8_t -# error "__cpp_lib_char8_t should be defined in c++26" -# endif -# if __cpp_lib_char8_t != 201907L -# error "__cpp_lib_char8_t should have the value 201907L in c++26" -# endif -# else -# ifdef __cpp_lib_char8_t -# error "__cpp_lib_char8_t should not be defined when the requirement 'defined(__cpp_char8_t)' is not met!" -# endif -# endif - -# ifndef __cpp_lib_chrono -# error "__cpp_lib_chrono should be defined in c++26" -# endif -# if __cpp_lib_chrono != 201611L -# error "__cpp_lib_chrono should have the value 201611L in c++26" -# endif - -# ifndef __cpp_lib_chrono_udls -# error "__cpp_lib_chrono_udls should be defined in c++26" -# endif -# if __cpp_lib_chrono_udls != 201304L -# error "__cpp_lib_chrono_udls should have the value 201304L in c++26" -# endif - -# ifndef __cpp_lib_clamp -# error "__cpp_lib_clamp should be defined in c++26" -# endif -# if __cpp_lib_clamp != 201603L -# error "__cpp_lib_clamp should have the value 201603L in c++26" -# endif - -# ifndef __cpp_lib_complex_udls -# error "__cpp_lib_complex_udls should be defined in c++26" -# endif -# if __cpp_lib_complex_udls != 201309L -# error "__cpp_lib_complex_udls should have the value 201309L in c++26" -# endif - -# ifndef __cpp_lib_concepts -# error "__cpp_lib_concepts should be defined in c++26" -# endif -# if __cpp_lib_concepts != 202002L -# error "__cpp_lib_concepts should have the value 202002L in c++26" -# endif - -# ifndef __cpp_lib_constexpr_algorithms -# error "__cpp_lib_constexpr_algorithms should be defined in c++26" -# endif -# if __cpp_lib_constexpr_algorithms != 201806L -# error "__cpp_lib_constexpr_algorithms should have the value 201806L in c++26" -# endif - -# ifndef __cpp_lib_constexpr_bitset -# error "__cpp_lib_constexpr_bitset should be defined in c++26" -# endif -# if __cpp_lib_constexpr_bitset != 202207L -# error "__cpp_lib_constexpr_bitset should have the value 202207L in c++26" -# endif - -# ifndef __cpp_lib_constexpr_charconv -# error "__cpp_lib_constexpr_charconv should be defined in c++26" -# endif -# if __cpp_lib_constexpr_charconv != 202207L -# error "__cpp_lib_constexpr_charconv should have the value 202207L in c++26" -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_constexpr_cmath -# error "__cpp_lib_constexpr_cmath should be defined in c++26" -# endif -# if __cpp_lib_constexpr_cmath != 202202L -# error "__cpp_lib_constexpr_cmath should have the value 202202L in c++26" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_constexpr_cmath -# error "__cpp_lib_constexpr_cmath should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# ifndef __cpp_lib_constexpr_complex -# error "__cpp_lib_constexpr_complex should be defined in c++26" -# endif -# if __cpp_lib_constexpr_complex != 201711L -# error "__cpp_lib_constexpr_complex should have the value 201711L in c++26" -# endif - -# ifndef __cpp_lib_constexpr_dynamic_alloc -# error "__cpp_lib_constexpr_dynamic_alloc should be defined in c++26" -# endif -# if __cpp_lib_constexpr_dynamic_alloc != 201907L -# error "__cpp_lib_constexpr_dynamic_alloc should have the value 201907L in c++26" -# endif - -# ifndef __cpp_lib_constexpr_forward_list -# error "__cpp_lib_constexpr_forward_list should be defined in c++26" -# endif -# if __cpp_lib_constexpr_forward_list != 202502L -# error "__cpp_lib_constexpr_forward_list should have the value 202502L in c++26" -# endif - -# ifndef __cpp_lib_constexpr_functional -# error "__cpp_lib_constexpr_functional should be defined in c++26" -# endif -# if __cpp_lib_constexpr_functional != 201907L -# error "__cpp_lib_constexpr_functional should have the value 201907L in c++26" -# endif - -# ifndef __cpp_lib_constexpr_iterator -# error "__cpp_lib_constexpr_iterator should be defined in c++26" -# endif -# if __cpp_lib_constexpr_iterator != 201811L -# error "__cpp_lib_constexpr_iterator should have the value 201811L in c++26" -# endif - -# ifndef __cpp_lib_constexpr_memory -# error "__cpp_lib_constexpr_memory should be defined in c++26" -# endif -# if __cpp_lib_constexpr_memory != 202202L -# error "__cpp_lib_constexpr_memory should have the value 202202L in c++26" -# endif - -# if !defined(_LIBCPP_ABI_VCRUNTIME) -# ifndef __cpp_lib_constexpr_new -# error "__cpp_lib_constexpr_new should be defined in c++26" -# endif -# if __cpp_lib_constexpr_new != 202406L -# error "__cpp_lib_constexpr_new should have the value 202406L in c++26" -# endif -# else -# ifdef __cpp_lib_constexpr_new -# error "__cpp_lib_constexpr_new should not be defined when the requirement '!defined(_LIBCPP_ABI_VCRUNTIME)' is not met!" -# endif -# endif - -# ifndef __cpp_lib_constexpr_numeric -# error "__cpp_lib_constexpr_numeric should be defined in c++26" -# endif -# if __cpp_lib_constexpr_numeric != 201911L -# error "__cpp_lib_constexpr_numeric should have the value 201911L in c++26" -# endif - -# ifndef __cpp_lib_constexpr_string -# error "__cpp_lib_constexpr_string should be defined in c++26" -# endif -# if __cpp_lib_constexpr_string != 201907L -# error "__cpp_lib_constexpr_string should have the value 201907L in c++26" -# endif - -# ifndef __cpp_lib_constexpr_string_view -# error "__cpp_lib_constexpr_string_view should be defined in c++26" -# endif -# if __cpp_lib_constexpr_string_view != 201811L -# error "__cpp_lib_constexpr_string_view should have the value 201811L in c++26" -# endif - -# ifndef __cpp_lib_constexpr_tuple -# error "__cpp_lib_constexpr_tuple should be defined in c++26" -# endif -# if __cpp_lib_constexpr_tuple != 201811L -# error "__cpp_lib_constexpr_tuple should have the value 201811L in c++26" -# endif - -# ifndef __cpp_lib_constexpr_typeinfo -# error "__cpp_lib_constexpr_typeinfo should be defined in c++26" -# endif -# if __cpp_lib_constexpr_typeinfo != 202106L -# error "__cpp_lib_constexpr_typeinfo should have the value 202106L in c++26" -# endif - -# ifndef __cpp_lib_constexpr_utility -# error "__cpp_lib_constexpr_utility should be defined in c++26" -# endif -# if __cpp_lib_constexpr_utility != 201811L -# error "__cpp_lib_constexpr_utility should have the value 201811L in c++26" -# endif - -# ifndef __cpp_lib_constexpr_vector -# error "__cpp_lib_constexpr_vector should be defined in c++26" -# endif -# if __cpp_lib_constexpr_vector != 201907L -# error "__cpp_lib_constexpr_vector should have the value 201907L in c++26" -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_constrained_equality -# error "__cpp_lib_constrained_equality should be defined in c++26" -# endif -# if __cpp_lib_constrained_equality != 202403L -# error "__cpp_lib_constrained_equality should have the value 202403L in c++26" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_constrained_equality -# error "__cpp_lib_constrained_equality should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# ifndef __cpp_lib_containers_ranges -# error "__cpp_lib_containers_ranges should be defined in c++26" -# endif -# if __cpp_lib_containers_ranges != 202202L -# error "__cpp_lib_containers_ranges should have the value 202202L in c++26" -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_copyable_function -# error "__cpp_lib_copyable_function should be defined in c++26" -# endif -# if __cpp_lib_copyable_function != 202306L -# error "__cpp_lib_copyable_function should have the value 202306L in c++26" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_copyable_function -# error "__cpp_lib_copyable_function should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# ifndef __cpp_lib_coroutine -# error "__cpp_lib_coroutine should be defined in c++26" -# endif -# if __cpp_lib_coroutine != 201902L -# error "__cpp_lib_coroutine should have the value 201902L in c++26" -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_debugging -# error "__cpp_lib_debugging should be defined in c++26" -# endif -# if __cpp_lib_debugging != 202311L -# error "__cpp_lib_debugging should have the value 202311L in c++26" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_debugging -# error "__cpp_lib_debugging should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_default_template_type_for_algorithm_values -# error "__cpp_lib_default_template_type_for_algorithm_values should be defined in c++26" -# endif -# if __cpp_lib_default_template_type_for_algorithm_values != 202403L -# error "__cpp_lib_default_template_type_for_algorithm_values should have the value 202403L in c++26" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_default_template_type_for_algorithm_values -# error "__cpp_lib_default_template_type_for_algorithm_values should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# if TEST_STD_VER > 17 && defined(__cpp_impl_destroying_delete) && __cpp_impl_destroying_delete >= 201806L -# ifndef __cpp_lib_destroying_delete -# error "__cpp_lib_destroying_delete should be defined in c++26" -# endif -# if __cpp_lib_destroying_delete != 201806L -# error "__cpp_lib_destroying_delete should have the value 201806L in c++26" -# endif -# else -# ifdef __cpp_lib_destroying_delete -# error "__cpp_lib_destroying_delete should not be defined when the requirement 'TEST_STD_VER > 17 && defined(__cpp_impl_destroying_delete) && __cpp_impl_destroying_delete >= 201806L' is not met!" -# endif -# endif - -# ifndef __cpp_lib_enable_shared_from_this -# error "__cpp_lib_enable_shared_from_this should be defined in c++26" -# endif -# if __cpp_lib_enable_shared_from_this != 201603L -# error "__cpp_lib_enable_shared_from_this should have the value 201603L in c++26" -# endif - -# ifndef __cpp_lib_endian -# error "__cpp_lib_endian should be defined in c++26" -# endif -# if __cpp_lib_endian != 201907L -# error "__cpp_lib_endian should have the value 201907L in c++26" -# endif - -# ifndef __cpp_lib_erase_if -# error "__cpp_lib_erase_if should be defined in c++26" -# endif -# if __cpp_lib_erase_if != 202002L -# error "__cpp_lib_erase_if should have the value 202002L in c++26" -# endif - -# ifndef __cpp_lib_exchange_function -# error "__cpp_lib_exchange_function should be defined in c++26" -# endif -# if __cpp_lib_exchange_function != 201304L -# error "__cpp_lib_exchange_function should have the value 201304L in c++26" -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_execution -# error "__cpp_lib_execution should be defined in c++26" -# endif -# if __cpp_lib_execution != 201902L -# error "__cpp_lib_execution should have the value 201902L in c++26" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_execution -# error "__cpp_lib_execution should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# ifndef __cpp_lib_expected -# error "__cpp_lib_expected should be defined in c++26" -# endif -# if __cpp_lib_expected != 202211L -# error "__cpp_lib_expected should have the value 202211L in c++26" -# endif - -# if !defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_FILESYSTEM && _LIBCPP_AVAILABILITY_HAS_FILESYSTEM_LIBRARY) -# ifndef __cpp_lib_filesystem -# error "__cpp_lib_filesystem should be defined in c++26" -# endif -# if __cpp_lib_filesystem != 201703L -# error "__cpp_lib_filesystem should have the value 201703L in c++26" -# endif -# else -# ifdef __cpp_lib_filesystem -# error "__cpp_lib_filesystem should not be defined when the requirement '!defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_FILESYSTEM && _LIBCPP_AVAILABILITY_HAS_FILESYSTEM_LIBRARY)' is not met!" -# endif -# endif - -# ifndef __cpp_lib_flat_map -# error "__cpp_lib_flat_map should be defined in c++26" -# endif -# if __cpp_lib_flat_map != 202207L -# error "__cpp_lib_flat_map should have the value 202207L in c++26" -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_flat_set -# error "__cpp_lib_flat_set should be defined in c++26" -# endif -# if __cpp_lib_flat_set != 202207L -# error "__cpp_lib_flat_set should have the value 202207L in c++26" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_flat_set -# error "__cpp_lib_flat_set should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# if !defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_TO_CHARS_FLOATING_POINT -# ifndef __cpp_lib_format -# error "__cpp_lib_format should be defined in c++26" -# endif -# if __cpp_lib_format != 202110L -# error "__cpp_lib_format should have the value 202110L in c++26" -# endif -# else -# ifdef __cpp_lib_format -# error "__cpp_lib_format should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_TO_CHARS_FLOATING_POINT' is not met!" -# endif -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_format_path -# error "__cpp_lib_format_path should be defined in c++26" -# endif -# if __cpp_lib_format_path != 202403L -# error "__cpp_lib_format_path should have the value 202403L in c++26" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_format_path -# error "__cpp_lib_format_path should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# ifndef __cpp_lib_format_ranges -# error "__cpp_lib_format_ranges should be defined in c++26" -# endif -# if __cpp_lib_format_ranges != 202207L -# error "__cpp_lib_format_ranges should have the value 202207L in c++26" -# endif - -# ifndef __cpp_lib_format_uchar -# error "__cpp_lib_format_uchar should be defined in c++26" -# endif -# if __cpp_lib_format_uchar != 202311L -# error "__cpp_lib_format_uchar should have the value 202311L in c++26" -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_formatters -# error "__cpp_lib_formatters should be defined in c++26" -# endif -# if __cpp_lib_formatters != 202302L -# error "__cpp_lib_formatters should have the value 202302L in c++26" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_formatters -# error "__cpp_lib_formatters should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# ifndef __cpp_lib_forward_like -# error "__cpp_lib_forward_like should be defined in c++26" -# endif -# if __cpp_lib_forward_like != 202207L -# error "__cpp_lib_forward_like should have the value 202207L in c++26" -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_freestanding_algorithm -# error "__cpp_lib_freestanding_algorithm should be defined in c++26" -# endif -# if __cpp_lib_freestanding_algorithm != 202311L -# error "__cpp_lib_freestanding_algorithm should have the value 202311L in c++26" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_freestanding_algorithm -# error "__cpp_lib_freestanding_algorithm should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_freestanding_array -# error "__cpp_lib_freestanding_array should be defined in c++26" -# endif -# if __cpp_lib_freestanding_array != 202311L -# error "__cpp_lib_freestanding_array should have the value 202311L in c++26" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_freestanding_array -# error "__cpp_lib_freestanding_array should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_freestanding_cstring -# error "__cpp_lib_freestanding_cstring should be defined in c++26" -# endif -# if __cpp_lib_freestanding_cstring != 202306L -# error "__cpp_lib_freestanding_cstring should have the value 202306L in c++26" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_freestanding_cstring -# error "__cpp_lib_freestanding_cstring should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_freestanding_expected -# error "__cpp_lib_freestanding_expected should be defined in c++26" -# endif -# if __cpp_lib_freestanding_expected != 202311L -# error "__cpp_lib_freestanding_expected should have the value 202311L in c++26" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_freestanding_expected -# error "__cpp_lib_freestanding_expected should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_freestanding_mdspan -# error "__cpp_lib_freestanding_mdspan should be defined in c++26" -# endif -# if __cpp_lib_freestanding_mdspan != 202311L -# error "__cpp_lib_freestanding_mdspan should have the value 202311L in c++26" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_freestanding_mdspan -# error "__cpp_lib_freestanding_mdspan should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_freestanding_optional -# error "__cpp_lib_freestanding_optional should be defined in c++26" -# endif -# if __cpp_lib_freestanding_optional != 202311L -# error "__cpp_lib_freestanding_optional should have the value 202311L in c++26" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_freestanding_optional -# error "__cpp_lib_freestanding_optional should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_freestanding_string_view -# error "__cpp_lib_freestanding_string_view should be defined in c++26" -# endif -# if __cpp_lib_freestanding_string_view != 202311L -# error "__cpp_lib_freestanding_string_view should have the value 202311L in c++26" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_freestanding_string_view -# error "__cpp_lib_freestanding_string_view should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_freestanding_variant -# error "__cpp_lib_freestanding_variant should be defined in c++26" -# endif -# if __cpp_lib_freestanding_variant != 202311L -# error "__cpp_lib_freestanding_variant should have the value 202311L in c++26" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_freestanding_variant -# error "__cpp_lib_freestanding_variant should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# if !defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_FILESYSTEM && _LIBCPP_HAS_LOCALIZATION) -# ifndef __cpp_lib_fstream_native_handle -# error "__cpp_lib_fstream_native_handle should be defined in c++26" -# endif -# if __cpp_lib_fstream_native_handle != 202306L -# error "__cpp_lib_fstream_native_handle should have the value 202306L in c++26" -# endif -# else -# ifdef __cpp_lib_fstream_native_handle -# error "__cpp_lib_fstream_native_handle should not be defined when the requirement '!defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_FILESYSTEM && _LIBCPP_HAS_LOCALIZATION)' is not met!" -# endif -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_function_ref -# error "__cpp_lib_function_ref should be defined in c++26" -# endif -# if __cpp_lib_function_ref != 202306L -# error "__cpp_lib_function_ref should have the value 202306L in c++26" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_function_ref -# error "__cpp_lib_function_ref should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# ifndef __cpp_lib_gcd_lcm -# error "__cpp_lib_gcd_lcm should be defined in c++26" -# endif -# if __cpp_lib_gcd_lcm != 201606L -# error "__cpp_lib_gcd_lcm should have the value 201606L in c++26" -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_generate_random -# error "__cpp_lib_generate_random should be defined in c++26" -# endif -# if __cpp_lib_generate_random != 202403L -# error "__cpp_lib_generate_random should have the value 202403L in c++26" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_generate_random -# error "__cpp_lib_generate_random should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# ifndef __cpp_lib_generic_associative_lookup -# error "__cpp_lib_generic_associative_lookup should be defined in c++26" -# endif -# if __cpp_lib_generic_associative_lookup != 201304L -# error "__cpp_lib_generic_associative_lookup should have the value 201304L in c++26" -# endif - -# ifndef __cpp_lib_generic_unordered_lookup -# error "__cpp_lib_generic_unordered_lookup should be defined in c++26" -# endif -# if __cpp_lib_generic_unordered_lookup != 201811L -# error "__cpp_lib_generic_unordered_lookup should have the value 201811L in c++26" -# endif - -# if !defined(_LIBCPP_VERSION) || (defined(__GCC_DESTRUCTIVE_SIZE) && defined(__GCC_CONSTRUCTIVE_SIZE)) -# ifndef __cpp_lib_hardware_interference_size -# error "__cpp_lib_hardware_interference_size should be defined in c++26" -# endif -# if __cpp_lib_hardware_interference_size != 201703L -# error "__cpp_lib_hardware_interference_size should have the value 201703L in c++26" -# endif -# else -# ifdef __cpp_lib_hardware_interference_size -# error "__cpp_lib_hardware_interference_size should not be defined when the requirement '!defined(_LIBCPP_VERSION) || (defined(__GCC_DESTRUCTIVE_SIZE) && defined(__GCC_CONSTRUCTIVE_SIZE))' is not met!" -# endif -# endif - -# ifndef __cpp_lib_has_unique_object_representations -# error "__cpp_lib_has_unique_object_representations should be defined in c++26" -# endif -# if __cpp_lib_has_unique_object_representations != 201606L -# error "__cpp_lib_has_unique_object_representations should have the value 201606L in c++26" -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_hazard_pointer -# error "__cpp_lib_hazard_pointer should be defined in c++26" -# endif -# if __cpp_lib_hazard_pointer != 202306L -# error "__cpp_lib_hazard_pointer should have the value 202306L in c++26" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_hazard_pointer -# error "__cpp_lib_hazard_pointer should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# ifndef __cpp_lib_hypot -# error "__cpp_lib_hypot should be defined in c++26" -# endif -# if __cpp_lib_hypot != 201603L -# error "__cpp_lib_hypot should have the value 201603L in c++26" -# endif - -# ifndef __cpp_lib_incomplete_container_elements -# error "__cpp_lib_incomplete_container_elements should be defined in c++26" -# endif -# if __cpp_lib_incomplete_container_elements != 201505L -# error "__cpp_lib_incomplete_container_elements should have the value 201505L in c++26" -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_inplace_vector -# error "__cpp_lib_inplace_vector should be defined in c++26" -# endif -# if __cpp_lib_inplace_vector != 202406L -# error "__cpp_lib_inplace_vector should have the value 202406L in c++26" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_inplace_vector -# error "__cpp_lib_inplace_vector should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# ifndef __cpp_lib_int_pow2 -# error "__cpp_lib_int_pow2 should be defined in c++26" -# endif -# if __cpp_lib_int_pow2 != 202002L -# error "__cpp_lib_int_pow2 should have the value 202002L in c++26" -# endif - -# ifndef __cpp_lib_integer_comparison_functions -# error "__cpp_lib_integer_comparison_functions should be defined in c++26" -# endif -# if __cpp_lib_integer_comparison_functions != 202002L -# error "__cpp_lib_integer_comparison_functions should have the value 202002L in c++26" -# endif - -# ifndef __cpp_lib_integer_sequence -# error "__cpp_lib_integer_sequence should be defined in c++26" -# endif -# if __cpp_lib_integer_sequence != 201304L -# error "__cpp_lib_integer_sequence should have the value 201304L in c++26" -# endif - -# ifndef __cpp_lib_integral_constant_callable -# error "__cpp_lib_integral_constant_callable should be defined in c++26" -# endif -# if __cpp_lib_integral_constant_callable != 201304L -# error "__cpp_lib_integral_constant_callable should have the value 201304L in c++26" -# endif - -# ifndef __cpp_lib_interpolate -# error "__cpp_lib_interpolate should be defined in c++26" -# endif -# if __cpp_lib_interpolate != 201902L -# error "__cpp_lib_interpolate should have the value 201902L in c++26" -# endif - -# ifndef __cpp_lib_invoke -# error "__cpp_lib_invoke should be defined in c++26" -# endif -# if __cpp_lib_invoke != 201411L -# error "__cpp_lib_invoke should have the value 201411L in c++26" -# endif - -# ifndef __cpp_lib_invoke_r -# error "__cpp_lib_invoke_r should be defined in c++26" -# endif -# if __cpp_lib_invoke_r != 202106L -# error "__cpp_lib_invoke_r should have the value 202106L in c++26" -# endif - -# ifndef __cpp_lib_ios_noreplace -# error "__cpp_lib_ios_noreplace should be defined in c++26" -# endif -# if __cpp_lib_ios_noreplace != 202207L -# error "__cpp_lib_ios_noreplace should have the value 202207L in c++26" -# endif - -# ifndef __cpp_lib_is_aggregate -# error "__cpp_lib_is_aggregate should be defined in c++26" -# endif -# if __cpp_lib_is_aggregate != 201703L -# error "__cpp_lib_is_aggregate should have the value 201703L in c++26" -# endif - -# ifndef __cpp_lib_is_constant_evaluated -# error "__cpp_lib_is_constant_evaluated should be defined in c++26" -# endif -# if __cpp_lib_is_constant_evaluated != 201811L -# error "__cpp_lib_is_constant_evaluated should have the value 201811L in c++26" -# endif - -# ifndef __cpp_lib_is_final -# error "__cpp_lib_is_final should be defined in c++26" -# endif -# if __cpp_lib_is_final != 201402L -# error "__cpp_lib_is_final should have the value 201402L in c++26" -# endif - -# if __has_builtin(__builtin_is_implicit_lifetime) -# ifndef __cpp_lib_is_implicit_lifetime -# error "__cpp_lib_is_implicit_lifetime should be defined in c++26" -# endif -# if __cpp_lib_is_implicit_lifetime != 202302L -# error "__cpp_lib_is_implicit_lifetime should have the value 202302L in c++26" -# endif -# else -# ifdef __cpp_lib_is_implicit_lifetime -# error "__cpp_lib_is_implicit_lifetime should not be defined when the requirement '__has_builtin(__builtin_is_implicit_lifetime)' is not met!" -# endif -# endif - -# ifndef __cpp_lib_is_invocable -# error "__cpp_lib_is_invocable should be defined in c++26" -# endif -# if __cpp_lib_is_invocable != 201703L -# error "__cpp_lib_is_invocable should have the value 201703L in c++26" -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_is_layout_compatible -# error "__cpp_lib_is_layout_compatible should be defined in c++26" -# endif -# if __cpp_lib_is_layout_compatible != 201907L -# error "__cpp_lib_is_layout_compatible should have the value 201907L in c++26" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_is_layout_compatible -# error "__cpp_lib_is_layout_compatible should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# ifndef __cpp_lib_is_nothrow_convertible -# error "__cpp_lib_is_nothrow_convertible should be defined in c++26" -# endif -# if __cpp_lib_is_nothrow_convertible != 201806L -# error "__cpp_lib_is_nothrow_convertible should have the value 201806L in c++26" -# endif - -# ifndef __cpp_lib_is_null_pointer -# error "__cpp_lib_is_null_pointer should be defined in c++26" -# endif -# if __cpp_lib_is_null_pointer != 201309L -# error "__cpp_lib_is_null_pointer should have the value 201309L in c++26" -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_is_pointer_interconvertible -# error "__cpp_lib_is_pointer_interconvertible should be defined in c++26" -# endif -# if __cpp_lib_is_pointer_interconvertible != 201907L -# error "__cpp_lib_is_pointer_interconvertible should have the value 201907L in c++26" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_is_pointer_interconvertible -# error "__cpp_lib_is_pointer_interconvertible should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# ifndef __cpp_lib_is_scoped_enum -# error "__cpp_lib_is_scoped_enum should be defined in c++26" -# endif -# if __cpp_lib_is_scoped_enum != 202011L -# error "__cpp_lib_is_scoped_enum should have the value 202011L in c++26" -# endif - -# ifndef __cpp_lib_is_swappable -# error "__cpp_lib_is_swappable should be defined in c++26" -# endif -# if __cpp_lib_is_swappable != 201603L -# error "__cpp_lib_is_swappable should have the value 201603L in c++26" -# endif - -# if __has_builtin(__builtin_is_virtual_base_of) -# ifndef __cpp_lib_is_virtual_base_of -# error "__cpp_lib_is_virtual_base_of should be defined in c++26" -# endif -# if __cpp_lib_is_virtual_base_of != 202406L -# error "__cpp_lib_is_virtual_base_of should have the value 202406L in c++26" -# endif -# else -# ifdef __cpp_lib_is_virtual_base_of -# error "__cpp_lib_is_virtual_base_of should not be defined when the requirement '__has_builtin(__builtin_is_virtual_base_of)' is not met!" -# endif -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_is_within_lifetime -# error "__cpp_lib_is_within_lifetime should be defined in c++26" -# endif -# if __cpp_lib_is_within_lifetime != 202306L -# error "__cpp_lib_is_within_lifetime should have the value 202306L in c++26" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_is_within_lifetime -# error "__cpp_lib_is_within_lifetime should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# if !defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC) -# ifndef __cpp_lib_jthread -# error "__cpp_lib_jthread should be defined in c++26" -# endif -# if __cpp_lib_jthread != 201911L -# error "__cpp_lib_jthread should have the value 201911L in c++26" -# endif -# else -# ifdef __cpp_lib_jthread -# error "__cpp_lib_jthread should not be defined when the requirement '!defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC)' is not met!" -# endif -# endif - -# if !defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC) -# ifndef __cpp_lib_latch -# error "__cpp_lib_latch should be defined in c++26" -# endif -# if __cpp_lib_latch != 201907L -# error "__cpp_lib_latch should have the value 201907L in c++26" -# endif -# else -# ifdef __cpp_lib_latch -# error "__cpp_lib_latch should not be defined when the requirement '!defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC)' is not met!" -# endif -# endif - -# ifndef __cpp_lib_launder -# error "__cpp_lib_launder should be defined in c++26" -# endif -# if __cpp_lib_launder != 201606L -# error "__cpp_lib_launder should have the value 201606L in c++26" -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_linalg -# error "__cpp_lib_linalg should be defined in c++26" -# endif -# if __cpp_lib_linalg != 202311L -# error "__cpp_lib_linalg should have the value 202311L in c++26" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_linalg -# error "__cpp_lib_linalg should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# ifndef __cpp_lib_list_remove_return_type -# error "__cpp_lib_list_remove_return_type should be defined in c++26" -# endif -# if __cpp_lib_list_remove_return_type != 201806L -# error "__cpp_lib_list_remove_return_type should have the value 201806L in c++26" -# endif - -# ifndef __cpp_lib_logical_traits -# error "__cpp_lib_logical_traits should be defined in c++26" -# endif -# if __cpp_lib_logical_traits != 201510L -# error "__cpp_lib_logical_traits should have the value 201510L in c++26" -# endif - -# ifndef __cpp_lib_make_from_tuple -# error "__cpp_lib_make_from_tuple should be defined in c++26" -# endif -# if __cpp_lib_make_from_tuple != 201606L -# error "__cpp_lib_make_from_tuple should have the value 201606L in c++26" -# endif - -# ifndef __cpp_lib_make_reverse_iterator -# error "__cpp_lib_make_reverse_iterator should be defined in c++26" -# endif -# if __cpp_lib_make_reverse_iterator != 201402L -# error "__cpp_lib_make_reverse_iterator should have the value 201402L in c++26" -# endif - -# ifndef __cpp_lib_make_unique -# error "__cpp_lib_make_unique should be defined in c++26" -# endif -# if __cpp_lib_make_unique != 201304L -# error "__cpp_lib_make_unique should have the value 201304L in c++26" -# endif - -# ifndef __cpp_lib_map_try_emplace -# error "__cpp_lib_map_try_emplace should be defined in c++26" -# endif -# if __cpp_lib_map_try_emplace != 201411L -# error "__cpp_lib_map_try_emplace should have the value 201411L in c++26" -# endif - -# ifndef __cpp_lib_math_constants -# error "__cpp_lib_math_constants should be defined in c++26" -# endif -# if __cpp_lib_math_constants != 201907L -# error "__cpp_lib_math_constants should have the value 201907L in c++26" -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_math_special_functions -# error "__cpp_lib_math_special_functions should be defined in c++26" -# endif -# if __cpp_lib_math_special_functions != 201603L -# error "__cpp_lib_math_special_functions should have the value 201603L in c++26" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_math_special_functions -# error "__cpp_lib_math_special_functions should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# ifndef __cpp_lib_mdspan -# error "__cpp_lib_mdspan should be defined in c++26" -# endif -# if __cpp_lib_mdspan != 202406L -# error "__cpp_lib_mdspan should have the value 202406L in c++26" -# endif - -# if !defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_PMR -# ifndef __cpp_lib_memory_resource -# error "__cpp_lib_memory_resource should be defined in c++26" -# endif -# if __cpp_lib_memory_resource != 201603L -# error "__cpp_lib_memory_resource should have the value 201603L in c++26" -# endif -# else -# ifdef __cpp_lib_memory_resource -# error "__cpp_lib_memory_resource should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_PMR' is not met!" -# endif -# endif - -# ifndef __cpp_lib_modules -# error "__cpp_lib_modules should be defined in c++26" -# endif -# if __cpp_lib_modules != 202207L -# error "__cpp_lib_modules should have the value 202207L in c++26" -# endif - -# ifndef __cpp_lib_move_iterator_concept -# error "__cpp_lib_move_iterator_concept should be defined in c++26" -# endif -# if __cpp_lib_move_iterator_concept != 202207L -# error "__cpp_lib_move_iterator_concept should have the value 202207L in c++26" -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_move_only_function -# error "__cpp_lib_move_only_function should be defined in c++26" -# endif -# if __cpp_lib_move_only_function != 202110L -# error "__cpp_lib_move_only_function should have the value 202110L in c++26" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_move_only_function -# error "__cpp_lib_move_only_function should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# ifndef __cpp_lib_node_extract -# error "__cpp_lib_node_extract should be defined in c++26" -# endif -# if __cpp_lib_node_extract != 201606L -# error "__cpp_lib_node_extract should have the value 201606L in c++26" -# endif - -# ifndef __cpp_lib_nonmember_container_access -# error "__cpp_lib_nonmember_container_access should be defined in c++26" -# endif -# if __cpp_lib_nonmember_container_access != 201411L -# error "__cpp_lib_nonmember_container_access should have the value 201411L in c++26" -# endif - -# ifndef __cpp_lib_not_fn -# error "__cpp_lib_not_fn should be defined in c++26" -# endif -# if __cpp_lib_not_fn != 202306L -# error "__cpp_lib_not_fn should have the value 202306L in c++26" -# endif - -# ifndef __cpp_lib_null_iterators -# error "__cpp_lib_null_iterators should be defined in c++26" -# endif -# if __cpp_lib_null_iterators != 201304L -# error "__cpp_lib_null_iterators should have the value 201304L in c++26" -# endif - -# ifndef __cpp_lib_optional -# error "__cpp_lib_optional should be defined in c++26" -# endif -# if __cpp_lib_optional != 202110L -# error "__cpp_lib_optional should have the value 202110L in c++26" -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_optional_range_support -# error "__cpp_lib_optional_range_support should be defined in c++26" -# endif -# if __cpp_lib_optional_range_support != 202406L -# error "__cpp_lib_optional_range_support should have the value 202406L in c++26" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_optional_range_support -# error "__cpp_lib_optional_range_support should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# ifndef __cpp_lib_out_ptr -# error "__cpp_lib_out_ptr should be defined in c++26" -# endif -# if __cpp_lib_out_ptr != 202311L -# error "__cpp_lib_out_ptr should have the value 202311L in c++26" -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_parallel_algorithm -# error "__cpp_lib_parallel_algorithm should be defined in c++26" -# endif -# if __cpp_lib_parallel_algorithm != 201603L -# error "__cpp_lib_parallel_algorithm should have the value 201603L in c++26" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_parallel_algorithm -# error "__cpp_lib_parallel_algorithm should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_philox_engine -# error "__cpp_lib_philox_engine should be defined in c++26" -# endif -# if __cpp_lib_philox_engine != 202406L -# error "__cpp_lib_philox_engine should have the value 202406L in c++26" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_philox_engine -# error "__cpp_lib_philox_engine should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# if !defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_PMR -# ifndef __cpp_lib_polymorphic_allocator -# error "__cpp_lib_polymorphic_allocator should be defined in c++26" -# endif -# if __cpp_lib_polymorphic_allocator != 201902L -# error "__cpp_lib_polymorphic_allocator should have the value 201902L in c++26" -# endif -# else -# ifdef __cpp_lib_polymorphic_allocator -# error "__cpp_lib_polymorphic_allocator should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_PMR' is not met!" -# endif -# endif - -# if !defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_TO_CHARS_FLOATING_POINT -# ifndef __cpp_lib_print -# error "__cpp_lib_print should be defined in c++26" -# endif -# if __cpp_lib_print != 202207L -# error "__cpp_lib_print should have the value 202207L in c++26" -# endif -# else -# ifdef __cpp_lib_print -# error "__cpp_lib_print should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_TO_CHARS_FLOATING_POINT' is not met!" -# endif -# endif - -# if !defined(_LIBCPP_VERSION) || _LIBCPP_HAS_LOCALIZATION -# ifndef __cpp_lib_quoted_string_io -# error "__cpp_lib_quoted_string_io should be defined in c++26" -# endif -# if __cpp_lib_quoted_string_io != 201304L -# error "__cpp_lib_quoted_string_io should have the value 201304L in c++26" -# endif -# else -# ifdef __cpp_lib_quoted_string_io -# error "__cpp_lib_quoted_string_io should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_HAS_LOCALIZATION' is not met!" -# endif -# endif - -# ifndef __cpp_lib_ranges -# error "__cpp_lib_ranges should be defined in c++26" -# endif -# if __cpp_lib_ranges != 202406L -# error "__cpp_lib_ranges should have the value 202406L in c++26" -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_ranges_as_const -# error "__cpp_lib_ranges_as_const should be defined in c++26" -# endif -# if __cpp_lib_ranges_as_const != 202207L -# error "__cpp_lib_ranges_as_const should have the value 202207L in c++26" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_ranges_as_const -# error "__cpp_lib_ranges_as_const should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# ifndef __cpp_lib_ranges_as_rvalue -# error "__cpp_lib_ranges_as_rvalue should be defined in c++26" -# endif -# if __cpp_lib_ranges_as_rvalue != 202207L -# error "__cpp_lib_ranges_as_rvalue should have the value 202207L in c++26" -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_ranges_chunk -# error "__cpp_lib_ranges_chunk should be defined in c++26" -# endif -# if __cpp_lib_ranges_chunk != 202202L -# error "__cpp_lib_ranges_chunk should have the value 202202L in c++26" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_ranges_chunk -# error "__cpp_lib_ranges_chunk should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# ifndef __cpp_lib_ranges_chunk_by -# error "__cpp_lib_ranges_chunk_by should be defined in c++26" -# endif -# if __cpp_lib_ranges_chunk_by != 202202L -# error "__cpp_lib_ranges_chunk_by should have the value 202202L in c++26" -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_ranges_concat -# error "__cpp_lib_ranges_concat should be defined in c++26" -# endif -# if __cpp_lib_ranges_concat != 202403L -# error "__cpp_lib_ranges_concat should have the value 202403L in c++26" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_ranges_concat -# error "__cpp_lib_ranges_concat should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# ifndef __cpp_lib_ranges_contains -# error "__cpp_lib_ranges_contains should be defined in c++26" -# endif -# if __cpp_lib_ranges_contains != 202207L -# error "__cpp_lib_ranges_contains should have the value 202207L in c++26" -# endif - -# ifndef __cpp_lib_ranges_find_last -# error "__cpp_lib_ranges_find_last should be defined in c++26" -# endif -# if __cpp_lib_ranges_find_last != 202207L -# error "__cpp_lib_ranges_find_last should have the value 202207L in c++26" -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_ranges_iota -# error "__cpp_lib_ranges_iota should be defined in c++26" -# endif -# if __cpp_lib_ranges_iota != 202202L -# error "__cpp_lib_ranges_iota should have the value 202202L in c++26" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_ranges_iota -# error "__cpp_lib_ranges_iota should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_ranges_join_with -# error "__cpp_lib_ranges_join_with should be defined in c++26" -# endif -# if __cpp_lib_ranges_join_with != 202202L -# error "__cpp_lib_ranges_join_with should have the value 202202L in c++26" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_ranges_join_with -# error "__cpp_lib_ranges_join_with should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# ifndef __cpp_lib_ranges_repeat -# error "__cpp_lib_ranges_repeat should be defined in c++26" -# endif -# if __cpp_lib_ranges_repeat != 202207L -# error "__cpp_lib_ranges_repeat should have the value 202207L in c++26" -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_ranges_slide -# error "__cpp_lib_ranges_slide should be defined in c++26" -# endif -# if __cpp_lib_ranges_slide != 202202L -# error "__cpp_lib_ranges_slide should have the value 202202L in c++26" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_ranges_slide -# error "__cpp_lib_ranges_slide should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# ifndef __cpp_lib_ranges_starts_ends_with -# error "__cpp_lib_ranges_starts_ends_with should be defined in c++26" -# endif -# if __cpp_lib_ranges_starts_ends_with != 202106L -# error "__cpp_lib_ranges_starts_ends_with should have the value 202106L in c++26" -# endif - -# ifndef __cpp_lib_ranges_to_container -# error "__cpp_lib_ranges_to_container should be defined in c++26" -# endif -# if __cpp_lib_ranges_to_container != 202202L -# error "__cpp_lib_ranges_to_container should have the value 202202L in c++26" -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_ranges_zip -# error "__cpp_lib_ranges_zip should be defined in c++26" -# endif -# if __cpp_lib_ranges_zip != 202110L -# error "__cpp_lib_ranges_zip should have the value 202110L in c++26" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_ranges_zip -# error "__cpp_lib_ranges_zip should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# ifndef __cpp_lib_ratio -# error "__cpp_lib_ratio should be defined in c++26" -# endif -# if __cpp_lib_ratio != 202306L -# error "__cpp_lib_ratio should have the value 202306L in c++26" -# endif - -# ifndef __cpp_lib_raw_memory_algorithms -# error "__cpp_lib_raw_memory_algorithms should be defined in c++26" -# endif -# if __cpp_lib_raw_memory_algorithms != 201606L -# error "__cpp_lib_raw_memory_algorithms should have the value 201606L in c++26" -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_rcu -# error "__cpp_lib_rcu should be defined in c++26" -# endif -# if __cpp_lib_rcu != 202306L -# error "__cpp_lib_rcu should have the value 202306L in c++26" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_rcu -# error "__cpp_lib_rcu should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_reference_from_temporary -# error "__cpp_lib_reference_from_temporary should be defined in c++26" -# endif -# if __cpp_lib_reference_from_temporary != 202202L -# error "__cpp_lib_reference_from_temporary should have the value 202202L in c++26" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_reference_from_temporary -# error "__cpp_lib_reference_from_temporary should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# ifndef __cpp_lib_reference_wrapper -# error "__cpp_lib_reference_wrapper should be defined in c++26" -# endif -# if __cpp_lib_reference_wrapper != 202403L -# error "__cpp_lib_reference_wrapper should have the value 202403L in c++26" -# endif - -# ifndef __cpp_lib_remove_cvref -# error "__cpp_lib_remove_cvref should be defined in c++26" -# endif -# if __cpp_lib_remove_cvref != 201711L -# error "__cpp_lib_remove_cvref should have the value 201711L in c++26" -# endif - -# ifndef __cpp_lib_result_of_sfinae -# error "__cpp_lib_result_of_sfinae should be defined in c++26" -# endif -# if __cpp_lib_result_of_sfinae != 201210L -# error "__cpp_lib_result_of_sfinae should have the value 201210L in c++26" -# endif - -# ifndef __cpp_lib_robust_nonmodifying_seq_ops -# error "__cpp_lib_robust_nonmodifying_seq_ops should be defined in c++26" -# endif -# if __cpp_lib_robust_nonmodifying_seq_ops != 201304L -# error "__cpp_lib_robust_nonmodifying_seq_ops should have the value 201304L in c++26" -# endif - -# ifndef __cpp_lib_sample -# error "__cpp_lib_sample should be defined in c++26" -# endif -# if __cpp_lib_sample != 201603L -# error "__cpp_lib_sample should have the value 201603L in c++26" -# endif - -# ifndef __cpp_lib_saturation_arithmetic -# error "__cpp_lib_saturation_arithmetic should be defined in c++26" -# endif -# if __cpp_lib_saturation_arithmetic != 202311L -# error "__cpp_lib_saturation_arithmetic should have the value 202311L in c++26" -# endif - -# if !defined(_LIBCPP_VERSION) || _LIBCPP_HAS_THREADS -# ifndef __cpp_lib_scoped_lock -# error "__cpp_lib_scoped_lock should be defined in c++26" -# endif -# if __cpp_lib_scoped_lock != 201703L -# error "__cpp_lib_scoped_lock should have the value 201703L in c++26" -# endif -# else -# ifdef __cpp_lib_scoped_lock -# error "__cpp_lib_scoped_lock should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_HAS_THREADS' is not met!" -# endif -# endif - -# if !defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC) -# ifndef __cpp_lib_semaphore -# error "__cpp_lib_semaphore should be defined in c++26" -# endif -# if __cpp_lib_semaphore != 201907L -# error "__cpp_lib_semaphore should have the value 201907L in c++26" -# endif -# else -# ifdef __cpp_lib_semaphore -# error "__cpp_lib_semaphore should not be defined when the requirement '!defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC)' is not met!" -# endif -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_senders -# error "__cpp_lib_senders should be defined in c++26" -# endif -# if __cpp_lib_senders != 202406L -# error "__cpp_lib_senders should have the value 202406L in c++26" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_senders -# error "__cpp_lib_senders should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# if _LIBCPP_HAS_THREADS -# ifndef __cpp_lib_shared_mutex -# error "__cpp_lib_shared_mutex should be defined in c++26" -# endif -# if __cpp_lib_shared_mutex != 201505L -# error "__cpp_lib_shared_mutex should have the value 201505L in c++26" -# endif -# else -# ifdef __cpp_lib_shared_mutex -# error "__cpp_lib_shared_mutex should not be defined when the requirement '_LIBCPP_HAS_THREADS' is not met!" -# endif -# endif - -# ifndef __cpp_lib_shared_ptr_arrays -# error "__cpp_lib_shared_ptr_arrays should be defined in c++26" -# endif -# if __cpp_lib_shared_ptr_arrays != 201707L -# error "__cpp_lib_shared_ptr_arrays should have the value 201707L in c++26" -# endif - -# ifndef __cpp_lib_shared_ptr_weak_type -# error "__cpp_lib_shared_ptr_weak_type should be defined in c++26" -# endif -# if __cpp_lib_shared_ptr_weak_type != 201606L -# error "__cpp_lib_shared_ptr_weak_type should have the value 201606L in c++26" -# endif - -# if _LIBCPP_HAS_THREADS -# ifndef __cpp_lib_shared_timed_mutex -# error "__cpp_lib_shared_timed_mutex should be defined in c++26" -# endif -# if __cpp_lib_shared_timed_mutex != 201402L -# error "__cpp_lib_shared_timed_mutex should have the value 201402L in c++26" -# endif -# else -# ifdef __cpp_lib_shared_timed_mutex -# error "__cpp_lib_shared_timed_mutex should not be defined when the requirement '_LIBCPP_HAS_THREADS' is not met!" -# endif -# endif - -# ifndef __cpp_lib_shift -# error "__cpp_lib_shift should be defined in c++26" -# endif -# if __cpp_lib_shift != 201806L -# error "__cpp_lib_shift should have the value 201806L in c++26" -# endif - -# ifndef __cpp_lib_smart_ptr_for_overwrite -# error "__cpp_lib_smart_ptr_for_overwrite should be defined in c++26" -# endif -# if __cpp_lib_smart_ptr_for_overwrite != 202002L -# error "__cpp_lib_smart_ptr_for_overwrite should have the value 202002L in c++26" -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_smart_ptr_owner_equality -# error "__cpp_lib_smart_ptr_owner_equality should be defined in c++26" -# endif -# if __cpp_lib_smart_ptr_owner_equality != 202306L -# error "__cpp_lib_smart_ptr_owner_equality should have the value 202306L in c++26" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_smart_ptr_owner_equality -# error "__cpp_lib_smart_ptr_owner_equality should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# ifndef __cpp_lib_source_location -# error "__cpp_lib_source_location should be defined in c++26" -# endif -# if __cpp_lib_source_location != 201907L -# error "__cpp_lib_source_location should have the value 201907L in c++26" -# endif - -# ifndef __cpp_lib_span -# error "__cpp_lib_span should be defined in c++26" -# endif -# if __cpp_lib_span != 202002L -# error "__cpp_lib_span should have the value 202002L in c++26" -# endif - -# ifndef __cpp_lib_span_at -# error "__cpp_lib_span_at should be defined in c++26" -# endif -# if __cpp_lib_span_at != 202311L -# error "__cpp_lib_span_at should have the value 202311L in c++26" -# endif - -# ifndef __cpp_lib_span_initializer_list -# error "__cpp_lib_span_initializer_list should be defined in c++26" -# endif -# if __cpp_lib_span_initializer_list != 202311L -# error "__cpp_lib_span_initializer_list should have the value 202311L in c++26" -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_spanstream -# error "__cpp_lib_spanstream should be defined in c++26" -# endif -# if __cpp_lib_spanstream != 202106L -# error "__cpp_lib_spanstream should have the value 202106L in c++26" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_spanstream -# error "__cpp_lib_spanstream should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# ifndef __cpp_lib_ssize -# error "__cpp_lib_ssize should be defined in c++26" -# endif -# if __cpp_lib_ssize != 201902L -# error "__cpp_lib_ssize should have the value 201902L in c++26" -# endif - -# ifndef __cpp_lib_sstream_from_string_view -# error "__cpp_lib_sstream_from_string_view should be defined in c++26" -# endif -# if __cpp_lib_sstream_from_string_view != 202306L -# error "__cpp_lib_sstream_from_string_view should have the value 202306L in c++26" -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_stacktrace -# error "__cpp_lib_stacktrace should be defined in c++26" -# endif -# if __cpp_lib_stacktrace != 202011L -# error "__cpp_lib_stacktrace should have the value 202011L in c++26" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_stacktrace -# error "__cpp_lib_stacktrace should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# ifndef __cpp_lib_starts_ends_with -# error "__cpp_lib_starts_ends_with should be defined in c++26" -# endif -# if __cpp_lib_starts_ends_with != 201711L -# error "__cpp_lib_starts_ends_with should have the value 201711L in c++26" -# endif - -# ifndef __cpp_lib_stdatomic_h -# error "__cpp_lib_stdatomic_h should be defined in c++26" -# endif -# if __cpp_lib_stdatomic_h != 202011L -# error "__cpp_lib_stdatomic_h should have the value 202011L in c++26" -# endif - -# ifndef __cpp_lib_string_contains -# error "__cpp_lib_string_contains should be defined in c++26" -# endif -# if __cpp_lib_string_contains != 202011L -# error "__cpp_lib_string_contains should have the value 202011L in c++26" -# endif - -# ifndef __cpp_lib_string_resize_and_overwrite -# error "__cpp_lib_string_resize_and_overwrite should be defined in c++26" -# endif -# if __cpp_lib_string_resize_and_overwrite != 202110L -# error "__cpp_lib_string_resize_and_overwrite should have the value 202110L in c++26" -# endif - -# ifndef __cpp_lib_string_udls -# error "__cpp_lib_string_udls should be defined in c++26" -# endif -# if __cpp_lib_string_udls != 201304L -# error "__cpp_lib_string_udls should have the value 201304L in c++26" -# endif - -# ifndef __cpp_lib_string_view -# error "__cpp_lib_string_view should be defined in c++26" -# endif -# if __cpp_lib_string_view != 202403L -# error "__cpp_lib_string_view should have the value 202403L in c++26" -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_submdspan -# error "__cpp_lib_submdspan should be defined in c++26" -# endif -# if __cpp_lib_submdspan != 202306L -# error "__cpp_lib_submdspan should have the value 202306L in c++26" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_submdspan -# error "__cpp_lib_submdspan should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# if !defined(_LIBCPP_VERSION) || _LIBCPP_HAS_EXPERIMENTAL_SYNCSTREAM -# ifndef __cpp_lib_syncbuf -# error "__cpp_lib_syncbuf should be defined in c++26" -# endif -# if __cpp_lib_syncbuf != 201803L -# error "__cpp_lib_syncbuf should have the value 201803L in c++26" -# endif -# else -# ifdef __cpp_lib_syncbuf -# error "__cpp_lib_syncbuf should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_HAS_EXPERIMENTAL_SYNCSTREAM' is not met!" -# endif -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_text_encoding -# error "__cpp_lib_text_encoding should be defined in c++26" -# endif -# if __cpp_lib_text_encoding != 202306L -# error "__cpp_lib_text_encoding should have the value 202306L in c++26" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_text_encoding -# error "__cpp_lib_text_encoding should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# ifndef __cpp_lib_three_way_comparison -# error "__cpp_lib_three_way_comparison should be defined in c++26" -# endif -# if __cpp_lib_three_way_comparison != 201907L -# error "__cpp_lib_three_way_comparison should have the value 201907L in c++26" -# endif - -# ifndef __cpp_lib_to_address -# error "__cpp_lib_to_address should be defined in c++26" -# endif -# if __cpp_lib_to_address != 201711L -# error "__cpp_lib_to_address should have the value 201711L in c++26" -# endif - -# ifndef __cpp_lib_to_array -# error "__cpp_lib_to_array should be defined in c++26" -# endif -# if __cpp_lib_to_array != 201907L -# error "__cpp_lib_to_array should have the value 201907L in c++26" -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_to_chars -# error "__cpp_lib_to_chars should be defined in c++26" -# endif -# if __cpp_lib_to_chars != 202306L -# error "__cpp_lib_to_chars should have the value 202306L in c++26" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_to_chars -# error "__cpp_lib_to_chars should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_to_string -# error "__cpp_lib_to_string should be defined in c++26" -# endif -# if __cpp_lib_to_string != 202306L -# error "__cpp_lib_to_string should have the value 202306L in c++26" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_to_string -# error "__cpp_lib_to_string should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# ifndef __cpp_lib_to_underlying -# error "__cpp_lib_to_underlying should be defined in c++26" -# endif -# if __cpp_lib_to_underlying != 202102L -# error "__cpp_lib_to_underlying should have the value 202102L in c++26" -# endif - -# ifndef __cpp_lib_transformation_trait_aliases -# error "__cpp_lib_transformation_trait_aliases should be defined in c++26" -# endif -# if __cpp_lib_transformation_trait_aliases != 201304L -# error "__cpp_lib_transformation_trait_aliases should have the value 201304L in c++26" -# endif - -# ifndef __cpp_lib_transparent_operators -# error "__cpp_lib_transparent_operators should be defined in c++26" -# endif -# if __cpp_lib_transparent_operators != 201510L -# error "__cpp_lib_transparent_operators should have the value 201510L in c++26" -# endif - -# ifndef __cpp_lib_tuple_element_t -# error "__cpp_lib_tuple_element_t should be defined in c++26" -# endif -# if __cpp_lib_tuple_element_t != 201402L -# error "__cpp_lib_tuple_element_t should have the value 201402L in c++26" -# endif - -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_tuple_like -# error "__cpp_lib_tuple_like should be defined in c++26" -# endif -# if __cpp_lib_tuple_like != 202311L -# error "__cpp_lib_tuple_like should have the value 202311L in c++26" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_tuple_like -# error "__cpp_lib_tuple_like should not be defined because it is unimplemented in libc++!" -# endif -# endif - -# ifndef __cpp_lib_tuples_by_type -# error "__cpp_lib_tuples_by_type should be defined in c++26" -# endif -# if __cpp_lib_tuples_by_type != 201304L -# error "__cpp_lib_tuples_by_type should have the value 201304L in c++26" -# endif - -# ifndef __cpp_lib_type_identity -# error "__cpp_lib_type_identity should be defined in c++26" -# endif -# if __cpp_lib_type_identity != 201806L -# error "__cpp_lib_type_identity should have the value 201806L in c++26" -# endif - -# ifndef __cpp_lib_type_trait_variable_templates -# error "__cpp_lib_type_trait_variable_templates should be defined in c++26" -# endif -# if __cpp_lib_type_trait_variable_templates != 201510L -# error "__cpp_lib_type_trait_variable_templates should have the value 201510L in c++26" -# endif - -# ifndef __cpp_lib_uncaught_exceptions -# error "__cpp_lib_uncaught_exceptions should be defined in c++26" -# endif -# if __cpp_lib_uncaught_exceptions != 201411L -# error "__cpp_lib_uncaught_exceptions should have the value 201411L in c++26" -# endif - -# ifndef __cpp_lib_unordered_map_try_emplace -# error "__cpp_lib_unordered_map_try_emplace should be defined in c++26" -# endif -# if __cpp_lib_unordered_map_try_emplace != 201411L -# error "__cpp_lib_unordered_map_try_emplace should have the value 201411L in c++26" -# endif - -# ifndef __cpp_lib_unreachable -# error "__cpp_lib_unreachable should be defined in c++26" -# endif -# if __cpp_lib_unreachable != 202202L -# error "__cpp_lib_unreachable should have the value 202202L in c++26" -# endif - -# ifndef __cpp_lib_unwrap_ref -# error "__cpp_lib_unwrap_ref should be defined in c++26" -# endif -# if __cpp_lib_unwrap_ref != 201811L -# error "__cpp_lib_unwrap_ref should have the value 201811L in c++26" -# endif - -# ifndef __cpp_lib_variant -# error "__cpp_lib_variant should be defined in c++26" -# endif -# if __cpp_lib_variant != 202306L -# error "__cpp_lib_variant should have the value 202306L in c++26" -# endif - -# ifndef __cpp_lib_void_t -# error "__cpp_lib_void_t should be defined in c++26" -# endif -# if __cpp_lib_void_t != 201411L -# error "__cpp_lib_void_t should have the value 201411L in c++26" -# endif ->>>>>>> 3e1b3b8f0316 (Make forward_list constexpr as part of P3372R3) #endif // TEST_STD_VER > 23