# 1 "/home/avi/scylla-maint/seastar/src/rpc/rpc.cc" # 1 "" 1 # 1 "" 3 # 478 "" 3 # 1 "" 1 # 1 "" 2 # 1 "/home/avi/scylla-maint/seastar/src/rpc/rpc.cc" 2 # 1 "/home/avi/scylla-maint/seastar/include/seastar/rpc/rpc.hh" 1 # 24 "/home/avi/scylla-maint/seastar/include/seastar/rpc/rpc.hh" # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/unordered_map" 1 3 # 33 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/unordered_map" 3 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/requires_hosted.h" 1 3 # 31 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/requires_hosted.h" 3 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/x86_64-redhat-linux/bits/c++config.h" 1 3 # 1 "/usr/include/bits/wordsize.h" 1 3 4 # 4 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/x86_64-redhat-linux/bits/c++config.h" 2 3 # 1875 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/x86_64-redhat-linux/bits/c++config.h" 3 # 2149 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/x86_64-redhat-linux/bits/c++config.h" 3 namespace std { typedef long unsigned int size_t; typedef long int ptrdiff_t; typedef decltype(nullptr) nullptr_t; #pragma GCC visibility push(default) extern "C++" __attribute__ ((__noreturn__, __always_inline__)) inline void __terminate() noexcept { void terminate() noexcept __attribute__ ((__noreturn__,__cold__)); terminate(); } #pragma GCC visibility pop } # 2182 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/x86_64-redhat-linux/bits/c++config.h" 3 namespace std { inline namespace __cxx11 __attribute__((__abi_tag__ ("cxx11"))) { } } namespace __gnu_cxx { inline namespace __cxx11 __attribute__((__abi_tag__ ("cxx11"))) { } } # 2375 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/x86_64-redhat-linux/bits/c++config.h" 3 namespace std { #pragma GCC visibility push(default) __attribute__((__always_inline__)) constexpr inline bool __is_constant_evaluated() noexcept { if consteval { return true; } else { return false; } } #pragma GCC visibility pop } # 2414 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/x86_64-redhat-linux/bits/c++config.h" 3 namespace std { #pragma GCC visibility push(default) extern "C++" __attribute__ ((__noreturn__)) void __glibcxx_assert_fail (const char* __file, int __line, const char* __function, const char* __condition) noexcept; #pragma GCC visibility pop } # 2442 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/x86_64-redhat-linux/bits/c++config.h" 3 namespace std { __attribute__((__always_inline__,__visibility__("default"))) inline void __glibcxx_assert_fail() { } } # 2521 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/x86_64-redhat-linux/bits/c++config.h" 3 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/x86_64-redhat-linux/bits/os_defines.h" 1 3 # 39 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/x86_64-redhat-linux/bits/os_defines.h" 3 # 1 "/usr/include/features.h" 1 3 4 # 394 "/usr/include/features.h" 3 4 # 1 "/usr/include/features-time64.h" 1 3 4 # 20 "/usr/include/features-time64.h" 3 4 # 1 "/usr/include/bits/wordsize.h" 1 3 4 # 21 "/usr/include/features-time64.h" 2 3 4 # 1 "/usr/include/bits/timesize.h" 1 3 4 # 19 "/usr/include/bits/timesize.h" 3 4 # 1 "/usr/include/bits/wordsize.h" 1 3 4 # 20 "/usr/include/bits/timesize.h" 2 3 4 # 22 "/usr/include/features-time64.h" 2 3 4 # 395 "/usr/include/features.h" 2 3 4 # 481 "/usr/include/features.h" 3 4 # 1 "/usr/include/stdc-predef.h" 1 3 4 # 482 "/usr/include/features.h" 2 3 4 # 503 "/usr/include/features.h" 3 4 # 1 "/usr/include/sys/cdefs.h" 1 3 4 # 576 "/usr/include/sys/cdefs.h" 3 4 # 1 "/usr/include/bits/wordsize.h" 1 3 4 # 577 "/usr/include/sys/cdefs.h" 2 3 4 # 1 "/usr/include/bits/long-double.h" 1 3 4 # 578 "/usr/include/sys/cdefs.h" 2 3 4 # 504 "/usr/include/features.h" 2 3 4 # 527 "/usr/include/features.h" 3 4 # 1 "/usr/include/gnu/stubs.h" 1 3 4 # 10 "/usr/include/gnu/stubs.h" 3 4 # 1 "/usr/include/gnu/stubs-64.h" 1 3 4 # 11 "/usr/include/gnu/stubs.h" 2 3 4 # 528 "/usr/include/features.h" 2 3 4 # 40 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/x86_64-redhat-linux/bits/os_defines.h" 2 3 # 2522 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/x86_64-redhat-linux/bits/c++config.h" 2 3 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/x86_64-redhat-linux/bits/cpu_defines.h" 1 3 # 2525 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/x86_64-redhat-linux/bits/c++config.h" 2 3 # 2728 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/x86_64-redhat-linux/bits/c++config.h" 3 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/pstl/pstl_config.h" 1 3 # 2729 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/x86_64-redhat-linux/bits/c++config.h" 2 3 # 32 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/requires_hosted.h" 2 3 # 35 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/unordered_map" 2 3 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/initializer_list" 1 3 # 34 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/initializer_list" 3 namespace std __attribute__ ((__visibility__ ("default"))) { template class initializer_list { public: typedef _E value_type; typedef const _E& reference; typedef const _E& const_reference; typedef size_t size_type; typedef const _E* iterator; typedef const _E* const_iterator; private: iterator _M_array; size_type _M_len; constexpr initializer_list(const_iterator __a, size_type __l) : _M_array(__a), _M_len(__l) { } public: constexpr initializer_list() noexcept : _M_array(0), _M_len(0) { } constexpr size_type size() const noexcept { return _M_len; } constexpr const_iterator begin() const noexcept { return _M_array; } constexpr const_iterator end() const noexcept { return begin() + size(); } }; template constexpr const _Tp* begin(initializer_list<_Tp> __ils) noexcept { return __ils.begin(); } template constexpr const _Tp* end(initializer_list<_Tp> __ils) noexcept { return __ils.end(); } } # 41 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/unordered_map" 2 3 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_map.h" 1 3 # 33 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_map.h" 3 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/hashtable.h" 1 3 # 34 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/hashtable.h" 3 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/hashtable_policy.h" 1 3 # 34 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/hashtable_policy.h" 3 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/tuple" 1 3 # 33 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/tuple" 3 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_pair.h" 1 3 # 60 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_pair.h" 3 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/type_traits" 1 3 # 33 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/type_traits" 3 # 63 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/type_traits" 3 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/version.h" 1 3 # 48 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/version.h" 3 # 64 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/type_traits" 2 3 namespace std __attribute__ ((__visibility__ ("default"))) { template class reference_wrapper; # 86 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/type_traits" 3 template struct integral_constant { static constexpr _Tp value = __v; using value_type = _Tp; using type = integral_constant<_Tp, __v>; constexpr operator value_type() const noexcept { return value; } constexpr value_type operator()() const noexcept { return value; } }; # 106 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/type_traits" 3 template using __bool_constant = integral_constant; using true_type = __bool_constant; using false_type = __bool_constant; template using bool_constant = __bool_constant<__v>; template struct enable_if { }; template struct enable_if { using type = _Tp; }; template using __enable_if_t = typename enable_if<_Cond, _Tp>::type; template struct __conditional { template using type = _Tp; }; template<> struct __conditional { template using type = _Up; }; template using __conditional_t = typename __conditional<_Cond>::template type<_If, _Else>; template struct __type_identity { using type = _Type; }; template using __type_identity_t = typename __type_identity<_Tp>::type; namespace __detail { template using __first_t = _Tp; template auto __or_fn(int) -> __first_t...>; template auto __or_fn(...) -> true_type; template auto __and_fn(int) -> __first_t...>; template auto __and_fn(...) -> false_type; } template struct __or_ : decltype(__detail::__or_fn<_Bn...>(0)) { }; template struct __and_ : decltype(__detail::__and_fn<_Bn...>(0)) { }; template struct __not_ : __bool_constant { }; template inline constexpr bool __or_v = __or_<_Bn...>::value; template inline constexpr bool __and_v = __and_<_Bn...>::value; namespace __detail { template struct __disjunction_impl { using type = _B1; }; template struct __disjunction_impl<__enable_if_t, _B1, _B2, _Bn...> { using type = typename __disjunction_impl::type; }; template struct __conjunction_impl { using type = _B1; }; template struct __conjunction_impl<__enable_if_t, _B1, _B2, _Bn...> { using type = typename __conjunction_impl::type; }; } template struct conjunction : __detail::__conjunction_impl::type { }; template<> struct conjunction<> : true_type { }; template struct disjunction : __detail::__disjunction_impl::type { }; template<> struct disjunction<> : false_type { }; template struct negation : __not_<_Pp>::type { }; template inline constexpr bool conjunction_v = conjunction<_Bn...>::value; template inline constexpr bool disjunction_v = disjunction<_Bn...>::value; template inline constexpr bool negation_v = negation<_Pp>::value; template struct is_reference; template struct is_function; template struct is_void; template struct remove_cv; template struct is_const; template struct __is_array_unknown_bounds; template constexpr true_type __is_complete_or_unbounded(__type_identity<_Tp>) { return {}; } template constexpr typename __or_< is_reference<_NestedType>, is_function<_NestedType>, is_void<_NestedType>, __is_array_unknown_bounds<_NestedType> >::type __is_complete_or_unbounded(_TypeIdentity) { return {}; } template using __remove_cv_t = typename remove_cv<_Tp>::type; template struct is_void : public false_type { }; template<> struct is_void : public true_type { }; template<> struct is_void : public true_type { }; template<> struct is_void : public true_type { }; template<> struct is_void : public true_type { }; template struct __is_integral_helper : public false_type { }; template<> struct __is_integral_helper : public true_type { }; template<> struct __is_integral_helper : public true_type { }; template<> struct __is_integral_helper : public true_type { }; template<> struct __is_integral_helper : public true_type { }; template<> struct __is_integral_helper : public true_type { }; template<> struct __is_integral_helper : public true_type { }; template<> struct __is_integral_helper : public true_type { }; template<> struct __is_integral_helper : public true_type { }; template<> struct __is_integral_helper : public true_type { }; template<> struct __is_integral_helper : public true_type { }; template<> struct __is_integral_helper : public true_type { }; template<> struct __is_integral_helper : public true_type { }; template<> struct __is_integral_helper : public true_type { }; template<> struct __is_integral_helper : public true_type { }; template<> struct __is_integral_helper : public true_type { }; template<> struct __is_integral_helper : public true_type { }; __extension__ template<> struct __is_integral_helper<__int128> : public true_type { }; __extension__ template<> struct __is_integral_helper : public true_type { }; # 460 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/type_traits" 3 template struct is_integral : public __is_integral_helper<__remove_cv_t<_Tp>>::type { }; template struct __is_floating_point_helper : public false_type { }; template<> struct __is_floating_point_helper : public true_type { }; template<> struct __is_floating_point_helper : public true_type { }; template<> struct __is_floating_point_helper : public true_type { }; # 513 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/type_traits" 3 template<> struct __is_floating_point_helper<__float128> : public true_type { }; template struct is_floating_point : public __is_floating_point_helper<__remove_cv_t<_Tp>>::type { }; template struct is_array : public __bool_constant<__is_array(_Tp)> { }; # 545 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/type_traits" 3 template struct __is_pointer_helper : public false_type { }; template struct __is_pointer_helper<_Tp*> : public true_type { }; template struct is_pointer : public __is_pointer_helper<__remove_cv_t<_Tp>>::type { }; template struct is_lvalue_reference : public false_type { }; template struct is_lvalue_reference<_Tp&> : public true_type { }; template struct is_rvalue_reference : public false_type { }; template struct is_rvalue_reference<_Tp&&> : public true_type { }; template struct is_member_object_pointer : public __bool_constant<__is_member_object_pointer(_Tp)> { }; # 601 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/type_traits" 3 template struct is_member_function_pointer : public __bool_constant<__is_member_function_pointer(_Tp)> { }; # 622 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/type_traits" 3 template struct is_enum : public __bool_constant<__is_enum(_Tp)> { }; template struct is_union : public __bool_constant<__is_union(_Tp)> { }; template struct is_class : public __bool_constant<__is_class(_Tp)> { }; template struct is_function : public __bool_constant<__is_function(_Tp)> { }; # 661 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/type_traits" 3 template struct is_null_pointer : public false_type { }; template<> struct is_null_pointer : public true_type { }; template<> struct is_null_pointer : public true_type { }; template<> struct is_null_pointer : public true_type { }; template<> struct is_null_pointer : public true_type { }; template struct __is_nullptr_t : public is_null_pointer<_Tp> { } __attribute__ ((__deprecated__ ("use '" "std::is_null_pointer" "' instead"))); template struct is_reference : public __bool_constant<__is_reference(_Tp)> { }; # 715 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/type_traits" 3 template struct is_arithmetic : public __or_, is_floating_point<_Tp>>::type { }; template struct is_fundamental : public __or_, is_void<_Tp>, is_null_pointer<_Tp>>::type { }; template struct is_object : public __bool_constant<__is_object(_Tp)> { }; # 741 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/type_traits" 3 template struct is_member_pointer; template struct is_scalar : public __or_, is_enum<_Tp>, is_pointer<_Tp>, is_member_pointer<_Tp>, is_null_pointer<_Tp>>::type { }; template struct is_compound : public __bool_constant::value> { }; template struct is_member_pointer : public __bool_constant<__is_member_pointer(_Tp)> { }; # 779 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/type_traits" 3 template struct is_same; template using __is_one_of = __or_...>; __extension__ template using __is_signed_integer = __is_one_of<__remove_cv_t<_Tp>, signed char, signed short, signed int, signed long, signed long long , signed __int128 # 804 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/type_traits" 3 >; __extension__ template using __is_unsigned_integer = __is_one_of<__remove_cv_t<_Tp>, unsigned char, unsigned short, unsigned int, unsigned long, unsigned long long , unsigned __int128 # 824 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/type_traits" 3 >; template using __is_standard_integer = __or_<__is_signed_integer<_Tp>, __is_unsigned_integer<_Tp>>; template using __void_t = void; template struct is_const : public false_type { }; template struct is_const<_Tp const> : public true_type { }; template struct is_volatile : public false_type { }; template struct is_volatile<_Tp volatile> : public true_type { }; template struct is_trivial : public __bool_constant<__is_trivial(_Tp)> { static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), "template argument must be a complete class or an unbounded array"); }; template struct is_trivially_copyable : public __bool_constant<__is_trivially_copyable(_Tp)> { static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), "template argument must be a complete class or an unbounded array"); }; template struct is_standard_layout : public __bool_constant<__is_standard_layout(_Tp)> { static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), "template argument must be a complete class or an unbounded array"); }; template struct __attribute__ ((__deprecated__ ("use '" "is_standard_layout && is_trivial" "' instead"))) is_pod : public __bool_constant<__is_pod(_Tp)> { static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), "template argument must be a complete class or an unbounded array"); }; template struct [[__deprecated__]] is_literal_type : public __bool_constant<__is_literal_type(_Tp)> { static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), "template argument must be a complete class or an unbounded array"); }; template struct is_empty : public __bool_constant<__is_empty(_Tp)> { }; template struct is_polymorphic : public __bool_constant<__is_polymorphic(_Tp)> { }; template struct is_final : public __bool_constant<__is_final(_Tp)> { }; template struct is_abstract : public __bool_constant<__is_abstract(_Tp)> { }; template::value> struct __is_signed_helper : public false_type { }; template struct __is_signed_helper<_Tp, true> : public __bool_constant<_Tp(-1) < _Tp(0)> { }; template struct is_signed : public __is_signed_helper<_Tp>::type { }; template struct is_unsigned : public __and_, __not_>>::type { }; template _Up __declval(int); template _Tp __declval(long); template auto declval() noexcept -> decltype(__declval<_Tp>(0)); template struct remove_all_extents; template struct __is_array_known_bounds : public false_type { }; template struct __is_array_known_bounds<_Tp[_Size]> : public true_type { }; template struct __is_array_unknown_bounds : public false_type { }; template struct __is_array_unknown_bounds<_Tp[]> : public true_type { }; # 1006 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/type_traits" 3 struct __do_is_destructible_impl { template().~_Tp())> static true_type __test(int); template static false_type __test(...); }; template struct __is_destructible_impl : public __do_is_destructible_impl { using type = decltype(__test<_Tp>(0)); }; template, __is_array_unknown_bounds<_Tp>, is_function<_Tp>>::value, bool = __or_, is_scalar<_Tp>>::value> struct __is_destructible_safe; template struct __is_destructible_safe<_Tp, false, false> : public __is_destructible_impl::type>::type { }; template struct __is_destructible_safe<_Tp, true, false> : public false_type { }; template struct __is_destructible_safe<_Tp, false, true> : public true_type { }; template struct is_destructible : public __is_destructible_safe<_Tp>::type { static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), "template argument must be a complete class or an unbounded array"); }; struct __do_is_nt_destructible_impl { template static __bool_constant().~_Tp())> __test(int); template static false_type __test(...); }; template struct __is_nt_destructible_impl : public __do_is_nt_destructible_impl { using type = decltype(__test<_Tp>(0)); }; template, __is_array_unknown_bounds<_Tp>, is_function<_Tp>>::value, bool = __or_, is_scalar<_Tp>>::value> struct __is_nt_destructible_safe; template struct __is_nt_destructible_safe<_Tp, false, false> : public __is_nt_destructible_impl::type>::type { }; template struct __is_nt_destructible_safe<_Tp, true, false> : public false_type { }; template struct __is_nt_destructible_safe<_Tp, false, true> : public true_type { }; template struct is_nothrow_destructible : public __is_nt_destructible_safe<_Tp>::type { static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), "template argument must be a complete class or an unbounded array"); }; template using __is_constructible_impl = __bool_constant<__is_constructible(_Tp, _Args...)>; template struct is_constructible : public __is_constructible_impl<_Tp, _Args...> { static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), "template argument must be a complete class or an unbounded array"); }; template struct is_default_constructible : public __is_constructible_impl<_Tp> { static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), "template argument must be a complete class or an unbounded array"); }; template struct __add_lvalue_reference_helper { using type = _Tp; }; template struct __add_lvalue_reference_helper<_Tp, __void_t<_Tp&>> { using type = _Tp&; }; template using __add_lval_ref_t = typename __add_lvalue_reference_helper<_Tp>::type; template struct is_copy_constructible : public __is_constructible_impl<_Tp, __add_lval_ref_t> { static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), "template argument must be a complete class or an unbounded array"); }; template struct __add_rvalue_reference_helper { using type = _Tp; }; template struct __add_rvalue_reference_helper<_Tp, __void_t<_Tp&&>> { using type = _Tp&&; }; template using __add_rval_ref_t = typename __add_rvalue_reference_helper<_Tp>::type; template struct is_move_constructible : public __is_constructible_impl<_Tp, __add_rval_ref_t<_Tp>> { static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), "template argument must be a complete class or an unbounded array"); }; template using __is_nothrow_constructible_impl = __bool_constant<__is_nothrow_constructible(_Tp, _Args...)>; template struct is_nothrow_constructible : public __is_nothrow_constructible_impl<_Tp, _Args...> { static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), "template argument must be a complete class or an unbounded array"); }; template struct is_nothrow_default_constructible : public __is_nothrow_constructible_impl<_Tp> { static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), "template argument must be a complete class or an unbounded array"); }; template struct is_nothrow_copy_constructible : public __is_nothrow_constructible_impl<_Tp, __add_lval_ref_t> { static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), "template argument must be a complete class or an unbounded array"); }; template struct is_nothrow_move_constructible : public __is_nothrow_constructible_impl<_Tp, __add_rval_ref_t<_Tp>> { static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), "template argument must be a complete class or an unbounded array"); }; template using __is_assignable_impl = __bool_constant<__is_assignable(_Tp, _Up)>; template struct is_assignable : public __is_assignable_impl<_Tp, _Up> { static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), "template argument must be a complete class or an unbounded array"); }; template struct is_copy_assignable : public __is_assignable_impl<__add_lval_ref_t<_Tp>, __add_lval_ref_t> { static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), "template argument must be a complete class or an unbounded array"); }; template struct is_move_assignable : public __is_assignable_impl<__add_lval_ref_t<_Tp>, __add_rval_ref_t<_Tp>> { static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), "template argument must be a complete class or an unbounded array"); }; template using __is_nothrow_assignable_impl = __bool_constant<__is_nothrow_assignable(_Tp, _Up)>; template struct is_nothrow_assignable : public __is_nothrow_assignable_impl<_Tp, _Up> { static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), "template argument must be a complete class or an unbounded array"); }; template struct is_nothrow_copy_assignable : public __is_nothrow_assignable_impl<__add_lval_ref_t<_Tp>, __add_lval_ref_t> { static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), "template argument must be a complete class or an unbounded array"); }; template struct is_nothrow_move_assignable : public __is_nothrow_assignable_impl<__add_lval_ref_t<_Tp>, __add_rval_ref_t<_Tp>> { static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), "template argument must be a complete class or an unbounded array"); }; template using __is_trivially_constructible_impl = __bool_constant<__is_trivially_constructible(_Tp, _Args...)>; template struct is_trivially_constructible : public __is_trivially_constructible_impl<_Tp, _Args...> { static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), "template argument must be a complete class or an unbounded array"); }; template struct is_trivially_default_constructible : public __is_trivially_constructible_impl<_Tp> { static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), "template argument must be a complete class or an unbounded array"); }; template constexpr bool __is_implicitly_default_constructible_v = requires (void(&__f)(_Tp)) { __f({}); }; template struct __is_implicitly_default_constructible : __bool_constant<__is_implicitly_default_constructible_v<_Tp>> { }; # 1351 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/type_traits" 3 template struct is_trivially_copy_constructible : public __is_trivially_constructible_impl<_Tp, __add_lval_ref_t> { static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), "template argument must be a complete class or an unbounded array"); }; template struct is_trivially_move_constructible : public __is_trivially_constructible_impl<_Tp, __add_rval_ref_t<_Tp>> { static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), "template argument must be a complete class or an unbounded array"); }; template using __is_trivially_assignable_impl = __bool_constant<__is_trivially_assignable(_Tp, _Up)>; template struct is_trivially_assignable : public __is_trivially_assignable_impl<_Tp, _Up> { static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), "template argument must be a complete class or an unbounded array"); }; template struct is_trivially_copy_assignable : public __is_trivially_assignable_impl<__add_lval_ref_t<_Tp>, __add_lval_ref_t> { static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), "template argument must be a complete class or an unbounded array"); }; template struct is_trivially_move_assignable : public __is_trivially_assignable_impl<__add_lval_ref_t<_Tp>, __add_rval_ref_t<_Tp>> { static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), "template argument must be a complete class or an unbounded array"); }; template struct is_trivially_destructible : public __and_<__is_destructible_safe<_Tp>, __bool_constant<__has_trivial_destructor(_Tp)>>::type { static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), "template argument must be a complete class or an unbounded array"); }; template struct has_virtual_destructor : public __bool_constant<__has_virtual_destructor(_Tp)> { static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), "template argument must be a complete class or an unbounded array"); }; template struct alignment_of : public integral_constant { static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), "template argument must be a complete class or an unbounded array"); }; template struct rank : public integral_constant { }; template struct rank<_Tp[_Size]> : public integral_constant::value> { }; template struct rank<_Tp[]> : public integral_constant::value> { }; template struct extent : public integral_constant { }; template struct extent<_Tp[_Size], 0> : public integral_constant { }; template struct extent<_Tp[_Size], _Uint> : public extent<_Tp, _Uint - 1>::type { }; template struct extent<_Tp[], 0> : public integral_constant { }; template struct extent<_Tp[], _Uint> : public extent<_Tp, _Uint - 1>::type { }; template struct is_same : public __bool_constant<__is_same(_Tp, _Up)> { }; # 1491 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/type_traits" 3 template struct is_base_of : public __bool_constant<__is_base_of(_Base, _Derived)> { }; template struct is_convertible : public __bool_constant<__is_convertible(_From, _To)> { }; # 1540 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/type_traits" 3 template using __is_array_convertible = is_convertible<_FromElementType(*)[], _ToElementType(*)[]>; # 1558 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/type_traits" 3 template, is_function<_To>, is_array<_To>>::value> struct __is_nt_convertible_helper : is_void<_To> { }; #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wctor-dtor-privacy" template class __is_nt_convertible_helper<_From, _To, false> { template static void __test_aux(_To1) noexcept; template static __bool_constant(std::declval<_From1>()))> __test(int); template static false_type __test(...); public: using type = decltype(__test<_From, _To>(0)); }; #pragma GCC diagnostic pop template struct is_nothrow_convertible : public __is_nt_convertible_helper<_From, _To>::type { }; template inline constexpr bool is_nothrow_convertible_v = is_nothrow_convertible<_From, _To>::value; template struct remove_const { using type = _Tp; }; template struct remove_const<_Tp const> { using type = _Tp; }; template struct remove_volatile { using type = _Tp; }; template struct remove_volatile<_Tp volatile> { using type = _Tp; }; template struct remove_cv { using type = __remove_cv(_Tp); }; # 1644 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/type_traits" 3 template struct add_const { using type = _Tp const; }; template struct add_volatile { using type = _Tp volatile; }; template struct add_cv { using type = _Tp const volatile; }; template using remove_const_t = typename remove_const<_Tp>::type; template using remove_volatile_t = typename remove_volatile<_Tp>::type; template using remove_cv_t = typename remove_cv<_Tp>::type; template using add_const_t = typename add_const<_Tp>::type; template using add_volatile_t = typename add_volatile<_Tp>::type; template using add_cv_t = typename add_cv<_Tp>::type; # 1692 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/type_traits" 3 template struct remove_reference { using type = _Tp; }; template struct remove_reference<_Tp&> { using type = _Tp; }; template struct remove_reference<_Tp&&> { using type = _Tp; }; template struct add_lvalue_reference { using type = __add_lval_ref_t<_Tp>; }; template struct add_rvalue_reference { using type = __add_rval_ref_t<_Tp>; }; template using remove_reference_t = typename remove_reference<_Tp>::type; template using add_lvalue_reference_t = typename add_lvalue_reference<_Tp>::type; template using add_rvalue_reference_t = typename add_rvalue_reference<_Tp>::type; template struct __cv_selector; template struct __cv_selector<_Unqualified, false, false> { using __type = _Unqualified; }; template struct __cv_selector<_Unqualified, false, true> { using __type = volatile _Unqualified; }; template struct __cv_selector<_Unqualified, true, false> { using __type = const _Unqualified; }; template struct __cv_selector<_Unqualified, true, true> { using __type = const volatile _Unqualified; }; template::value, bool _IsVol = is_volatile<_Qualified>::value> class __match_cv_qualifiers { using __match = __cv_selector<_Unqualified, _IsConst, _IsVol>; public: using __type = typename __match::__type; }; template struct __make_unsigned { using __type = _Tp; }; template<> struct __make_unsigned { using __type = unsigned char; }; template<> struct __make_unsigned { using __type = unsigned char; }; template<> struct __make_unsigned { using __type = unsigned short; }; template<> struct __make_unsigned { using __type = unsigned int; }; template<> struct __make_unsigned { using __type = unsigned long; }; template<> struct __make_unsigned { using __type = unsigned long long; }; __extension__ template<> struct __make_unsigned<__int128> { using __type = unsigned __int128; }; # 1819 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/type_traits" 3 template::value, bool _IsEnum = __is_enum(_Tp)> class __make_unsigned_selector; template class __make_unsigned_selector<_Tp, true, false> { using __unsigned_type = typename __make_unsigned<__remove_cv_t<_Tp>>::__type; public: using __type = typename __match_cv_qualifiers<_Tp, __unsigned_type>::__type; }; class __make_unsigned_selector_base { protected: template struct _List { }; template struct _List<_Tp, _Up...> : _List<_Up...> { static constexpr size_t __size = sizeof(_Tp); }; template struct __select; template struct __select<_Sz, _List<_Uint, _UInts...>, true> { using __type = _Uint; }; template struct __select<_Sz, _List<_Uint, _UInts...>, false> : __select<_Sz, _List<_UInts...>> { }; }; template class __make_unsigned_selector<_Tp, false, true> : __make_unsigned_selector_base { using _UInts = _List; using __unsigned_type = typename __select::__type; public: using __type = typename __match_cv_qualifiers<_Tp, __unsigned_type>::__type; }; template<> struct __make_unsigned { using __type = typename __make_unsigned_selector::__type; }; template<> struct __make_unsigned { using __type = typename __make_unsigned_selector::__type; }; template<> struct __make_unsigned { using __type = typename __make_unsigned_selector::__type; }; template<> struct __make_unsigned { using __type = typename __make_unsigned_selector::__type; }; template struct make_unsigned { using type = typename __make_unsigned_selector<_Tp>::__type; }; template<> struct make_unsigned; template<> struct make_unsigned; template<> struct make_unsigned; template<> struct make_unsigned; template struct __make_signed { using __type = _Tp; }; template<> struct __make_signed { using __type = signed char; }; template<> struct __make_signed { using __type = signed char; }; template<> struct __make_signed { using __type = signed short; }; template<> struct __make_signed { using __type = signed int; }; template<> struct __make_signed { using __type = signed long; }; template<> struct __make_signed { using __type = signed long long; }; __extension__ template<> struct __make_signed { using __type = __int128; }; # 1979 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/type_traits" 3 template::value, bool _IsEnum = __is_enum(_Tp)> class __make_signed_selector; template class __make_signed_selector<_Tp, true, false> { using __signed_type = typename __make_signed<__remove_cv_t<_Tp>>::__type; public: using __type = typename __match_cv_qualifiers<_Tp, __signed_type>::__type; }; template class __make_signed_selector<_Tp, false, true> { using __unsigned_type = typename __make_unsigned_selector<_Tp>::__type; public: using __type = typename __make_signed_selector<__unsigned_type>::__type; }; template<> struct __make_signed { using __type = typename __make_signed_selector::__type; }; template<> struct __make_signed { using __type = typename __make_signed_selector::__type; }; template<> struct __make_signed { using __type = typename __make_signed_selector::__type; }; template<> struct __make_signed { using __type = typename __make_signed_selector::__type; }; template struct make_signed { using type = typename __make_signed_selector<_Tp>::__type; }; template<> struct make_signed; template<> struct make_signed; template<> struct make_signed; template<> struct make_signed; template using make_signed_t = typename make_signed<_Tp>::type; template using make_unsigned_t = typename make_unsigned<_Tp>::type; template struct remove_extent { using type = _Tp; }; template struct remove_extent<_Tp[_Size]> { using type = _Tp; }; template struct remove_extent<_Tp[]> { using type = _Tp; }; template struct remove_all_extents { using type = _Tp; }; template struct remove_all_extents<_Tp[_Size]> { using type = typename remove_all_extents<_Tp>::type; }; template struct remove_all_extents<_Tp[]> { using type = typename remove_all_extents<_Tp>::type; }; template using remove_extent_t = typename remove_extent<_Tp>::type; template using remove_all_extents_t = typename remove_all_extents<_Tp>::type; template struct remove_pointer { using type = __remove_pointer(_Tp); }; # 2124 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/type_traits" 3 template struct __add_pointer_helper { using type = _Tp; }; template struct __add_pointer_helper<_Tp, __void_t<_Tp*>> { using type = _Tp*; }; template struct add_pointer : public __add_pointer_helper<_Tp> { }; template struct add_pointer<_Tp&> { using type = _Tp*; }; template struct add_pointer<_Tp&&> { using type = _Tp*; }; template using remove_pointer_t = typename remove_pointer<_Tp>::type; template using add_pointer_t = typename add_pointer<_Tp>::type; template struct __aligned_storage_msa { union __type { unsigned char __data[_Len]; struct __attribute__((__aligned__)) { } __align; }; }; # 2179 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/type_traits" 3 template::__type)> struct [[__deprecated__]] aligned_storage { union type { unsigned char __data[_Len]; struct __attribute__((__aligned__((_Align)))) { } __align; }; }; template struct __strictest_alignment { static const size_t _S_alignment = 0; static const size_t _S_size = 0; }; template struct __strictest_alignment<_Tp, _Types...> { static const size_t _S_alignment = alignof(_Tp) > __strictest_alignment<_Types...>::_S_alignment ? alignof(_Tp) : __strictest_alignment<_Types...>::_S_alignment; static const size_t _S_size = sizeof(_Tp) > __strictest_alignment<_Types...>::_S_size ? sizeof(_Tp) : __strictest_alignment<_Types...>::_S_size; }; #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wdeprecated-declarations" # 2225 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/type_traits" 3 template struct [[__deprecated__]] aligned_union { private: static_assert(sizeof...(_Types) != 0, "At least one type is required"); using __strictest = __strictest_alignment<_Types...>; static const size_t _S_len = _Len > __strictest::_S_size ? _Len : __strictest::_S_size; public: static const size_t alignment_value = __strictest::_S_alignment; using type = typename aligned_storage<_S_len, alignment_value>::type; }; template const size_t aligned_union<_Len, _Types...>::alignment_value; #pragma GCC diagnostic pop template struct __decay_selector : __conditional_t::value, remove_cv<_Up>, add_pointer<_Up>> { }; template struct __decay_selector<_Up[_Nm]> { using type = _Up*; }; template struct __decay_selector<_Up[]> { using type = _Up*; }; template struct decay { using type = typename __decay_selector<_Tp>::type; }; template struct decay<_Tp&> { using type = typename __decay_selector<_Tp>::type; }; template struct decay<_Tp&&> { using type = typename __decay_selector<_Tp>::type; }; template struct __strip_reference_wrapper { using __type = _Tp; }; template struct __strip_reference_wrapper > { using __type = _Tp&; }; template using __decay_t = typename decay<_Tp>::type; template using __decay_and_strip = __strip_reference_wrapper<__decay_t<_Tp>>; template using _Require = __enable_if_t<__and_<_Cond...>::value>; template using __remove_cvref_t = typename remove_cv::type>::type; template struct conditional { using type = _Iftrue; }; template struct conditional { using type = _Iffalse; }; template struct common_type; # 2340 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/type_traits" 3 template struct __success_type { using type = _Tp; }; struct __failure_type { }; struct __do_common_type_impl { template using __cond_t = decltype(true ? std::declval<_Tp>() : std::declval<_Up>()); template static __success_type<__decay_t<__cond_t<_Tp, _Up>>> _S_test(int); template static __success_type<__remove_cvref_t<__cond_t>> _S_test_2(int); template static __failure_type _S_test_2(...); template static decltype(_S_test_2<_Tp, _Up>(0)) _S_test(...); }; template<> struct common_type<> { }; template struct common_type<_Tp0> : public common_type<_Tp0, _Tp0> { }; template, typename _Dp2 = __decay_t<_Tp2>> struct __common_type_impl { using type = common_type<_Dp1, _Dp2>; }; template struct __common_type_impl<_Tp1, _Tp2, _Tp1, _Tp2> : private __do_common_type_impl { using type = decltype(_S_test<_Tp1, _Tp2>(0)); }; template struct common_type<_Tp1, _Tp2> : public __common_type_impl<_Tp1, _Tp2>::type { }; template struct __common_type_pack { }; template struct __common_type_fold; template struct common_type<_Tp1, _Tp2, _Rp...> : public __common_type_fold, __common_type_pack<_Rp...>> { }; template struct __common_type_fold<_CTp, __common_type_pack<_Rp...>, __void_t> : public common_type { }; template struct __common_type_fold<_CTp, _Rp, void> { }; template struct __underlying_type_impl { using type = __underlying_type(_Tp); }; template struct __underlying_type_impl<_Tp, false> { }; template struct underlying_type : public __underlying_type_impl<_Tp> { }; template struct __declval_protector { static const bool __stop = false; }; template auto declval() noexcept -> decltype(__declval<_Tp>(0)) { static_assert(__declval_protector<_Tp>::__stop, "declval() must not be used!"); return __declval<_Tp>(0); } template struct result_of; struct __invoke_memfun_ref { }; struct __invoke_memfun_deref { }; struct __invoke_memobj_ref { }; struct __invoke_memobj_deref { }; struct __invoke_other { }; template struct __result_of_success : __success_type<_Tp> { using __invoke_type = _Tag; }; struct __result_of_memfun_ref_impl { template static __result_of_success().*std::declval<_Fp>())(std::declval<_Args>()...) ), __invoke_memfun_ref> _S_test(int); template static __failure_type _S_test(...); }; template struct __result_of_memfun_ref : private __result_of_memfun_ref_impl { using type = decltype(_S_test<_MemPtr, _Arg, _Args...>(0)); }; struct __result_of_memfun_deref_impl { template static __result_of_success()).*std::declval<_Fp>())(std::declval<_Args>()...) ), __invoke_memfun_deref> _S_test(int); template static __failure_type _S_test(...); }; template struct __result_of_memfun_deref : private __result_of_memfun_deref_impl { using type = decltype(_S_test<_MemPtr, _Arg, _Args...>(0)); }; struct __result_of_memobj_ref_impl { template static __result_of_success().*std::declval<_Fp>() ), __invoke_memobj_ref> _S_test(int); template static __failure_type _S_test(...); }; template struct __result_of_memobj_ref : private __result_of_memobj_ref_impl { using type = decltype(_S_test<_MemPtr, _Arg>(0)); }; struct __result_of_memobj_deref_impl { template static __result_of_success()).*std::declval<_Fp>() ), __invoke_memobj_deref> _S_test(int); template static __failure_type _S_test(...); }; template struct __result_of_memobj_deref : private __result_of_memobj_deref_impl { using type = decltype(_S_test<_MemPtr, _Arg>(0)); }; template struct __result_of_memobj; template struct __result_of_memobj<_Res _Class::*, _Arg> { using _Argval = __remove_cvref_t<_Arg>; using _MemPtr = _Res _Class::*; using type = typename __conditional_t<__or_, is_base_of<_Class, _Argval>>::value, __result_of_memobj_ref<_MemPtr, _Arg>, __result_of_memobj_deref<_MemPtr, _Arg> >::type; }; template struct __result_of_memfun; template struct __result_of_memfun<_Res _Class::*, _Arg, _Args...> { using _Argval = typename remove_reference<_Arg>::type; using _MemPtr = _Res _Class::*; using type = typename __conditional_t::value, __result_of_memfun_ref<_MemPtr, _Arg, _Args...>, __result_of_memfun_deref<_MemPtr, _Arg, _Args...> >::type; }; template> struct __inv_unwrap { using type = _Tp; }; template struct __inv_unwrap<_Tp, reference_wrapper<_Up>> { using type = _Up&; }; template struct __result_of_impl { using type = __failure_type; }; template struct __result_of_impl : public __result_of_memobj<__decay_t<_MemPtr>, typename __inv_unwrap<_Arg>::type> { }; template struct __result_of_impl : public __result_of_memfun<__decay_t<_MemPtr>, typename __inv_unwrap<_Arg>::type, _Args...> { }; struct __result_of_other_impl { template static __result_of_success()(std::declval<_Args>()...) ), __invoke_other> _S_test(int); template static __failure_type _S_test(...); }; template struct __result_of_impl : private __result_of_other_impl { using type = decltype(_S_test<_Functor, _ArgTypes...>(0)); }; template struct __invoke_result : public __result_of_impl< is_member_object_pointer< typename remove_reference<_Functor>::type >::value, is_member_function_pointer< typename remove_reference<_Functor>::type >::value, _Functor, _ArgTypes... >::type { }; template using __invoke_result_t = typename __invoke_result<_Fn, _Args...>::type; template struct result_of<_Functor(_ArgTypes...)> : public __invoke_result<_Functor, _ArgTypes...> { } __attribute__ ((__deprecated__ ("use '" "std::invoke_result" "' instead"))); #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wdeprecated-declarations" template::__type)> using aligned_storage_t [[__deprecated__]] = typename aligned_storage<_Len, _Align>::type; template using aligned_union_t [[__deprecated__]] = typename aligned_union<_Len, _Types...>::type; #pragma GCC diagnostic pop template using decay_t = typename decay<_Tp>::type; template using enable_if_t = typename enable_if<_Cond, _Tp>::type; template using conditional_t = typename conditional<_Cond, _Iftrue, _Iffalse>::type; template using common_type_t = typename common_type<_Tp...>::type; template using underlying_type_t = typename underlying_type<_Tp>::type; template using result_of_t = typename result_of<_Tp>::type; template using void_t = void; # 2727 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/type_traits" 3 template class _Op, typename... _Args> struct __detected_or { using type = _Def; using __is_detected = false_type; }; template class _Op, typename... _Args> requires requires { typename _Op<_Args...>; } struct __detected_or<_Def, _Op, _Args...> { using type = _Op<_Args...>; using __is_detected = true_type; }; # 2767 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/type_traits" 3 template class _Op, typename... _Args> using __detected_or_t = typename __detected_or<_Default, _Op, _Args...>::type; # 2786 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/type_traits" 3 template struct __is_swappable; template struct __is_nothrow_swappable; template struct __is_tuple_like_impl : false_type { }; template struct __is_tuple_like : public __is_tuple_like_impl<__remove_cvref_t<_Tp>>::type { }; template constexpr inline _Require<__not_<__is_tuple_like<_Tp>>, is_move_constructible<_Tp>, is_move_assignable<_Tp>> swap(_Tp&, _Tp&) noexcept(__and_, is_nothrow_move_assignable<_Tp>>::value); template constexpr inline __enable_if_t<__is_swappable<_Tp>::value> swap(_Tp (&__a)[_Nm], _Tp (&__b)[_Nm]) noexcept(__is_nothrow_swappable<_Tp>::value); namespace __swappable_details { using std::swap; struct __do_is_swappable_impl { template(), std::declval<_Tp&>()))> static true_type __test(int); template static false_type __test(...); }; struct __do_is_nothrow_swappable_impl { template static __bool_constant< noexcept(swap(std::declval<_Tp&>(), std::declval<_Tp&>())) > __test(int); template static false_type __test(...); }; } template struct __is_swappable_impl : public __swappable_details::__do_is_swappable_impl { using type = decltype(__test<_Tp>(0)); }; template struct __is_nothrow_swappable_impl : public __swappable_details::__do_is_nothrow_swappable_impl { using type = decltype(__test<_Tp>(0)); }; template struct __is_swappable : public __is_swappable_impl<_Tp>::type { }; template struct __is_nothrow_swappable : public __is_nothrow_swappable_impl<_Tp>::type { }; template struct is_swappable : public __is_swappable_impl<_Tp>::type { static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), "template argument must be a complete class or an unbounded array"); }; template struct is_nothrow_swappable : public __is_nothrow_swappable_impl<_Tp>::type { static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), "template argument must be a complete class or an unbounded array"); }; template inline constexpr bool is_swappable_v = is_swappable<_Tp>::value; template inline constexpr bool is_nothrow_swappable_v = is_nothrow_swappable<_Tp>::value; namespace __swappable_with_details { using std::swap; struct __do_is_swappable_with_impl { template(), std::declval<_Up>())), typename = decltype(swap(std::declval<_Up>(), std::declval<_Tp>()))> static true_type __test(int); template static false_type __test(...); }; struct __do_is_nothrow_swappable_with_impl { template static __bool_constant< noexcept(swap(std::declval<_Tp>(), std::declval<_Up>())) && noexcept(swap(std::declval<_Up>(), std::declval<_Tp>())) > __test(int); template static false_type __test(...); }; } template struct __is_swappable_with_impl : public __swappable_with_details::__do_is_swappable_with_impl { using type = decltype(__test<_Tp, _Up>(0)); }; template struct __is_swappable_with_impl<_Tp&, _Tp&> : public __swappable_details::__do_is_swappable_impl { using type = decltype(__test<_Tp&>(0)); }; template struct __is_nothrow_swappable_with_impl : public __swappable_with_details::__do_is_nothrow_swappable_with_impl { using type = decltype(__test<_Tp, _Up>(0)); }; template struct __is_nothrow_swappable_with_impl<_Tp&, _Tp&> : public __swappable_details::__do_is_nothrow_swappable_impl { using type = decltype(__test<_Tp&>(0)); }; template struct is_swappable_with : public __is_swappable_with_impl<_Tp, _Up>::type { static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), "first template argument must be a complete class or an unbounded array"); static_assert(std::__is_complete_or_unbounded(__type_identity<_Up>{}), "second template argument must be a complete class or an unbounded array"); }; template struct is_nothrow_swappable_with : public __is_nothrow_swappable_with_impl<_Tp, _Up>::type { static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), "first template argument must be a complete class or an unbounded array"); static_assert(std::__is_complete_or_unbounded(__type_identity<_Up>{}), "second template argument must be a complete class or an unbounded array"); }; template inline constexpr bool is_swappable_with_v = is_swappable_with<_Tp, _Up>::value; template inline constexpr bool is_nothrow_swappable_with_v = is_nothrow_swappable_with<_Tp, _Up>::value; # 3008 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/type_traits" 3 template::value, typename = void> struct __is_invocable_impl : false_type { using __nothrow_conv = false_type; }; template struct __is_invocable_impl<_Result, _Ret, true, __void_t> : true_type { using __nothrow_conv = true_type; }; #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wctor-dtor-privacy" template struct __is_invocable_impl<_Result, _Ret, false, __void_t> { private: using _Res_t = typename _Result::type; static _Res_t _S_get() noexcept; template static void _S_conv(__type_identity_t<_Tp>) noexcept; template(_S_get())), typename = decltype(_S_conv<_Tp>(_S_get())), bool _Dangle = false > static __bool_constant<_Nothrow && !_Dangle> _S_test(int); template static false_type _S_test(...); public: using type = decltype(_S_test<_Ret, true>(1)); using __nothrow_conv = decltype(_S_test<_Ret>(1)); }; #pragma GCC diagnostic pop template struct __is_invocable : __is_invocable_impl<__invoke_result<_Fn, _ArgTypes...>, void>::type { }; template constexpr bool __call_is_nt(__invoke_memfun_ref) { using _Up = typename __inv_unwrap<_Tp>::type; return noexcept((std::declval<_Up>().*std::declval<_Fn>())( std::declval<_Args>()...)); } template constexpr bool __call_is_nt(__invoke_memfun_deref) { return noexcept(((*std::declval<_Tp>()).*std::declval<_Fn>())( std::declval<_Args>()...)); } template constexpr bool __call_is_nt(__invoke_memobj_ref) { using _Up = typename __inv_unwrap<_Tp>::type; return noexcept(std::declval<_Up>().*std::declval<_Fn>()); } template constexpr bool __call_is_nt(__invoke_memobj_deref) { return noexcept((*std::declval<_Tp>()).*std::declval<_Fn>()); } template constexpr bool __call_is_nt(__invoke_other) { return noexcept(std::declval<_Fn>()(std::declval<_Args>()...)); } template struct __call_is_nothrow : __bool_constant< std::__call_is_nt<_Fn, _Args...>(typename _Result::__invoke_type{}) > { }; template using __call_is_nothrow_ = __call_is_nothrow<__invoke_result<_Fn, _Args...>, _Fn, _Args...>; template struct __is_nothrow_invocable : __and_<__is_invocable<_Fn, _Args...>, __call_is_nothrow_<_Fn, _Args...>>::type { }; #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wctor-dtor-privacy" struct __nonesuchbase {}; struct __nonesuch : private __nonesuchbase { ~__nonesuch() = delete; __nonesuch(__nonesuch const&) = delete; void operator=(__nonesuch const&) = delete; }; #pragma GCC diagnostic pop template struct invoke_result : public __invoke_result<_Functor, _ArgTypes...> { static_assert(std::__is_complete_or_unbounded(__type_identity<_Functor>{}), "_Functor must be a complete class or an unbounded array"); static_assert((std::__is_complete_or_unbounded( __type_identity<_ArgTypes>{}) && ...), "each argument type must be a complete class or an unbounded array"); }; template using invoke_result_t = typename invoke_result<_Fn, _Args...>::type; template struct is_invocable : __is_invocable_impl<__invoke_result<_Fn, _ArgTypes...>, void>::type { static_assert(std::__is_complete_or_unbounded(__type_identity<_Fn>{}), "_Fn must be a complete class or an unbounded array"); static_assert((std::__is_complete_or_unbounded( __type_identity<_ArgTypes>{}) && ...), "each argument type must be a complete class or an unbounded array"); }; template struct is_invocable_r : __is_invocable_impl<__invoke_result<_Fn, _ArgTypes...>, _Ret>::type { static_assert(std::__is_complete_or_unbounded(__type_identity<_Fn>{}), "_Fn must be a complete class or an unbounded array"); static_assert((std::__is_complete_or_unbounded( __type_identity<_ArgTypes>{}) && ...), "each argument type must be a complete class or an unbounded array"); static_assert(std::__is_complete_or_unbounded(__type_identity<_Ret>{}), "_Ret must be a complete class or an unbounded array"); }; template struct is_nothrow_invocable : __and_<__is_invocable_impl<__invoke_result<_Fn, _ArgTypes...>, void>, __call_is_nothrow_<_Fn, _ArgTypes...>>::type { static_assert(std::__is_complete_or_unbounded(__type_identity<_Fn>{}), "_Fn must be a complete class or an unbounded array"); static_assert((std::__is_complete_or_unbounded( __type_identity<_ArgTypes>{}) && ...), "each argument type must be a complete class or an unbounded array"); }; template using __is_nt_invocable_impl = typename __is_invocable_impl<_Result, _Ret>::__nothrow_conv; template struct is_nothrow_invocable_r : __and_<__is_nt_invocable_impl<__invoke_result<_Fn, _ArgTypes...>, _Ret>, __call_is_nothrow_<_Fn, _ArgTypes...>>::type { static_assert(std::__is_complete_or_unbounded(__type_identity<_Fn>{}), "_Fn must be a complete class or an unbounded array"); static_assert((std::__is_complete_or_unbounded( __type_identity<_ArgTypes>{}) && ...), "each argument type must be a complete class or an unbounded array"); static_assert(std::__is_complete_or_unbounded(__type_identity<_Ret>{}), "_Ret must be a complete class or an unbounded array"); }; # 3236 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/type_traits" 3 template inline constexpr bool is_void_v = is_void<_Tp>::value; template inline constexpr bool is_null_pointer_v = is_null_pointer<_Tp>::value; template inline constexpr bool is_integral_v = is_integral<_Tp>::value; template inline constexpr bool is_floating_point_v = is_floating_point<_Tp>::value; template inline constexpr bool is_array_v = __is_array(_Tp); # 3257 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/type_traits" 3 template inline constexpr bool is_pointer_v = is_pointer<_Tp>::value; template inline constexpr bool is_lvalue_reference_v = false; template inline constexpr bool is_lvalue_reference_v<_Tp&> = true; template inline constexpr bool is_rvalue_reference_v = false; template inline constexpr bool is_rvalue_reference_v<_Tp&&> = true; template inline constexpr bool is_member_object_pointer_v = __is_member_object_pointer(_Tp); template inline constexpr bool is_member_function_pointer_v = __is_member_function_pointer(_Tp); template inline constexpr bool is_enum_v = __is_enum(_Tp); template inline constexpr bool is_union_v = __is_union(_Tp); template inline constexpr bool is_class_v = __is_class(_Tp); template inline constexpr bool is_reference_v = __is_reference(_Tp); # 3308 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/type_traits" 3 template inline constexpr bool is_arithmetic_v = is_arithmetic<_Tp>::value; template inline constexpr bool is_fundamental_v = is_fundamental<_Tp>::value; template inline constexpr bool is_object_v = __is_object(_Tp); template inline constexpr bool is_scalar_v = is_scalar<_Tp>::value; template inline constexpr bool is_compound_v = !is_fundamental_v<_Tp>; template inline constexpr bool is_member_pointer_v = __is_member_pointer(_Tp); template inline constexpr bool is_const_v = false; template inline constexpr bool is_const_v = true; template inline constexpr bool is_function_v = __is_function(_Tp); # 3351 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/type_traits" 3 template inline constexpr bool is_volatile_v = false; template inline constexpr bool is_volatile_v = true; template inline constexpr bool is_trivial_v = __is_trivial(_Tp); template inline constexpr bool is_trivially_copyable_v = __is_trivially_copyable(_Tp); template inline constexpr bool is_standard_layout_v = __is_standard_layout(_Tp); template __attribute__ ((__deprecated__ ("use '" "is_standard_layout_v && is_trivial_v" "' instead"))) inline constexpr bool is_pod_v = __is_pod(_Tp); template [[__deprecated__]] inline constexpr bool is_literal_type_v = __is_literal_type(_Tp); template inline constexpr bool is_empty_v = __is_empty(_Tp); template inline constexpr bool is_polymorphic_v = __is_polymorphic(_Tp); template inline constexpr bool is_abstract_v = __is_abstract(_Tp); template inline constexpr bool is_final_v = __is_final(_Tp); template inline constexpr bool is_signed_v = is_signed<_Tp>::value; template inline constexpr bool is_unsigned_v = is_unsigned<_Tp>::value; template inline constexpr bool is_constructible_v = __is_constructible(_Tp, _Args...); template inline constexpr bool is_default_constructible_v = __is_constructible(_Tp); template inline constexpr bool is_copy_constructible_v = __is_constructible(_Tp, __add_lval_ref_t); template inline constexpr bool is_move_constructible_v = __is_constructible(_Tp, __add_rval_ref_t<_Tp>); template inline constexpr bool is_assignable_v = __is_assignable(_Tp, _Up); template inline constexpr bool is_copy_assignable_v = __is_assignable(__add_lval_ref_t<_Tp>, __add_lval_ref_t); template inline constexpr bool is_move_assignable_v = __is_assignable(__add_lval_ref_t<_Tp>, __add_rval_ref_t<_Tp>); template inline constexpr bool is_destructible_v = is_destructible<_Tp>::value; template inline constexpr bool is_trivially_constructible_v = __is_trivially_constructible(_Tp, _Args...); template inline constexpr bool is_trivially_default_constructible_v = __is_trivially_constructible(_Tp); template inline constexpr bool is_trivially_copy_constructible_v = __is_trivially_constructible(_Tp, __add_lval_ref_t); template inline constexpr bool is_trivially_move_constructible_v = __is_trivially_constructible(_Tp, __add_rval_ref_t<_Tp>); template inline constexpr bool is_trivially_assignable_v = __is_trivially_assignable(_Tp, _Up); template inline constexpr bool is_trivially_copy_assignable_v = __is_trivially_assignable(__add_lval_ref_t<_Tp>, __add_lval_ref_t); template inline constexpr bool is_trivially_move_assignable_v = __is_trivially_assignable(__add_lval_ref_t<_Tp>, __add_rval_ref_t<_Tp>); template inline constexpr bool is_trivially_destructible_v = false; template requires (!is_reference_v<_Tp>) && requires (_Tp& __t) { __t.~_Tp(); } inline constexpr bool is_trivially_destructible_v<_Tp> = __has_trivial_destructor(_Tp); template inline constexpr bool is_trivially_destructible_v<_Tp&> = true; template inline constexpr bool is_trivially_destructible_v<_Tp&&> = true; template inline constexpr bool is_trivially_destructible_v<_Tp[_Nm]> = is_trivially_destructible_v<_Tp>; template inline constexpr bool is_nothrow_constructible_v = __is_nothrow_constructible(_Tp, _Args...); template inline constexpr bool is_nothrow_default_constructible_v = __is_nothrow_constructible(_Tp); template inline constexpr bool is_nothrow_copy_constructible_v = __is_nothrow_constructible(_Tp, __add_lval_ref_t); template inline constexpr bool is_nothrow_move_constructible_v = __is_nothrow_constructible(_Tp, __add_rval_ref_t<_Tp>); template inline constexpr bool is_nothrow_assignable_v = __is_nothrow_assignable(_Tp, _Up); template inline constexpr bool is_nothrow_copy_assignable_v = __is_nothrow_assignable(__add_lval_ref_t<_Tp>, __add_lval_ref_t); template inline constexpr bool is_nothrow_move_assignable_v = __is_nothrow_assignable(__add_lval_ref_t<_Tp>, __add_rval_ref_t<_Tp>); template inline constexpr bool is_nothrow_destructible_v = is_nothrow_destructible<_Tp>::value; template inline constexpr bool has_virtual_destructor_v = __has_virtual_destructor(_Tp); template inline constexpr size_t alignment_of_v = alignment_of<_Tp>::value; template inline constexpr size_t rank_v = 0; template inline constexpr size_t rank_v<_Tp[_Size]> = 1 + rank_v<_Tp>; template inline constexpr size_t rank_v<_Tp[]> = 1 + rank_v<_Tp>; template inline constexpr size_t extent_v = 0; template inline constexpr size_t extent_v<_Tp[_Size], 0> = _Size; template inline constexpr size_t extent_v<_Tp[_Size], _Idx> = extent_v<_Tp, _Idx - 1>; template inline constexpr size_t extent_v<_Tp[], 0> = 0; template inline constexpr size_t extent_v<_Tp[], _Idx> = extent_v<_Tp, _Idx - 1>; template inline constexpr bool is_same_v = __is_same(_Tp, _Up); template inline constexpr bool is_base_of_v = __is_base_of(_Base, _Derived); template inline constexpr bool is_convertible_v = __is_convertible(_From, _To); template inline constexpr bool is_invocable_v = is_invocable<_Fn, _Args...>::value; template inline constexpr bool is_nothrow_invocable_v = is_nothrow_invocable<_Fn, _Args...>::value; template inline constexpr bool is_invocable_r_v = is_invocable_r<_Ret, _Fn, _Args...>::value; template inline constexpr bool is_nothrow_invocable_r_v = is_nothrow_invocable_r<_Ret, _Fn, _Args...>::value; template struct has_unique_object_representations : bool_constant<__has_unique_object_representations( remove_cv_t> )> { static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), "template argument must be a complete class or an unbounded array"); }; template inline constexpr bool has_unique_object_representations_v = has_unique_object_representations<_Tp>::value; template struct is_aggregate : bool_constant<__is_aggregate(remove_cv_t<_Tp>)> { }; template inline constexpr bool is_aggregate_v = __is_aggregate(remove_cv_t<_Tp>); # 3581 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/type_traits" 3 template struct remove_cvref { using type = __remove_cvref(_Tp); }; # 3598 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/type_traits" 3 template using remove_cvref_t = typename remove_cvref<_Tp>::type; # 3608 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/type_traits" 3 template struct type_identity { using type = _Tp; }; template using type_identity_t = typename type_identity<_Tp>::type; # 3621 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/type_traits" 3 template struct unwrap_reference { using type = _Tp; }; template struct unwrap_reference> { using type = _Tp&; }; template using unwrap_reference_t = typename unwrap_reference<_Tp>::type; template struct unwrap_ref_decay { using type = unwrap_reference_t>; }; template using unwrap_ref_decay_t = typename unwrap_ref_decay<_Tp>::type; # 3648 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/type_traits" 3 template inline constexpr bool is_bounded_array_v = __is_bounded_array(_Tp); # 3661 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/type_traits" 3 template inline constexpr bool is_unbounded_array_v = false; template inline constexpr bool is_unbounded_array_v<_Tp[]> = true; template struct is_bounded_array : public bool_constant> { }; template struct is_unbounded_array : public bool_constant> { }; # 3744 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/type_traits" 3 template struct is_scoped_enum : bool_constant<__is_scoped_enum(_Tp)> { }; # 3765 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/type_traits" 3 template inline constexpr bool is_scoped_enum_v = __is_scoped_enum(_Tp); # 3816 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/type_traits" 3 constexpr inline bool is_constant_evaluated() noexcept { if consteval { return true; } else { return false; } } template using __copy_cv = typename __match_cv_qualifiers<_From, _To>::__type; template using __cond_res = decltype(false ? declval<_Xp(&)()>()() : declval<_Yp(&)()>()()); template struct __common_ref_impl { }; template using __common_ref = typename __common_ref_impl<_Ap, _Bp>::type; template using __condres_cvref = __cond_res<__copy_cv<_Xp, _Yp>&, __copy_cv<_Yp, _Xp>&>; template struct __common_ref_impl<_Xp&, _Yp&, __void_t<__condres_cvref<_Xp, _Yp>>> : enable_if>, __condres_cvref<_Xp, _Yp>> { }; template using __common_ref_C = remove_reference_t<__common_ref<_Xp&, _Yp&>>&&; template struct __common_ref_impl<_Xp&&, _Yp&&, _Require>, is_convertible<_Yp&&, __common_ref_C<_Xp, _Yp>>>> { using type = __common_ref_C<_Xp, _Yp>; }; template using __common_ref_D = __common_ref; template struct __common_ref_impl<_Xp&&, _Yp&, _Require>>> { using type = __common_ref_D<_Xp, _Yp>; }; template struct __common_ref_impl<_Xp&, _Yp&&> : __common_ref_impl<_Yp&&, _Xp&> { }; template class _TQual, template class _UQual> struct basic_common_reference { }; template struct __xref { template using __type = __copy_cv<_Tp, _Up>; }; template struct __xref<_Tp&> { template using __type = __copy_cv<_Tp, _Up>&; }; template struct __xref<_Tp&&> { template using __type = __copy_cv<_Tp, _Up>&&; }; template using __basic_common_ref = typename basic_common_reference, remove_cvref_t<_Tp2>, __xref<_Tp1>::template __type, __xref<_Tp2>::template __type>::type; template struct common_reference; template using common_reference_t = typename common_reference<_Tp...>::type; template<> struct common_reference<> { }; template struct common_reference<_Tp0> { using type = _Tp0; }; template struct __common_reference_impl : __common_reference_impl<_Tp1, _Tp2, _Bullet + 1> { }; template struct common_reference<_Tp1, _Tp2> : __common_reference_impl<_Tp1, _Tp2> { }; template struct __common_reference_impl<_Tp1&, _Tp2&, 1, void_t<__common_ref<_Tp1&, _Tp2&>>> { using type = __common_ref<_Tp1&, _Tp2&>; }; template struct __common_reference_impl<_Tp1&&, _Tp2&&, 1, void_t<__common_ref<_Tp1&&, _Tp2&&>>> { using type = __common_ref<_Tp1&&, _Tp2&&>; }; template struct __common_reference_impl<_Tp1&, _Tp2&&, 1, void_t<__common_ref<_Tp1&, _Tp2&&>>> { using type = __common_ref<_Tp1&, _Tp2&&>; }; template struct __common_reference_impl<_Tp1&&, _Tp2&, 1, void_t<__common_ref<_Tp1&&, _Tp2&>>> { using type = __common_ref<_Tp1&&, _Tp2&>; }; template struct __common_reference_impl<_Tp1, _Tp2, 2, void_t<__basic_common_ref<_Tp1, _Tp2>>> { using type = __basic_common_ref<_Tp1, _Tp2>; }; template struct __common_reference_impl<_Tp1, _Tp2, 3, void_t<__cond_res<_Tp1, _Tp2>>> { using type = __cond_res<_Tp1, _Tp2>; }; template struct __common_reference_impl<_Tp1, _Tp2, 4, void_t>> { using type = common_type_t<_Tp1, _Tp2>; }; template struct __common_reference_impl<_Tp1, _Tp2, 5, void> { }; template struct common_reference<_Tp1, _Tp2, _Rest...> : __common_type_fold, __common_type_pack<_Rest...>> { }; template struct __common_type_fold, __common_type_pack<_Rest...>, void_t>> : public common_reference, _Rest...> { }; } # 61 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_pair.h" 2 3 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/move.h" 1 3 # 40 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/move.h" 3 namespace std __attribute__ ((__visibility__ ("default"))) { template inline constexpr _Tp* __addressof(_Tp& __r) noexcept { return __builtin_addressof(__r); } # 67 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/move.h" 3 template [[__nodiscard__]] constexpr _Tp&& forward(typename std::remove_reference<_Tp>::type& __t) noexcept { return static_cast<_Tp&&>(__t); } template [[__nodiscard__]] constexpr _Tp&& forward(typename std::remove_reference<_Tp>::type&& __t) noexcept { static_assert(!std::is_lvalue_reference<_Tp>::value, "std::forward must not be used to convert an rvalue to an lvalue"); return static_cast<_Tp&&>(__t); } template [[nodiscard]] constexpr decltype(auto) forward_like(_Up&& __x) noexcept { constexpr bool __as_rval = is_rvalue_reference_v<_Tp&&>; if constexpr (is_const_v>) { using _Up2 = remove_reference_t<_Up>; if constexpr (__as_rval) return static_cast(__x); else return static_cast(__x); } else { if constexpr (__as_rval) return static_cast&&>(__x); else return static_cast<_Up&>(__x); } } template using __like_t = decltype(std::forward_like<_Tp>(std::declval<_Up>())); template [[__nodiscard__]] constexpr typename std::remove_reference<_Tp>::type&& move(_Tp&& __t) noexcept { return static_cast::type&&>(__t); } template struct __move_if_noexcept_cond : public __and_<__not_>, is_copy_constructible<_Tp>>::type { }; # 143 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/move.h" 3 template [[__nodiscard__]] constexpr __conditional_t<__move_if_noexcept_cond<_Tp>::value, const _Tp&, _Tp&&> move_if_noexcept(_Tp& __x) noexcept { return std::move(__x); } # 159 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/move.h" 3 template [[__nodiscard__]] inline constexpr _Tp* addressof(_Tp& __r) noexcept { return std::__addressof(__r); } template const _Tp* addressof(const _Tp&&) = delete; template constexpr inline _Tp __exchange(_Tp& __obj, _Up&& __new_val) { _Tp __old_val = std::move(__obj); __obj = std::forward<_Up>(__new_val); return __old_val; } # 203 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/move.h" 3 template constexpr inline typename enable_if<__and_<__not_<__is_tuple_like<_Tp>>, is_move_constructible<_Tp>, is_move_assignable<_Tp>>::value>::type swap(_Tp& __a, _Tp& __b) noexcept(__and_, is_nothrow_move_assignable<_Tp>>::value) { _Tp __tmp = std::move(__a); __a = std::move(__b); __b = std::move(__tmp); } template constexpr inline typename enable_if<__is_swappable<_Tp>::value>::type swap(_Tp (&__a)[_Nm], _Tp (&__b)[_Nm]) noexcept(__is_nothrow_swappable<_Tp>::value) { for (size_t __n = 0; __n < _Nm; ++__n) swap(__a[__n], __b[__n]); } } # 62 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_pair.h" 2 3 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/utility.h" 1 3 # 37 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/utility.h" 3 namespace std __attribute__ ((__visibility__ ("default"))) { template struct tuple_size; template::type, typename = typename enable_if::value>::type, size_t = tuple_size<_Tp>::value> using __enable_if_has_tuple_size = _Tp; template struct tuple_size> : public tuple_size<_Tp> { }; template struct tuple_size> : public tuple_size<_Tp> { }; template struct tuple_size> : public tuple_size<_Tp> { }; template inline constexpr size_t tuple_size_v = tuple_size<_Tp>::value; template struct tuple_element; template using __tuple_element_t = typename tuple_element<__i, _Tp>::type; template struct tuple_element<__i, const _Tp> { using type = const __tuple_element_t<__i, _Tp>; }; template struct tuple_element<__i, volatile _Tp> { using type = volatile __tuple_element_t<__i, _Tp>; }; template struct tuple_element<__i, const volatile _Tp> { using type = const volatile __tuple_element_t<__i, _Tp>; }; template constexpr size_t __find_uniq_type_in_pack() { constexpr size_t __sz = sizeof...(_Types); constexpr bool __found[__sz] = { __is_same(_Tp, _Types) ... }; size_t __n = __sz; for (size_t __i = 0; __i < __sz; ++__i) { if (__found[__i]) { if (__n < __sz) return __sz; __n = __i; } } return __n; } # 134 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/utility.h" 3 template using tuple_element_t = typename tuple_element<__i, _Tp>::type; template struct _Index_tuple { }; template struct _Build_index_tuple { template using _IdxTuple = _Index_tuple<_Indices...>; using __type = __make_integer_seq<_IdxTuple, size_t, _Num>; }; template struct integer_sequence { static_assert(is_integral_v<_Tp>); typedef _Tp value_type; static constexpr size_t size() noexcept { return sizeof...(_Idx); } }; template using make_integer_sequence = __make_integer_seq; template using index_sequence = integer_sequence; template using make_index_sequence = make_integer_sequence; template using index_sequence_for = make_index_sequence; struct in_place_t { explicit in_place_t() = default; }; inline constexpr in_place_t in_place{}; template struct in_place_type_t { explicit in_place_type_t() = default; }; template inline constexpr in_place_type_t<_Tp> in_place_type{}; template struct in_place_index_t { explicit in_place_index_t() = default; }; template inline constexpr in_place_index_t<_Idx> in_place_index{}; template inline constexpr bool __is_in_place_type_v = false; template inline constexpr bool __is_in_place_type_v> = true; template using __is_in_place_type = bool_constant<__is_in_place_type_v<_Tp>>; template inline constexpr bool __is_in_place_index_v = false; template inline constexpr bool __is_in_place_index_v> = true; template struct _Nth_type { using type = __type_pack_element<_Np, _Types...>; }; # 276 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/utility.h" 3 namespace ranges::__detail { template inline constexpr bool __is_subrange = false; } } # 63 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_pair.h" 2 3 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/compare" 1 3 # 34 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/compare" 3 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/version.h" 1 3 # 48 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/version.h" 3 # 37 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/compare" 2 3 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/concepts" 1 3 # 34 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/concepts" 3 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/version.h" 1 3 # 48 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/version.h" 3 # 37 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/concepts" 2 3 # 48 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/concepts" 3 namespace std __attribute__ ((__visibility__ ("default"))) { namespace __detail { template concept __same_as = std::is_same_v<_Tp, _Up>; } template concept same_as = __detail::__same_as<_Tp, _Up> && __detail::__same_as<_Up, _Tp>; namespace __detail { template concept __different_from = !same_as, remove_cvref_t<_Up>>; } template concept derived_from = __is_base_of(_Base, _Derived) && is_convertible_v; template concept convertible_to = is_convertible_v<_From, _To> && requires { static_cast<_To>(std::declval<_From>()); }; template concept common_reference_with = same_as, common_reference_t<_Up, _Tp>> && convertible_to<_Tp, common_reference_t<_Tp, _Up>> && convertible_to<_Up, common_reference_t<_Tp, _Up>>; template concept common_with = same_as, common_type_t<_Up, _Tp>> && requires { static_cast>(std::declval<_Tp>()); static_cast>(std::declval<_Up>()); } && common_reference_with, add_lvalue_reference_t> && common_reference_with>, common_reference_t< add_lvalue_reference_t, add_lvalue_reference_t>>; template concept integral = is_integral_v<_Tp>; template concept signed_integral = integral<_Tp> && is_signed_v<_Tp>; template concept unsigned_integral = integral<_Tp> && !signed_integral<_Tp>; template concept floating_point = is_floating_point_v<_Tp>; namespace __detail { template using __cref = const remove_reference_t<_Tp>&; template concept __class_or_enum = is_class_v<_Tp> || is_union_v<_Tp> || is_enum_v<_Tp>; template constexpr bool __destructible_impl = false; template requires requires(_Tp& __t) { { __t.~_Tp() } noexcept; } constexpr bool __destructible_impl<_Tp> = true; template constexpr bool __destructible = __destructible_impl<_Tp>; template constexpr bool __destructible<_Tp&> = true; template constexpr bool __destructible<_Tp&&> = true; template constexpr bool __destructible<_Tp[_Nm]> = __destructible<_Tp>; } template concept assignable_from = is_lvalue_reference_v<_Lhs> && common_reference_with<__detail::__cref<_Lhs>, __detail::__cref<_Rhs>> && requires(_Lhs __lhs, _Rhs&& __rhs) { { __lhs = static_cast<_Rhs&&>(__rhs) } -> same_as<_Lhs>; }; template concept destructible = __detail::__destructible<_Tp>; template concept constructible_from = destructible<_Tp> && is_constructible_v<_Tp, _Args...>; template concept default_initializable = constructible_from<_Tp> && requires { _Tp{}; (void) ::new _Tp; }; template concept move_constructible = constructible_from<_Tp, _Tp> && convertible_to<_Tp, _Tp>; template concept copy_constructible = move_constructible<_Tp> && constructible_from<_Tp, _Tp&> && convertible_to<_Tp&, _Tp> && constructible_from<_Tp, const _Tp&> && convertible_to && constructible_from<_Tp, const _Tp> && convertible_to; namespace ranges { namespace __swap { template void swap(_Tp&, _Tp&) = delete; template concept __adl_swap = (std::__detail::__class_or_enum> || std::__detail::__class_or_enum>) && requires(_Tp&& __t, _Up&& __u) { swap(static_cast<_Tp&&>(__t), static_cast<_Up&&>(__u)); }; struct _Swap { private: template static constexpr bool _S_noexcept() { if constexpr (__adl_swap<_Tp, _Up>) return noexcept(swap(std::declval<_Tp>(), std::declval<_Up>())); else return is_nothrow_move_constructible_v> && is_nothrow_move_assignable_v>; } public: template requires __adl_swap<_Tp, _Up> || (same_as<_Tp, _Up> && is_lvalue_reference_v<_Tp> && move_constructible> && assignable_from<_Tp, remove_reference_t<_Tp>>) constexpr void operator()(_Tp&& __t, _Up&& __u) const noexcept(_S_noexcept<_Tp, _Up>()) { if constexpr (__adl_swap<_Tp, _Up>) swap(static_cast<_Tp&&>(__t), static_cast<_Up&&>(__u)); else { auto __tmp = static_cast&&>(__t); __t = static_cast&&>(__u); __u = static_cast&&>(__tmp); } } template requires requires(const _Swap& __swap, _Tp& __e1, _Up& __e2) { __swap(__e1, __e2); } constexpr void operator()(_Tp (&__e1)[_Num], _Up (&__e2)[_Num]) const noexcept(noexcept(std::declval()(*__e1, *__e2))) { for (size_t __n = 0; __n < _Num; ++__n) (*this)(__e1[__n], __e2[__n]); } }; } inline namespace _Cpo { inline constexpr __swap::_Swap swap{}; } } template concept swappable = requires(_Tp& __a, _Tp& __b) { ranges::swap(__a, __b); }; template concept swappable_with = common_reference_with<_Tp, _Up> && requires(_Tp&& __t, _Up&& __u) { ranges::swap(static_cast<_Tp&&>(__t), static_cast<_Tp&&>(__t)); ranges::swap(static_cast<_Up&&>(__u), static_cast<_Up&&>(__u)); ranges::swap(static_cast<_Tp&&>(__t), static_cast<_Up&&>(__u)); ranges::swap(static_cast<_Up&&>(__u), static_cast<_Tp&&>(__t)); }; template concept movable = is_object_v<_Tp> && move_constructible<_Tp> && assignable_from<_Tp&, _Tp> && swappable<_Tp>; template concept copyable = copy_constructible<_Tp> && movable<_Tp> && assignable_from<_Tp&, _Tp&> && assignable_from<_Tp&, const _Tp&> && assignable_from<_Tp&, const _Tp>; template concept semiregular = copyable<_Tp> && default_initializable<_Tp>; namespace __detail { template concept __boolean_testable_impl = convertible_to<_Tp, bool>; template concept __boolean_testable = __boolean_testable_impl<_Tp> && requires(_Tp&& __t) { { !static_cast<_Tp&&>(__t) } -> __boolean_testable_impl; }; } namespace __detail { template concept __weakly_eq_cmp_with = requires(__detail::__cref<_Tp> __t, __detail::__cref<_Up> __u) { { __t == __u } -> __boolean_testable; { __t != __u } -> __boolean_testable; { __u == __t } -> __boolean_testable; { __u != __t } -> __boolean_testable; }; } template concept equality_comparable = __detail::__weakly_eq_cmp_with<_Tp, _Tp>; template concept equality_comparable_with = equality_comparable<_Tp> && equality_comparable<_Up> && common_reference_with<__detail::__cref<_Tp>, __detail::__cref<_Up>> && equality_comparable, __detail::__cref<_Up>>> && __detail::__weakly_eq_cmp_with<_Tp, _Up>; namespace __detail { template concept __partially_ordered_with = requires(const remove_reference_t<_Tp>& __t, const remove_reference_t<_Up>& __u) { { __t < __u } -> __boolean_testable; { __t > __u } -> __boolean_testable; { __t <= __u } -> __boolean_testable; { __t >= __u } -> __boolean_testable; { __u < __t } -> __boolean_testable; { __u > __t } -> __boolean_testable; { __u <= __t } -> __boolean_testable; { __u >= __t } -> __boolean_testable; }; } template concept totally_ordered = equality_comparable<_Tp> && __detail::__partially_ordered_with<_Tp, _Tp>; template concept totally_ordered_with = totally_ordered<_Tp> && totally_ordered<_Up> && equality_comparable_with<_Tp, _Up> && totally_ordered, __detail::__cref<_Up>>> && __detail::__partially_ordered_with<_Tp, _Up>; template concept regular = semiregular<_Tp> && equality_comparable<_Tp>; template concept invocable = is_invocable_v<_Fn, _Args...>; template concept regular_invocable = invocable<_Fn, _Args...>; template concept predicate = regular_invocable<_Fn, _Args...> && __detail::__boolean_testable>; template concept relation = predicate<_Rel, _Tp, _Tp> && predicate<_Rel, _Up, _Up> && predicate<_Rel, _Tp, _Up> && predicate<_Rel, _Up, _Tp>; template concept equivalence_relation = relation<_Rel, _Tp, _Up>; template concept strict_weak_order = relation<_Rel, _Tp, _Up>; } # 41 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/compare" 2 3 namespace std __attribute__ ((__visibility__ ("default"))) { namespace __cmp_cat { using type = signed char; enum class _Ord : type { equivalent = 0, less = -1, greater = 1 }; enum class _Ncmp : type { _Unordered = 2 }; struct __unspec { consteval __unspec(__unspec*) noexcept { } }; } class partial_ordering { __cmp_cat::type _M_value; constexpr explicit partial_ordering(__cmp_cat::_Ord __v) noexcept : _M_value(__cmp_cat::type(__v)) { } constexpr explicit partial_ordering(__cmp_cat::_Ncmp __v) noexcept : _M_value(__cmp_cat::type(__v)) { } friend class weak_ordering; friend class strong_ordering; public: static const partial_ordering less; static const partial_ordering equivalent; static const partial_ordering greater; static const partial_ordering unordered; [[nodiscard]] friend constexpr bool operator==(partial_ordering __v, __cmp_cat::__unspec) noexcept { return __v._M_value == 0; } [[nodiscard]] friend constexpr bool operator==(partial_ordering, partial_ordering) noexcept = default; [[nodiscard]] friend constexpr bool operator< (partial_ordering __v, __cmp_cat::__unspec) noexcept { return __v._M_value == -1; } [[nodiscard]] friend constexpr bool operator> (partial_ordering __v, __cmp_cat::__unspec) noexcept { return __v._M_value == 1; } [[nodiscard]] friend constexpr bool operator<=(partial_ordering __v, __cmp_cat::__unspec) noexcept { return __v._M_value <= 0; } [[nodiscard]] friend constexpr bool operator>=(partial_ordering __v, __cmp_cat::__unspec) noexcept { return __cmp_cat::type(__v._M_value & 1) == __v._M_value; } [[nodiscard]] friend constexpr bool operator< (__cmp_cat::__unspec, partial_ordering __v) noexcept { return __v._M_value == 1; } [[nodiscard]] friend constexpr bool operator> (__cmp_cat::__unspec, partial_ordering __v) noexcept { return __v._M_value == -1; } [[nodiscard]] friend constexpr bool operator<=(__cmp_cat::__unspec, partial_ordering __v) noexcept { return __cmp_cat::type(__v._M_value & 1) == __v._M_value; } [[nodiscard]] friend constexpr bool operator>=(__cmp_cat::__unspec, partial_ordering __v) noexcept { return 0 >= __v._M_value; } [[nodiscard]] friend constexpr partial_ordering operator<=>(partial_ordering __v, __cmp_cat::__unspec) noexcept { return __v; } [[nodiscard]] friend constexpr partial_ordering operator<=>(__cmp_cat::__unspec, partial_ordering __v) noexcept { if (__v._M_value & 1) return partial_ordering(__cmp_cat::_Ord(-__v._M_value)); else return __v; } }; inline constexpr partial_ordering partial_ordering::less(__cmp_cat::_Ord::less); inline constexpr partial_ordering partial_ordering::equivalent(__cmp_cat::_Ord::equivalent); inline constexpr partial_ordering partial_ordering::greater(__cmp_cat::_Ord::greater); inline constexpr partial_ordering partial_ordering::unordered(__cmp_cat::_Ncmp::_Unordered); class weak_ordering { __cmp_cat::type _M_value; constexpr explicit weak_ordering(__cmp_cat::_Ord __v) noexcept : _M_value(__cmp_cat::type(__v)) { } friend class strong_ordering; public: static const weak_ordering less; static const weak_ordering equivalent; static const weak_ordering greater; [[nodiscard]] constexpr operator partial_ordering() const noexcept { return partial_ordering(__cmp_cat::_Ord(_M_value)); } [[nodiscard]] friend constexpr bool operator==(weak_ordering __v, __cmp_cat::__unspec) noexcept { return __v._M_value == 0; } [[nodiscard]] friend constexpr bool operator==(weak_ordering, weak_ordering) noexcept = default; [[nodiscard]] friend constexpr bool operator< (weak_ordering __v, __cmp_cat::__unspec) noexcept { return __v._M_value < 0; } [[nodiscard]] friend constexpr bool operator> (weak_ordering __v, __cmp_cat::__unspec) noexcept { return __v._M_value > 0; } [[nodiscard]] friend constexpr bool operator<=(weak_ordering __v, __cmp_cat::__unspec) noexcept { return __v._M_value <= 0; } [[nodiscard]] friend constexpr bool operator>=(weak_ordering __v, __cmp_cat::__unspec) noexcept { return __v._M_value >= 0; } [[nodiscard]] friend constexpr bool operator< (__cmp_cat::__unspec, weak_ordering __v) noexcept { return 0 < __v._M_value; } [[nodiscard]] friend constexpr bool operator> (__cmp_cat::__unspec, weak_ordering __v) noexcept { return 0 > __v._M_value; } [[nodiscard]] friend constexpr bool operator<=(__cmp_cat::__unspec, weak_ordering __v) noexcept { return 0 <= __v._M_value; } [[nodiscard]] friend constexpr bool operator>=(__cmp_cat::__unspec, weak_ordering __v) noexcept { return 0 >= __v._M_value; } [[nodiscard]] friend constexpr weak_ordering operator<=>(weak_ordering __v, __cmp_cat::__unspec) noexcept { return __v; } [[nodiscard]] friend constexpr weak_ordering operator<=>(__cmp_cat::__unspec, weak_ordering __v) noexcept { return weak_ordering(__cmp_cat::_Ord(-__v._M_value)); } }; inline constexpr weak_ordering weak_ordering::less(__cmp_cat::_Ord::less); inline constexpr weak_ordering weak_ordering::equivalent(__cmp_cat::_Ord::equivalent); inline constexpr weak_ordering weak_ordering::greater(__cmp_cat::_Ord::greater); class strong_ordering { __cmp_cat::type _M_value; constexpr explicit strong_ordering(__cmp_cat::_Ord __v) noexcept : _M_value(__cmp_cat::type(__v)) { } public: static const strong_ordering less; static const strong_ordering equal; static const strong_ordering equivalent; static const strong_ordering greater; [[nodiscard]] constexpr operator partial_ordering() const noexcept { return partial_ordering(__cmp_cat::_Ord(_M_value)); } [[nodiscard]] constexpr operator weak_ordering() const noexcept { return weak_ordering(__cmp_cat::_Ord(_M_value)); } [[nodiscard]] friend constexpr bool operator==(strong_ordering __v, __cmp_cat::__unspec) noexcept { return __v._M_value == 0; } [[nodiscard]] friend constexpr bool operator==(strong_ordering, strong_ordering) noexcept = default; [[nodiscard]] friend constexpr bool operator< (strong_ordering __v, __cmp_cat::__unspec) noexcept { return __v._M_value < 0; } [[nodiscard]] friend constexpr bool operator> (strong_ordering __v, __cmp_cat::__unspec) noexcept { return __v._M_value > 0; } [[nodiscard]] friend constexpr bool operator<=(strong_ordering __v, __cmp_cat::__unspec) noexcept { return __v._M_value <= 0; } [[nodiscard]] friend constexpr bool operator>=(strong_ordering __v, __cmp_cat::__unspec) noexcept { return __v._M_value >= 0; } [[nodiscard]] friend constexpr bool operator< (__cmp_cat::__unspec, strong_ordering __v) noexcept { return 0 < __v._M_value; } [[nodiscard]] friend constexpr bool operator> (__cmp_cat::__unspec, strong_ordering __v) noexcept { return 0 > __v._M_value; } [[nodiscard]] friend constexpr bool operator<=(__cmp_cat::__unspec, strong_ordering __v) noexcept { return 0 <= __v._M_value; } [[nodiscard]] friend constexpr bool operator>=(__cmp_cat::__unspec, strong_ordering __v) noexcept { return 0 >= __v._M_value; } [[nodiscard]] friend constexpr strong_ordering operator<=>(strong_ordering __v, __cmp_cat::__unspec) noexcept { return __v; } [[nodiscard]] friend constexpr strong_ordering operator<=>(__cmp_cat::__unspec, strong_ordering __v) noexcept { return strong_ordering(__cmp_cat::_Ord(-__v._M_value)); } }; inline constexpr strong_ordering strong_ordering::less(__cmp_cat::_Ord::less); inline constexpr strong_ordering strong_ordering::equal(__cmp_cat::_Ord::equivalent); inline constexpr strong_ordering strong_ordering::equivalent(__cmp_cat::_Ord::equivalent); inline constexpr strong_ordering strong_ordering::greater(__cmp_cat::_Ord::greater); [[nodiscard]] constexpr bool is_eq(partial_ordering __cmp) noexcept { return __cmp == 0; } [[nodiscard]] constexpr bool is_neq(partial_ordering __cmp) noexcept { return __cmp != 0; } [[nodiscard]] constexpr bool is_lt (partial_ordering __cmp) noexcept { return __cmp < 0; } [[nodiscard]] constexpr bool is_lteq(partial_ordering __cmp) noexcept { return __cmp <= 0; } [[nodiscard]] constexpr bool is_gt (partial_ordering __cmp) noexcept { return __cmp > 0; } [[nodiscard]] constexpr bool is_gteq(partial_ordering __cmp) noexcept { return __cmp >= 0; } namespace __detail { template inline constexpr unsigned __cmp_cat_id = 1; template<> inline constexpr unsigned __cmp_cat_id = 2; template<> inline constexpr unsigned __cmp_cat_id = 4; template<> inline constexpr unsigned __cmp_cat_id = 8; template constexpr auto __common_cmp_cat() { constexpr unsigned __cats = (__cmp_cat_id<_Ts> | ...); if constexpr (__cats & 1) return; else if constexpr (bool(__cats & __cmp_cat_id)) return partial_ordering::equivalent; else if constexpr (bool(__cats & __cmp_cat_id)) return weak_ordering::equivalent; else return strong_ordering::equivalent; } } template struct common_comparison_category { using type = decltype(__detail::__common_cmp_cat<_Ts...>()); }; template struct common_comparison_category<_Tp> { using type = void; }; template<> struct common_comparison_category { using type = partial_ordering; }; template<> struct common_comparison_category { using type = weak_ordering; }; template<> struct common_comparison_category { using type = strong_ordering; }; template<> struct common_comparison_category<> { using type = strong_ordering; }; template using common_comparison_category_t = typename common_comparison_category<_Ts...>::type; namespace __detail { template concept __compares_as = same_as, _Cat>; } template concept three_way_comparable = __detail::__weakly_eq_cmp_with<_Tp, _Tp> && __detail::__partially_ordered_with<_Tp, _Tp> && requires(const remove_reference_t<_Tp>& __a, const remove_reference_t<_Tp>& __b) { { __a <=> __b } -> __detail::__compares_as<_Cat>; }; template concept three_way_comparable_with = three_way_comparable<_Tp, _Cat> && three_way_comparable<_Up, _Cat> && common_reference_with&, const remove_reference_t<_Up>&> && three_way_comparable< common_reference_t&, const remove_reference_t<_Up>&>, _Cat> && __detail::__weakly_eq_cmp_with<_Tp, _Up> && __detail::__partially_ordered_with<_Tp, _Up> && requires(const remove_reference_t<_Tp>& __t, const remove_reference_t<_Up>& __u) { { __t <=> __u } -> __detail::__compares_as<_Cat>; { __u <=> __t } -> __detail::__compares_as<_Cat>; }; namespace __detail { template using __cmp3way_res_t = decltype(std::declval<_Tp>() <=> std::declval<_Up>()); template struct __cmp3way_res_impl { }; template requires requires { typename __cmp3way_res_t<__cref<_Tp>, __cref<_Up>>; } struct __cmp3way_res_impl<_Tp, _Up> { using type = __cmp3way_res_t<__cref<_Tp>, __cref<_Up>>; }; } template struct compare_three_way_result : __detail::__cmp3way_res_impl<_Tp, _Up> { }; template using compare_three_way_result_t = typename __detail::__cmp3way_res_impl<_Tp, _Up>::type; namespace __detail { template concept __3way_builtin_ptr_cmp = requires(_Tp&& __t, _Up&& __u) { static_cast<_Tp&&>(__t) <=> static_cast<_Up&&>(__u); } && convertible_to<_Tp, const volatile void*> && convertible_to<_Up, const volatile void*> && ! requires(_Tp&& __t, _Up&& __u) { operator<=>(static_cast<_Tp&&>(__t), static_cast<_Up&&>(__u)); } && ! requires(_Tp&& __t, _Up&& __u) { static_cast<_Tp&&>(__t).operator<=>(static_cast<_Up&&>(__u)); }; } struct compare_three_way { template requires three_way_comparable_with<_Tp, _Up> constexpr auto operator() [[nodiscard]] (_Tp&& __t, _Up&& __u) const noexcept(noexcept(std::declval<_Tp>() <=> std::declval<_Up>())) { if constexpr (__detail::__3way_builtin_ptr_cmp<_Tp, _Up>) { auto __pt = static_cast(__t); auto __pu = static_cast(__u); if (std::__is_constant_evaluated()) return __pt <=> __pu; auto __it = reinterpret_cast(__pt); auto __iu = reinterpret_cast(__pu); return __it <=> __iu; } else return static_cast<_Tp&&>(__t) <=> static_cast<_Up&&>(__u); } using is_transparent = void; }; namespace __compare { template constexpr weak_ordering __fp_weak_ordering(_Tp __e, _Tp __f) { auto __cat = [](_Tp __fp) -> int { const int __sign = __builtin_signbit(__fp) ? -1 : 1; if (__builtin_isnormal(__fp)) return (__fp == 0 ? 1 : 3) * __sign; if (__builtin_isnan(__fp)) return 5 * __sign; if (int __inf = __builtin_isinf_sign(__fp)) return 4 * __inf; return 2 * __sign; }; auto __po = __e <=> __f; if (is_lt(__po)) return weak_ordering::less; else if (is_gt(__po)) return weak_ordering::greater; else if (__po == partial_ordering::equivalent) return weak_ordering::equivalent; else { auto __isnan_sign = [](_Tp __fp) -> int { return __builtin_isnan(__fp) ? __builtin_signbit(__fp) ? -1 : 1 : 0; }; auto __ord = __isnan_sign(__e) <=> __isnan_sign(__f); if (is_eq(__ord)) return weak_ordering::equivalent; else if (is_lt(__ord)) return weak_ordering::less; else return weak_ordering::greater; } } void strong_order() = delete; template concept __adl_strong = requires(_Tp&& __t, _Up&& __u) { strong_ordering(strong_order(static_cast<_Tp&&>(__t), static_cast<_Up&&>(__u))); }; void weak_order() = delete; template concept __adl_weak = requires(_Tp&& __t, _Up&& __u) { weak_ordering(weak_order(static_cast<_Tp&&>(__t), static_cast<_Up&&>(__u))); }; void partial_order() = delete; template concept __adl_partial = requires(_Tp&& __t, _Up&& __u) { partial_ordering(partial_order(static_cast<_Tp&&>(__t), static_cast<_Up&&>(__u))); }; template concept __cmp3way = requires(_Tp&& __t, _Up&& __u, compare_three_way __c) { _Ord(__c(static_cast<_Tp&&>(__t), static_cast<_Up&&>(__u))); }; template concept __strongly_ordered = __adl_strong<_Tp, _Up> || floating_point> || __cmp3way; template concept __decayed_same_as = same_as, decay_t<_Up>>; class _Strong_order { template static constexpr bool _S_noexcept() { if constexpr (floating_point>) return true; else if constexpr (__adl_strong<_Tp, _Up>) return noexcept(strong_ordering(strong_order(std::declval<_Tp>(), std::declval<_Up>()))); else if constexpr (__cmp3way) return noexcept(compare_three_way()(std::declval<_Tp>(), std::declval<_Up>())); } friend class _Weak_order; friend class _Strong_fallback; enum class _Fp_fmt { _Binary16, _Binary32, _Binary64, _Binary128, _X86_80bit, _M68k_80bit, _Dbldbl, _Bfloat16, }; # 699 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/compare" 3 template static consteval _Fp_fmt _S_fp_fmt() noexcept { using enum _Fp_fmt; # 719 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/compare" 3 if constexpr (__is_same(_Tp, long double)) return (-16381) == -16381 ? _X86_80bit : _M68k_80bit; # 731 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/compare" 3 constexpr int __width = sizeof(_Tp) * 8; if constexpr (__width == 16) return _Binary16; else if constexpr (__width == 32) return _Binary32; else if constexpr (__width == 64) return _Binary64; else if constexpr (__width == 128) return _Binary128; } using int64_t = long int; using int32_t = int; using int16_t = short; using uint64_t = long unsigned int; using uint16_t = unsigned short; template struct _Int { uint64_t _M_lo; _Tp _M_hi; constexpr explicit _Int(_Tp __hi, uint64_t __lo) noexcept : _M_hi(__hi) { _M_lo = __lo; } constexpr explicit _Int(uint64_t __lo) noexcept : _M_hi(0) { _M_lo = __lo; } constexpr bool operator==(const _Int&) const = default; # 781 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/compare" 3 constexpr _Int& operator^=(const _Int& __rhs) noexcept { _M_hi ^= __rhs._M_hi; _M_lo ^= __rhs._M_lo; return *this; } constexpr strong_ordering operator<=>(const _Int& __rhs) const noexcept { strong_ordering __cmp = _M_hi <=> __rhs._M_hi; if (__cmp != strong_ordering::equal) return __cmp; return _M_lo <=> __rhs._M_lo; } }; template static constexpr _Tp _S_compl(_Tp __t) noexcept { constexpr int __width = sizeof(_Tp) * 8; make_unsigned_t<_Tp> __sign = __t >> (__width - 1); return __t ^ (__sign >> 1); } template static constexpr _Int<_Tp> _S_compl(_Int<_Tp> __t) noexcept { constexpr int __width = sizeof(_Tp) * 8; make_unsigned_t<_Tp> __sign = __t._M_hi >> (__width - 1); __t._M_hi ^= (__sign >> 1 ); uint64_t __sign64 = (_Tp)__sign; __t._M_lo ^= __sign64; return __t; } template constexpr static auto _S_fp_bits(_Tp __val) noexcept { if constexpr (sizeof(_Tp) == sizeof(int64_t)) return __builtin_bit_cast(int64_t, __val); else if constexpr (sizeof(_Tp) == sizeof(int32_t)) return __builtin_bit_cast(int32_t, __val); else if constexpr (sizeof(_Tp) == sizeof(int16_t)) return __builtin_bit_cast(int16_t, __val); else { using enum _Fp_fmt; constexpr auto __fmt = _S_fp_fmt<_Tp>(); if constexpr (__fmt == _X86_80bit || __fmt == _M68k_80bit) { if constexpr (sizeof(_Tp) == 3 * sizeof(int32_t)) { auto __ival = __builtin_bit_cast(_Int, __val); return _Int(__ival._M_hi, __ival._M_lo); } else { auto __ival = __builtin_bit_cast(_Int, __val); return _Int(__ival._M_hi, __ival._M_lo); } } else if constexpr (sizeof(_Tp) == 2 * sizeof(int64_t)) { return __builtin_bit_cast(__int128, __val); } else static_assert(sizeof(_Tp) == sizeof(int64_t), "unsupported floating-point type"); } } template static constexpr strong_ordering _S_fp_cmp(_Tp __x, _Tp __y) noexcept { # 885 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/compare" 3 auto __ix = _S_fp_bits(__x); auto __iy = _S_fp_bits(__y); if (__ix == __iy) return strong_ordering::equal; using enum _Fp_fmt; constexpr auto __fmt = _S_fp_fmt<_Tp>(); if constexpr (__fmt == _Dbldbl) { struct _Unpacked { double _M_hi; int64_t _M_lo; }; auto __x2 = __builtin_bit_cast(_Unpacked, __x); auto __y2 = __builtin_bit_cast(_Unpacked, __y); auto __cmp = _S_fp_cmp(__x2._M_hi, __y2._M_hi); if (__cmp != strong_ordering::equal) return __cmp; if (__builtin_isnan(__x2._M_hi)) return strong_ordering::equal; if (((__x2._M_lo | __y2._M_lo) & 0x7fffffffffffffffULL) == 0) return strong_ordering::equal; return _S_compl(__x2._M_lo) <=> _S_compl(__y2._M_lo); } else { if constexpr (__fmt == _M68k_80bit) { constexpr uint16_t __maxexp = 0x7fff; if ((__ix._M_hi & __maxexp) == __maxexp) __ix._M_lo |= 1ull << 63; if ((__iy._M_hi & __maxexp) == __maxexp) __iy._M_lo |= 1ull << 63; } else { # 952 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/compare" 3 } return _S_compl(__ix) <=> _S_compl(__iy); } } public: template _Up> requires __strongly_ordered<_Tp, _Up> constexpr strong_ordering operator() [[nodiscard]] (_Tp&& __e, _Up&& __f) const noexcept(_S_noexcept<_Tp, _Up>()) { if constexpr (floating_point>) return _S_fp_cmp(__e, __f); else if constexpr (__adl_strong<_Tp, _Up>) return strong_ordering(strong_order(static_cast<_Tp&&>(__e), static_cast<_Up&&>(__f))); else if constexpr (__cmp3way) return compare_three_way()(static_cast<_Tp&&>(__e), static_cast<_Up&&>(__f)); } }; template concept __weakly_ordered = floating_point> || __adl_weak<_Tp, _Up> || __cmp3way || __strongly_ordered<_Tp, _Up>; class _Weak_order { template static constexpr bool _S_noexcept() { if constexpr (floating_point>) return true; else if constexpr (__adl_weak<_Tp, _Up>) return noexcept(weak_ordering(weak_order(std::declval<_Tp>(), std::declval<_Up>()))); else if constexpr (__cmp3way) return noexcept(compare_three_way()(std::declval<_Tp>(), std::declval<_Up>())); else if constexpr (__strongly_ordered<_Tp, _Up>) return _Strong_order::_S_noexcept<_Tp, _Up>(); } friend class _Partial_order; friend class _Weak_fallback; public: template _Up> requires __weakly_ordered<_Tp, _Up> constexpr weak_ordering operator() [[nodiscard]] (_Tp&& __e, _Up&& __f) const noexcept(_S_noexcept<_Tp, _Up>()) { if constexpr (floating_point>) return __compare::__fp_weak_ordering(__e, __f); else if constexpr (__adl_weak<_Tp, _Up>) return weak_ordering(weak_order(static_cast<_Tp&&>(__e), static_cast<_Up&&>(__f))); else if constexpr (__cmp3way) return compare_three_way()(static_cast<_Tp&&>(__e), static_cast<_Up&&>(__f)); else if constexpr (__strongly_ordered<_Tp, _Up>) return _Strong_order{}(static_cast<_Tp&&>(__e), static_cast<_Up&&>(__f)); } }; template concept __partially_ordered = __adl_partial<_Tp, _Up> || __cmp3way || __weakly_ordered<_Tp, _Up>; class _Partial_order { template static constexpr bool _S_noexcept() { if constexpr (__adl_partial<_Tp, _Up>) return noexcept(partial_ordering(partial_order(std::declval<_Tp>(), std::declval<_Up>()))); else if constexpr (__cmp3way) return noexcept(compare_three_way()(std::declval<_Tp>(), std::declval<_Up>())); else if constexpr (__weakly_ordered<_Tp, _Up>) return _Weak_order::_S_noexcept<_Tp, _Up>(); } friend class _Partial_fallback; public: template _Up> requires __partially_ordered<_Tp, _Up> constexpr partial_ordering operator() [[nodiscard]] (_Tp&& __e, _Up&& __f) const noexcept(_S_noexcept<_Tp, _Up>()) { if constexpr (__adl_partial<_Tp, _Up>) return partial_ordering(partial_order(static_cast<_Tp&&>(__e), static_cast<_Up&&>(__f))); else if constexpr (__cmp3way) return compare_three_way()(static_cast<_Tp&&>(__e), static_cast<_Up&&>(__f)); else if constexpr (__weakly_ordered<_Tp, _Up>) return _Weak_order{}(static_cast<_Tp&&>(__e), static_cast<_Up&&>(__f)); } }; template concept __op_eq_lt = requires(_Tp&& __t, _Up&& __u) { { static_cast<_Tp&&>(__t) == static_cast<_Up&&>(__u) } -> convertible_to; { static_cast<_Tp&&>(__t) < static_cast<_Up&&>(__u) } -> convertible_to; }; class _Strong_fallback { template static constexpr bool _S_noexcept() { if constexpr (__strongly_ordered<_Tp, _Up>) return _Strong_order::_S_noexcept<_Tp, _Up>(); else return noexcept(bool(std::declval<_Tp>() == std::declval<_Up>())) && noexcept(bool(std::declval<_Tp>() < std::declval<_Up>())); } public: template _Up> requires __strongly_ordered<_Tp, _Up> || __op_eq_lt<_Tp, _Up> constexpr strong_ordering operator() [[nodiscard]] (_Tp&& __e, _Up&& __f) const noexcept(_S_noexcept<_Tp, _Up>()) { if constexpr (__strongly_ordered<_Tp, _Up>) return _Strong_order{}(static_cast<_Tp&&>(__e), static_cast<_Up&&>(__f)); else return static_cast<_Tp&&>(__e) == static_cast<_Up&&>(__f) ? strong_ordering::equal : static_cast<_Tp&&>(__e) < static_cast<_Up&&>(__f) ? strong_ordering::less : strong_ordering::greater; } }; class _Weak_fallback { template static constexpr bool _S_noexcept() { if constexpr (__weakly_ordered<_Tp, _Up>) return _Weak_order::_S_noexcept<_Tp, _Up>(); else return noexcept(bool(std::declval<_Tp>() == std::declval<_Up>())) && noexcept(bool(std::declval<_Tp>() < std::declval<_Up>())); } public: template _Up> requires __weakly_ordered<_Tp, _Up> || __op_eq_lt<_Tp, _Up> constexpr weak_ordering operator() [[nodiscard]] (_Tp&& __e, _Up&& __f) const noexcept(_S_noexcept<_Tp, _Up>()) { if constexpr (__weakly_ordered<_Tp, _Up>) return _Weak_order{}(static_cast<_Tp&&>(__e), static_cast<_Up&&>(__f)); else return static_cast<_Tp&&>(__e) == static_cast<_Up&&>(__f) ? weak_ordering::equivalent : static_cast<_Tp&&>(__e) < static_cast<_Up&&>(__f) ? weak_ordering::less : weak_ordering::greater; } }; template concept __op_eq_lt_lt = __op_eq_lt<_Tp, _Up> && requires(_Tp&& __t, _Up&& __u) { { static_cast<_Up&&>(__u) < static_cast<_Tp&&>(__t) } -> convertible_to; }; class _Partial_fallback { template static constexpr bool _S_noexcept() { if constexpr (__partially_ordered<_Tp, _Up>) return _Partial_order::_S_noexcept<_Tp, _Up>(); else return noexcept(bool(std::declval<_Tp>() == std::declval<_Up>())) && noexcept(bool(std::declval<_Tp>() < std::declval<_Up>())); } public: template _Up> requires __partially_ordered<_Tp, _Up> || __op_eq_lt_lt<_Tp, _Up> constexpr partial_ordering operator() [[nodiscard]] (_Tp&& __e, _Up&& __f) const noexcept(_S_noexcept<_Tp, _Up>()) { if constexpr (__partially_ordered<_Tp, _Up>) return _Partial_order{}(static_cast<_Tp&&>(__e), static_cast<_Up&&>(__f)); else return static_cast<_Tp&&>(__e) == static_cast<_Up&&>(__f) ? partial_ordering::equivalent : static_cast<_Tp&&>(__e) < static_cast<_Up&&>(__f) ? partial_ordering::less : static_cast<_Up&&>(__f) < static_cast<_Tp&&>(__e) ? partial_ordering::greater : partial_ordering::unordered; } }; } inline namespace _Cpo { inline constexpr __compare::_Strong_order strong_order{}; inline constexpr __compare::_Weak_order weak_order{}; inline constexpr __compare::_Partial_order partial_order{}; inline constexpr __compare::_Strong_fallback compare_strong_order_fallback{}; inline constexpr __compare::_Weak_fallback compare_weak_order_fallback{}; inline constexpr __compare::_Partial_fallback compare_partial_order_fallback{}; } namespace __detail { inline constexpr struct _Synth3way { template static constexpr bool _S_noexcept(const _Tp* __t = nullptr, const _Up* __u = nullptr) { if constexpr (three_way_comparable_with<_Tp, _Up>) return noexcept(*__t <=> *__u); else return noexcept(*__t < *__u) && noexcept(*__u < *__t); } template [[nodiscard]] constexpr auto operator()(const _Tp& __t, const _Up& __u) const noexcept(_S_noexcept<_Tp, _Up>()) requires requires { { __t < __u } -> __boolean_testable; { __u < __t } -> __boolean_testable; } { if constexpr (three_way_comparable_with<_Tp, _Up>) return __t <=> __u; else { if (__t < __u) return weak_ordering::less; else if (__u < __t) return weak_ordering::greater; else return weak_ordering::equivalent; } } } __synth3way = {}; template using __synth3way_t = decltype(__detail::__synth3way(std::declval<_Tp&>(), std::declval<_Up&>())); } } # 66 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_pair.h" 2 3 namespace std __attribute__ ((__visibility__ ("default"))) { # 79 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_pair.h" 3 struct piecewise_construct_t { explicit piecewise_construct_t() = default; }; inline constexpr piecewise_construct_t piecewise_construct = piecewise_construct_t(); template struct pair; template class tuple; template struct array; template struct _Index_tuple; template constexpr typename tuple_element<_Int, pair<_Tp1, _Tp2>>::type& get(pair<_Tp1, _Tp2>& __in) noexcept; template constexpr typename tuple_element<_Int, pair<_Tp1, _Tp2>>::type&& get(pair<_Tp1, _Tp2>&& __in) noexcept; template constexpr const typename tuple_element<_Int, pair<_Tp1, _Tp2>>::type& get(const pair<_Tp1, _Tp2>& __in) noexcept; template constexpr const typename tuple_element<_Int, pair<_Tp1, _Tp2>>::type&& get(const pair<_Tp1, _Tp2>&& __in) noexcept; template constexpr __tuple_element_t<__i, tuple<_Elements...>>& get(tuple<_Elements...>& __t) noexcept; template constexpr const __tuple_element_t<__i, tuple<_Elements...>>& get(const tuple<_Elements...>& __t) noexcept; template constexpr __tuple_element_t<__i, tuple<_Elements...>>&& get(tuple<_Elements...>&& __t) noexcept; template constexpr const __tuple_element_t<__i, tuple<_Elements...>>&& get(const tuple<_Elements...>&& __t) noexcept; template constexpr _Tp& get(array<_Tp, _Nm>&) noexcept; template constexpr _Tp&& get(array<_Tp, _Nm>&&) noexcept; template constexpr const _Tp& get(const array<_Tp, _Nm>&) noexcept; template constexpr const _Tp&& get(const array<_Tp, _Nm>&&) noexcept; # 221 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_pair.h" 3 template inline constexpr bool __is_tuple_v = false; template inline constexpr bool __is_tuple_v> = true; template inline constexpr bool __is_tuple_like_v = false; template inline constexpr bool __is_tuple_like_v> = true; template inline constexpr bool __is_tuple_like_v> = true; template inline constexpr bool __is_tuple_like_v> = true; template concept __tuple_like = __is_tuple_like_v>; template concept __pair_like = __tuple_like<_Tp> && tuple_size_v> == 2; template concept __eligible_tuple_like = __detail::__different_from<_Tp, _Tuple> && __tuple_like<_Tp> && (tuple_size_v> == tuple_size_v<_Tuple>) && !ranges::__detail::__is_subrange>; template concept __eligible_pair_like = __detail::__different_from<_Tp, _Pair> && __pair_like<_Tp> && !ranges::__detail::__is_subrange>; template class __pair_base { }; # 283 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_pair.h" 3 template struct pair : public __pair_base<_T1, _T2> { typedef _T1 first_type; typedef _T2 second_type; _T1 first; _T2 second; constexpr pair(const pair&) = default; constexpr pair(pair&&) = default; template constexpr pair(piecewise_construct_t, tuple<_Args1...>, tuple<_Args2...>); constexpr void swap(pair& __p) noexcept(__and_<__is_nothrow_swappable<_T1>, __is_nothrow_swappable<_T2>>::value) { using std::swap; swap(first, __p.first); swap(second, __p.second); } # 319 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_pair.h" 3 constexpr void swap(const pair& __p) const noexcept(__and_v<__is_nothrow_swappable, __is_nothrow_swappable>) requires is_swappable_v && is_swappable_v { using std::swap; swap(first, __p.first); swap(second, __p.second); } private: template constexpr pair(tuple<_Args1...>&, tuple<_Args2...>&, _Index_tuple<_Indexes1...>, _Index_tuple<_Indexes2...>); public: constexpr explicit(__not_<__and_<__is_implicitly_default_constructible<_T1>, __is_implicitly_default_constructible<_T2>>>()) pair() requires is_default_constructible_v<_T1> && is_default_constructible_v<_T2> : first(), second() { } private: template static constexpr bool _S_constructible() { if constexpr (is_constructible_v<_T1, _U1>) return is_constructible_v<_T2, _U2>; return false; } template static constexpr bool _S_nothrow_constructible() { if constexpr (is_nothrow_constructible_v<_T1, _U1>) return is_nothrow_constructible_v<_T2, _U2>; return false; } template static constexpr bool _S_convertible() { if constexpr (is_convertible_v<_U1, _T1>) return is_convertible_v<_U2, _T2>; return false; } template static constexpr bool _S_dangles() { if constexpr (__reference_constructs_from_temporary(_T1, _U1&&)) return true; else return __reference_constructs_from_temporary(_T2, _U2&&); } template static constexpr bool _S_constructible_from_pair_like() { return _S_constructible(std::declval<_UPair>())), decltype(std::get<1>(std::declval<_UPair>()))>(); } template static constexpr bool _S_convertible_from_pair_like() { return _S_convertible(std::declval<_UPair>())), decltype(std::get<1>(std::declval<_UPair>()))>(); } template static constexpr bool _S_dangles_from_pair_like() { return _S_dangles(std::declval<_UPair>())), decltype(std::get<1>(std::declval<_UPair>()))>(); } public: constexpr explicit(!_S_convertible()) pair(const _T1& __x, const _T2& __y) noexcept(_S_nothrow_constructible()) requires (_S_constructible()) : first(__x), second(__y) { } template requires (_S_constructible<_U1, _U2>()) && (!_S_dangles<_U1, _U2>()) constexpr explicit(!_S_convertible<_U1, _U2>()) pair(_U1&& __x, _U2&& __y) noexcept(_S_nothrow_constructible<_U1, _U2>()) : first(std::forward<_U1>(__x)), second(std::forward<_U2>(__y)) { } template requires (_S_constructible<_U1, _U2>()) && (_S_dangles<_U1, _U2>()) constexpr explicit(!_S_convertible<_U1, _U2>()) pair(_U1&&, _U2&&) = delete; template requires (_S_constructible()) && (!_S_dangles<_U1, _U2>()) constexpr explicit(!_S_convertible()) pair(const pair<_U1, _U2>& __p) noexcept(_S_nothrow_constructible()) : first(__p.first), second(__p.second) { } template requires (_S_constructible()) && (_S_dangles()) constexpr explicit(!_S_convertible()) pair(const pair<_U1, _U2>&) = delete; template requires (_S_constructible<_U1, _U2>()) && (!_S_dangles<_U1, _U2>()) constexpr explicit(!_S_convertible<_U1, _U2>()) pair(pair<_U1, _U2>&& __p) noexcept(_S_nothrow_constructible<_U1, _U2>()) : first(std::forward<_U1>(__p.first)), second(std::forward<_U2>(__p.second)) { } template requires (_S_constructible<_U1, _U2>()) && (_S_dangles<_U1, _U2>()) constexpr explicit(!_S_convertible<_U1, _U2>()) pair(pair<_U1, _U2>&&) = delete; template requires (_S_constructible<_U1&, _U2&>()) && (!_S_dangles<_U1&, _U2&>()) constexpr explicit(!_S_convertible<_U1&, _U2&>()) pair(pair<_U1, _U2>& __p) noexcept(_S_nothrow_constructible<_U1&, _U2&>()) : first(__p.first), second(__p.second) { } template requires (_S_constructible<_U1&, _U2&>()) && (_S_dangles<_U1&, _U2&>()) constexpr explicit(!_S_convertible<_U1&, _U2&>()) pair(pair<_U1, _U2>&) = delete; template requires (_S_constructible()) && (!_S_dangles()) constexpr explicit(!_S_convertible()) pair(const pair<_U1, _U2>&& __p) noexcept(_S_nothrow_constructible()) : first(std::forward(__p.first)), second(std::forward(__p.second)) { } template requires (_S_constructible()) && (_S_dangles()) constexpr explicit(!_S_convertible()) pair(const pair<_U1, _U2>&&) = delete; template<__eligible_pair_like _UPair> requires (_S_constructible_from_pair_like<_UPair>()) && (!_S_dangles_from_pair_like<_UPair>()) constexpr explicit(!_S_convertible_from_pair_like<_UPair>()) pair(_UPair&& __p) : first(std::get<0>(std::forward<_UPair>(__p))), second(std::get<1>(std::forward<_UPair>(__p))) { } template<__eligible_pair_like _UPair> requires (_S_constructible_from_pair_like<_UPair>()) && (_S_dangles_from_pair_like<_UPair>()) constexpr explicit(!_S_convertible_from_pair_like<_UPair>()) pair(_UPair&&) = delete; private: template static constexpr bool _S_assignable() { if constexpr (is_assignable_v<_T1&, _U1>) return is_assignable_v<_T2&, _U2>; return false; } template static constexpr bool _S_const_assignable() { if constexpr (is_assignable_v) return is_assignable_v; return false; } template static constexpr bool _S_nothrow_assignable() { if constexpr (is_nothrow_assignable_v<_T1&, _U1>) return is_nothrow_assignable_v<_T2&, _U2>; return false; } template static constexpr bool _S_assignable_from_tuple_like() { return _S_assignable(std::declval<_UPair>())), decltype(std::get<1>(std::declval<_UPair>()))>(); } template static constexpr bool _S_const_assignable_from_tuple_like() { return _S_const_assignable(std::declval<_UPair>())), decltype(std::get<1>(std::declval<_UPair>()))>(); } public: pair& operator=(const pair&) = delete; constexpr pair& operator=(const pair& __p) noexcept(_S_nothrow_assignable()) requires (_S_assignable()) { first = __p.first; second = __p.second; return *this; } constexpr pair& operator=(pair&& __p) noexcept(_S_nothrow_assignable<_T1, _T2>()) requires (_S_assignable<_T1, _T2>()) { first = std::forward(__p.first); second = std::forward(__p.second); return *this; } template constexpr pair& operator=(const pair<_U1, _U2>& __p) noexcept(_S_nothrow_assignable()) requires (_S_assignable()) { first = __p.first; second = __p.second; return *this; } template constexpr pair& operator=(pair<_U1, _U2>&& __p) noexcept(_S_nothrow_assignable<_U1, _U2>()) requires (_S_assignable<_U1, _U2>()) { first = std::forward<_U1>(__p.first); second = std::forward<_U2>(__p.second); return *this; } constexpr const pair& operator=(const pair& __p) const requires (_S_const_assignable()) { first = __p.first; second = __p.second; return *this; } constexpr const pair& operator=(pair&& __p) const requires (_S_const_assignable()) { first = std::forward(__p.first); second = std::forward(__p.second); return *this; } template constexpr const pair& operator=(const pair<_U1, _U2>& __p) const requires (_S_const_assignable()) { first = __p.first; second = __p.second; return *this; } template constexpr const pair& operator=(pair<_U1, _U2>&& __p) const requires (_S_const_assignable<_U1, _U2>()) { first = std::forward<_U1>(__p.first); second = std::forward<_U2>(__p.second); return *this; } template<__eligible_pair_like _UPair> requires (_S_assignable_from_tuple_like<_UPair>()) constexpr pair& operator=(_UPair&& __p) { first = std::get<0>(std::forward<_UPair>(__p)); second = std::get<1>(std::forward<_UPair>(__p)); return *this; } template<__eligible_pair_like _UPair> requires (_S_const_assignable_from_tuple_like<_UPair>()) constexpr const pair& operator=(_UPair&& __p) const { first = std::get<0>(std::forward<_UPair>(__p)); second = std::get<1>(std::forward<_UPair>(__p)); return *this; } # 995 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_pair.h" 3 }; template pair(_T1, _T2) -> pair<_T1, _T2>; template inline constexpr bool operator==(const pair<_T1, _T2>& __x, const pair<_U1, _U2>& __y) { return __x.first == __y.first && __x.second == __y.second; } # 1020 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_pair.h" 3 template constexpr common_comparison_category_t<__detail::__synth3way_t<_T1, _U1>, __detail::__synth3way_t<_T2, _U2>> operator<=>(const pair<_T1, _T2>& __x, const pair<_U1, _U2>& __y) { if (auto __c = __detail::__synth3way(__x.first, __y.first); __c != 0) return __c; return __detail::__synth3way(__x.second, __y.second); } # 1080 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_pair.h" 3 template constexpr inline typename enable_if<__and_<__is_swappable<_T1>, __is_swappable<_T2>>::value>::type swap(pair<_T1, _T2>& __x, pair<_T1, _T2>& __y) noexcept(noexcept(__x.swap(__y))) { __x.swap(__y); } template requires is_swappable_v && is_swappable_v constexpr void swap(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) noexcept(noexcept(__x.swap(__y))) { __x.swap(__y); } template typename enable_if, __is_swappable<_T2>>::value>::type swap(pair<_T1, _T2>&, pair<_T1, _T2>&) = delete; # 1129 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_pair.h" 3 template constexpr pair::__type, typename __decay_and_strip<_T2>::__type> make_pair(_T1&& __x, _T2&& __y) { typedef typename __decay_and_strip<_T1>::__type __ds_type1; typedef typename __decay_and_strip<_T2>::__type __ds_type2; typedef pair<__ds_type1, __ds_type2> __pair_type; return __pair_type(std::forward<_T1>(__x), std::forward<_T2>(__y)); } # 1152 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_pair.h" 3 template struct __is_tuple_like_impl> : true_type { }; template struct tuple_size> : public integral_constant { }; template struct tuple_element<0, pair<_Tp1, _Tp2>> { typedef _Tp1 type; }; template struct tuple_element<1, pair<_Tp1, _Tp2>> { typedef _Tp2 type; }; template struct tuple_element<__i, tuple<_Types...>>; template inline constexpr size_t tuple_size_v> = 2; template inline constexpr size_t tuple_size_v> = 2; template inline constexpr bool __is_pair = false; template inline constexpr bool __is_pair> = true; template struct __pair_get; template<> struct __pair_get<0> { template static constexpr _Tp1& __get(pair<_Tp1, _Tp2>& __pair) noexcept { return __pair.first; } template static constexpr _Tp1&& __move_get(pair<_Tp1, _Tp2>&& __pair) noexcept { return std::forward<_Tp1>(__pair.first); } template static constexpr const _Tp1& __const_get(const pair<_Tp1, _Tp2>& __pair) noexcept { return __pair.first; } template static constexpr const _Tp1&& __const_move_get(const pair<_Tp1, _Tp2>&& __pair) noexcept { return std::forward(__pair.first); } }; template<> struct __pair_get<1> { template static constexpr _Tp2& __get(pair<_Tp1, _Tp2>& __pair) noexcept { return __pair.second; } template static constexpr _Tp2&& __move_get(pair<_Tp1, _Tp2>&& __pair) noexcept { return std::forward<_Tp2>(__pair.second); } template static constexpr const _Tp2& __const_get(const pair<_Tp1, _Tp2>& __pair) noexcept { return __pair.second; } template static constexpr const _Tp2&& __const_move_get(const pair<_Tp1, _Tp2>&& __pair) noexcept { return std::forward(__pair.second); } }; template constexpr typename tuple_element<_Int, pair<_Tp1, _Tp2>>::type& get(pair<_Tp1, _Tp2>& __in) noexcept { return __pair_get<_Int>::__get(__in); } template constexpr typename tuple_element<_Int, pair<_Tp1, _Tp2>>::type&& get(pair<_Tp1, _Tp2>&& __in) noexcept { return __pair_get<_Int>::__move_get(std::move(__in)); } template constexpr const typename tuple_element<_Int, pair<_Tp1, _Tp2>>::type& get(const pair<_Tp1, _Tp2>& __in) noexcept { return __pair_get<_Int>::__const_get(__in); } template constexpr const typename tuple_element<_Int, pair<_Tp1, _Tp2>>::type&& get(const pair<_Tp1, _Tp2>&& __in) noexcept { return __pair_get<_Int>::__const_move_get(std::move(__in)); } template constexpr _Tp& get(pair<_Tp, _Up>& __p) noexcept { return __p.first; } template constexpr const _Tp& get(const pair<_Tp, _Up>& __p) noexcept { return __p.first; } template constexpr _Tp&& get(pair<_Tp, _Up>&& __p) noexcept { return std::move(__p.first); } template constexpr const _Tp&& get(const pair<_Tp, _Up>&& __p) noexcept { return std::move(__p.first); } template constexpr _Tp& get(pair<_Up, _Tp>& __p) noexcept { return __p.second; } template constexpr const _Tp& get(const pair<_Up, _Tp>& __p) noexcept { return __p.second; } template constexpr _Tp&& get(pair<_Up, _Tp>&& __p) noexcept { return std::move(__p.second); } template constexpr const _Tp&& get(const pair<_Up, _Tp>&& __p) noexcept { return std::move(__p.second); } template class _TQual, template class _UQual> requires requires { typename pair, _UQual<_U1>>, common_reference_t<_TQual<_T2>, _UQual<_U2>>>; } struct basic_common_reference, pair<_U1, _U2>, _TQual, _UQual> { using type = pair, _UQual<_U1>>, common_reference_t<_TQual<_T2>, _UQual<_U2>>>; }; template requires requires { typename pair, common_type_t<_T2, _U2>>; } struct common_type, pair<_U1, _U2>> { using type = pair, common_type_t<_T2, _U2>>; }; } # 39 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/tuple" 2 3 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/uses_allocator.h" 1 3 # 40 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/uses_allocator.h" 3 namespace std __attribute__ ((__visibility__ ("default"))) { struct __erased_type { }; template using __is_erased_or_convertible = __or_, is_same<_Tp, __erased_type>>; struct allocator_arg_t { explicit allocator_arg_t() = default; }; inline constexpr allocator_arg_t allocator_arg = allocator_arg_t(); template> struct __uses_allocator_helper : false_type { }; template struct __uses_allocator_helper<_Tp, _Alloc, __void_t> : __is_erased_or_convertible<_Alloc, typename _Tp::allocator_type>::type { }; template struct uses_allocator : __uses_allocator_helper<_Tp, _Alloc>::type { }; struct __uses_alloc_base { }; struct __uses_alloc0 : __uses_alloc_base { struct _Sink { void constexpr operator=(const void*) { } } _M_a; }; template struct __uses_alloc1 : __uses_alloc_base { const _Alloc* _M_a; }; template struct __uses_alloc2 : __uses_alloc_base { const _Alloc* _M_a; }; template struct __uses_alloc; template struct __uses_alloc : __conditional_t< is_constructible<_Tp, allocator_arg_t, const _Alloc&, _Args...>::value, __uses_alloc1<_Alloc>, __uses_alloc2<_Alloc>> { static_assert(__or_< is_constructible<_Tp, allocator_arg_t, const _Alloc&, _Args...>, is_constructible<_Tp, _Args..., const _Alloc&>>::value, "construction with an allocator must be possible" " if uses_allocator is true"); }; template struct __uses_alloc : __uses_alloc0 { }; template using __uses_alloc_t = __uses_alloc::value, _Tp, _Alloc, _Args...>; template constexpr inline __uses_alloc_t<_Tp, _Alloc, _Args...> __use_alloc(const _Alloc& __a) { __uses_alloc_t<_Tp, _Alloc, _Args...> __ret; __ret._M_a = std::__addressof(__a); return __ret; } template void __use_alloc(const _Alloc&&) = delete; template inline constexpr bool uses_allocator_v = uses_allocator<_Tp, _Alloc>::value; template class _Predicate, typename _Tp, typename _Alloc, typename... _Args> struct __is_uses_allocator_predicate : __conditional_t::value, __or_<_Predicate<_Tp, allocator_arg_t, _Alloc, _Args...>, _Predicate<_Tp, _Args..., _Alloc>>, _Predicate<_Tp, _Args...>> { }; template struct __is_uses_allocator_constructible : __is_uses_allocator_predicate { }; template inline constexpr bool __is_uses_allocator_constructible_v = __is_uses_allocator_constructible<_Tp, _Alloc, _Args...>::value; template struct __is_nothrow_uses_allocator_constructible : __is_uses_allocator_predicate { }; template inline constexpr bool __is_nothrow_uses_allocator_constructible_v = __is_nothrow_uses_allocator_constructible<_Tp, _Alloc, _Args...>::value; template void __uses_allocator_construct_impl(__uses_alloc0, _Tp* __ptr, _Args&&... __args) { ::new ((void*)__ptr) _Tp(std::forward<_Args>(__args)...); } template void __uses_allocator_construct_impl(__uses_alloc1<_Alloc> __a, _Tp* __ptr, _Args&&... __args) { ::new ((void*)__ptr) _Tp(allocator_arg, *__a._M_a, std::forward<_Args>(__args)...); } template void __uses_allocator_construct_impl(__uses_alloc2<_Alloc> __a, _Tp* __ptr, _Args&&... __args) { ::new ((void*)__ptr) _Tp(std::forward<_Args>(__args)..., *__a._M_a); } template void __uses_allocator_construct(const _Alloc& __a, _Tp* __ptr, _Args&&... __args) { std::__uses_allocator_construct_impl( std::__use_alloc<_Tp, _Alloc, _Args...>(__a), __ptr, std::forward<_Args>(__args)...); } } # 40 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/tuple" 2 3 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/invoke.h" 1 3 # 34 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/invoke.h" 3 namespace std __attribute__ ((__visibility__ ("default"))) { # 53 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/invoke.h" 3 template::type> constexpr _Up&& __invfwd(typename remove_reference<_Tp>::type& __t) noexcept { return static_cast<_Up&&>(__t); } template constexpr _Res __invoke_impl(__invoke_other, _Fn&& __f, _Args&&... __args) { return std::forward<_Fn>(__f)(std::forward<_Args>(__args)...); } template constexpr _Res __invoke_impl(__invoke_memfun_ref, _MemFun&& __f, _Tp&& __t, _Args&&... __args) { return (__invfwd<_Tp>(__t).*__f)(std::forward<_Args>(__args)...); } template constexpr _Res __invoke_impl(__invoke_memfun_deref, _MemFun&& __f, _Tp&& __t, _Args&&... __args) { return ((*std::forward<_Tp>(__t)).*__f)(std::forward<_Args>(__args)...); } template constexpr _Res __invoke_impl(__invoke_memobj_ref, _MemPtr&& __f, _Tp&& __t) { return __invfwd<_Tp>(__t).*__f; } template constexpr _Res __invoke_impl(__invoke_memobj_deref, _MemPtr&& __f, _Tp&& __t) { return (*std::forward<_Tp>(__t)).*__f; } template constexpr typename __invoke_result<_Callable, _Args...>::type __invoke(_Callable&& __fn, _Args&&... __args) noexcept(__is_nothrow_invocable<_Callable, _Args...>::value) { using __result = __invoke_result<_Callable, _Args...>; using __type = typename __result::type; using __tag = typename __result::__invoke_type; return std::__invoke_impl<__type>(__tag{}, std::forward<_Callable>(__fn), std::forward<_Args>(__args)...); } template constexpr enable_if_t, _Res> __invoke_r(_Callable&& __fn, _Args&&... __args) noexcept(is_nothrow_invocable_r_v<_Res, _Callable, _Args...>) { using __result = __invoke_result<_Callable, _Args...>; using __type = typename __result::type; using __tag = typename __result::__invoke_type; if constexpr (is_void_v<_Res>) std::__invoke_impl<__type>(__tag{}, std::forward<_Callable>(__fn), std::forward<_Args>(__args)...); else return std::__invoke_impl<__type>(__tag{}, std::forward<_Callable>(__fn), std::forward<_Args>(__args)...); } # 156 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/invoke.h" 3 } # 42 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/tuple" 2 3 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/ranges_util.h" 1 3 # 34 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/ranges_util.h" 3 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/ranges_base.h" 1 3 # 34 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/ranges_base.h" 3 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_iterator.h" 1 3 # 63 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_iterator.h" 3 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/cpp_type_traits.h" 1 3 # 36 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/cpp_type_traits.h" 3 # 67 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/cpp_type_traits.h" 3 extern "C++" { namespace std __attribute__ ((__visibility__ ("default"))) { struct __true_type { }; struct __false_type { }; template struct __truth_type { typedef __false_type __type; }; template<> struct __truth_type { typedef __true_type __type; }; template struct __traitor { enum { __value = bool(_Sp::__value) || bool(_Tp::__value) }; typedef typename __truth_type<__value>::__type __type; }; template struct __are_same { enum { __value = 0 }; typedef __false_type __type; }; template struct __are_same<_Tp, _Tp> { enum { __value = 1 }; typedef __true_type __type; }; template struct __is_void { enum { __value = 0 }; typedef __false_type __type; }; template<> struct __is_void { enum { __value = 1 }; typedef __true_type __type; }; template struct __is_integer { enum { __value = 0 }; typedef __false_type __type; }; template<> struct __is_integer { enum { __value = 1 }; typedef __true_type __type; }; template<> struct __is_integer { enum { __value = 1 }; typedef __true_type __type; }; template<> struct __is_integer { enum { __value = 1 }; typedef __true_type __type; }; template<> struct __is_integer { enum { __value = 1 }; typedef __true_type __type; }; template<> struct __is_integer { enum { __value = 1 }; typedef __true_type __type; }; template<> struct __is_integer { enum { __value = 1 }; typedef __true_type __type; }; template<> struct __is_integer { enum { __value = 1 }; typedef __true_type __type; }; template<> struct __is_integer { enum { __value = 1 }; typedef __true_type __type; }; template<> struct __is_integer { enum { __value = 1 }; typedef __true_type __type; }; template<> struct __is_integer { enum { __value = 1 }; typedef __true_type __type; }; template<> struct __is_integer { enum { __value = 1 }; typedef __true_type __type; }; template<> struct __is_integer { enum { __value = 1 }; typedef __true_type __type; }; template<> struct __is_integer { enum { __value = 1 }; typedef __true_type __type; }; template<> struct __is_integer { enum { __value = 1 }; typedef __true_type __type; }; template<> struct __is_integer { enum { __value = 1 }; typedef __true_type __type; }; template<> struct __is_integer { enum { __value = 1 }; typedef __true_type __type; }; # 272 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/cpp_type_traits.h" 3 __extension__ template<> struct __is_integer<__int128> { enum { __value = 1 }; typedef __true_type __type; }; __extension__ template<> struct __is_integer { enum { __value = 1 }; typedef __true_type __type; }; # 289 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/cpp_type_traits.h" 3 template struct __is_floating { enum { __value = 0 }; typedef __false_type __type; }; template<> struct __is_floating { enum { __value = 1 }; typedef __true_type __type; }; template<> struct __is_floating { enum { __value = 1 }; typedef __true_type __type; }; template<> struct __is_floating { enum { __value = 1 }; typedef __true_type __type; }; # 366 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/cpp_type_traits.h" 3 template struct __is_pointer { enum { __value = 0 }; typedef __false_type __type; }; template struct __is_pointer<_Tp*> { enum { __value = 1 }; typedef __true_type __type; }; template struct __is_arithmetic : public __traitor<__is_integer<_Tp>, __is_floating<_Tp> > { }; template struct __is_scalar : public __traitor<__is_arithmetic<_Tp>, __is_pointer<_Tp> > { }; template struct __is_char { enum { __value = 0 }; typedef __false_type __type; }; template<> struct __is_char { enum { __value = 1 }; typedef __true_type __type; }; template<> struct __is_char { enum { __value = 1 }; typedef __true_type __type; }; template struct __is_byte { enum { __value = 0 }; typedef __false_type __type; }; template<> struct __is_byte { enum { __value = 1 }; typedef __true_type __type; }; template<> struct __is_byte { enum { __value = 1 }; typedef __true_type __type; }; template<> struct __is_byte { enum { __value = 1 }; typedef __true_type __type; }; enum class byte : unsigned char; template<> struct __is_byte { enum { __value = 1 }; typedef __true_type __type; }; template<> struct __is_byte { enum { __value = 1 }; typedef __true_type __type; }; template struct iterator_traits; template struct __is_nonvolatile_trivially_copyable { enum { __value = __is_trivially_copyable(_Tp) }; }; template struct __is_nonvolatile_trivially_copyable { enum { __value = 0 }; }; template struct __memcpyable { enum { __value = 0 }; }; template struct __memcpyable<_Tp*, _Tp*> : __is_nonvolatile_trivially_copyable<_Tp> { }; template struct __memcpyable<_Tp*, const _Tp*> : __is_nonvolatile_trivially_copyable<_Tp> { }; template struct __memcmpable { enum { __value = 0 }; }; template struct __memcmpable<_Tp*, _Tp*> : __is_nonvolatile_trivially_copyable<_Tp> { }; template struct __memcmpable : __is_nonvolatile_trivially_copyable<_Tp> { }; template struct __memcmpable<_Tp*, const _Tp*> : __is_nonvolatile_trivially_copyable<_Tp> { }; template::__value > struct __is_memcmp_ordered { static const bool __value = _Tp(-1) > _Tp(1); }; template struct __is_memcmp_ordered<_Tp, false> { static const bool __value = false; }; template struct __is_memcmp_ordered_with { static const bool __value = __is_memcmp_ordered<_Tp>::__value && __is_memcmp_ordered<_Up>::__value; }; template struct __is_memcmp_ordered_with<_Tp, _Up, false> { static const bool __value = false; }; # 579 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/cpp_type_traits.h" 3 template<> struct __is_memcmp_ordered_with { static constexpr bool __value = true; }; template struct __is_memcmp_ordered_with<_Tp, std::byte, _SameSize> { static constexpr bool __value = false; }; template struct __is_memcmp_ordered_with { static constexpr bool __value = false; }; template struct __is_move_iterator { enum { __value = 0 }; typedef __false_type __type; }; template constexpr inline _Iterator __miter_base(_Iterator __it) { return __it; } } } # 64 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_iterator.h" 2 3 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_iterator_base_types.h" 1 3 # 63 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_iterator_base_types.h" 3 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/iterator_concepts.h" 1 3 # 34 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/iterator_concepts.h" 3 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/ptr_traits.h" 1 3 # 39 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/ptr_traits.h" 3 namespace __gnu_debug { struct _Safe_iterator_base; } namespace std __attribute__ ((__visibility__ ("default"))) { class __undefined; template struct __get_first_arg { using type = __undefined; }; template class _SomeTemplate, typename _Tp, typename... _Types> struct __get_first_arg<_SomeTemplate<_Tp, _Types...>> { using type = _Tp; }; template struct __replace_first_arg { }; template class _SomeTemplate, typename _Up, typename _Tp, typename... _Types> struct __replace_first_arg<_SomeTemplate<_Tp, _Types...>, _Up> { using type = _SomeTemplate<_Up, _Types...>; }; template struct __ptr_traits_elem : __get_first_arg<_Ptr> { }; template requires requires { typename _Ptr::element_type; } struct __ptr_traits_elem<_Ptr, void> { using type = typename _Ptr::element_type; }; template using __ptr_traits_elem_t = typename __ptr_traits_elem<_Ptr>::type; template::value> struct __ptr_traits_ptr_to { using pointer = _Ptr; using element_type = _Elt; static pointer pointer_to(element_type& __r) requires requires { { pointer::pointer_to(__r) } -> convertible_to; } { return pointer::pointer_to(__r); } }; template struct __ptr_traits_ptr_to<_Ptr, _Elt, true> { }; template struct __ptr_traits_ptr_to<_Tp*, _Tp, false> { using pointer = _Tp*; using element_type = _Tp; static constexpr pointer pointer_to(element_type& __r) noexcept { return std::addressof(__r); } }; template struct __ptr_traits_impl : __ptr_traits_ptr_to<_Ptr, _Elt> { private: template using __diff_t = typename _Tp::difference_type; template using __rebind = __type_identity>; public: using pointer = _Ptr; using element_type = _Elt; using difference_type = __detected_or_t; template using rebind = typename __detected_or_t<__replace_first_arg<_Ptr, _Up>, __rebind, _Ptr, _Up>::type; }; template struct __ptr_traits_impl<_Ptr, __undefined> { }; template struct pointer_traits : __ptr_traits_impl<_Ptr, __ptr_traits_elem_t<_Ptr>> { }; template struct pointer_traits<_Tp*> : __ptr_traits_ptr_to<_Tp*, _Tp> { typedef _Tp* pointer; typedef _Tp element_type; typedef ptrdiff_t difference_type; template using rebind = _Up*; }; template using __ptr_rebind = typename pointer_traits<_Ptr>::template rebind<_Tp>; template constexpr _Tp* __to_address(_Tp* __ptr) noexcept { static_assert(!std::is_function<_Tp>::value, "not a function pointer"); return __ptr; } template constexpr auto __to_address(const _Ptr& __ptr) noexcept -> decltype(std::pointer_traits<_Ptr>::to_address(__ptr)) { return std::pointer_traits<_Ptr>::to_address(__ptr); } template constexpr auto __to_address(const _Ptr& __ptr, _None...) noexcept { if constexpr (is_base_of_v<__gnu_debug::_Safe_iterator_base, _Ptr>) return std::__to_address(__ptr.base().operator->()); else return std::__to_address(__ptr.operator->()); } template constexpr _Tp* to_address(_Tp* __ptr) noexcept { return std::__to_address(__ptr); } # 251 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/ptr_traits.h" 3 template constexpr auto to_address(const _Ptr& __ptr) noexcept { return std::__to_address(__ptr); } } # 38 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/iterator_concepts.h" 2 3 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/ranges_cmp.h" 1 3 # 37 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/ranges_cmp.h" 3 namespace std __attribute__ ((__visibility__ ("default"))) { struct __is_transparent; struct identity { template [[nodiscard]] constexpr _Tp&& operator()(_Tp&& __t) const noexcept { return std::forward<_Tp>(__t); } using is_transparent = __is_transparent; }; namespace ranges { namespace __detail { template concept __less_builtin_ptr_cmp = requires (_Tp&& __t, _Up&& __u) { { __t < __u } -> same_as; } && convertible_to<_Tp, const volatile void*> && convertible_to<_Up, const volatile void*> && (! requires(_Tp&& __t, _Up&& __u) { operator<(std::forward<_Tp>(__t), std::forward<_Up>(__u)); } && ! requires(_Tp&& __t, _Up&& __u) { std::forward<_Tp>(__t).operator<(std::forward<_Up>(__u)); }); } struct equal_to { template requires equality_comparable_with<_Tp, _Up> constexpr bool operator()(_Tp&& __t, _Up&& __u) const noexcept(noexcept(std::declval<_Tp>() == std::declval<_Up>())) { return std::forward<_Tp>(__t) == std::forward<_Up>(__u); } using is_transparent = __is_transparent; }; struct not_equal_to { template requires equality_comparable_with<_Tp, _Up> constexpr bool operator()(_Tp&& __t, _Up&& __u) const noexcept(noexcept(std::declval<_Up>() == std::declval<_Tp>())) { return !equal_to{}(std::forward<_Tp>(__t), std::forward<_Up>(__u)); } using is_transparent = __is_transparent; }; struct less { template requires totally_ordered_with<_Tp, _Up> constexpr bool operator()(_Tp&& __t, _Up&& __u) const noexcept(noexcept(std::declval<_Tp>() < std::declval<_Up>())) { if constexpr (__detail::__less_builtin_ptr_cmp<_Tp, _Up>) { if (std::__is_constant_evaluated()) return __t < __u; auto __x = reinterpret_cast( static_cast(std::forward<_Tp>(__t))); auto __y = reinterpret_cast( static_cast(std::forward<_Up>(__u))); return __x < __y; } else return std::forward<_Tp>(__t) < std::forward<_Up>(__u); } using is_transparent = __is_transparent; }; struct greater { template requires totally_ordered_with<_Tp, _Up> constexpr bool operator()(_Tp&& __t, _Up&& __u) const noexcept(noexcept(std::declval<_Up>() < std::declval<_Tp>())) { return less{}(std::forward<_Up>(__u), std::forward<_Tp>(__t)); } using is_transparent = __is_transparent; }; struct greater_equal { template requires totally_ordered_with<_Tp, _Up> constexpr bool operator()(_Tp&& __t, _Up&& __u) const noexcept(noexcept(std::declval<_Tp>() < std::declval<_Up>())) { return !less{}(std::forward<_Tp>(__t), std::forward<_Up>(__u)); } using is_transparent = __is_transparent; }; struct less_equal { template requires totally_ordered_with<_Tp, _Up> constexpr bool operator()(_Tp&& __t, _Up&& __u) const noexcept(noexcept(std::declval<_Up>() < std::declval<_Tp>())) { return !less{}(std::forward<_Up>(__u), std::forward<_Tp>(__t)); } using is_transparent = __is_transparent; }; } } # 39 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/iterator_concepts.h" 2 3 namespace std __attribute__ ((__visibility__ ("default"))) { # 58 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/iterator_concepts.h" 3 struct default_sentinel_t { }; inline constexpr default_sentinel_t default_sentinel{}; struct input_iterator_tag; struct output_iterator_tag; struct forward_iterator_tag; struct bidirectional_iterator_tag; struct random_access_iterator_tag; struct contiguous_iterator_tag; template struct iterator_traits; template requires is_object_v<_Tp> struct iterator_traits<_Tp*>; template struct __iterator_traits; namespace __detail { template using __with_ref = _Tp&; template concept __can_reference = requires { typename __with_ref<_Tp>; }; template concept __dereferenceable = requires(_Tp& __t) { { *__t } -> __can_reference; }; } template<__detail::__dereferenceable _Tp> using iter_reference_t = decltype(*std::declval<_Tp&>()); namespace ranges { namespace __imove { void iter_move() = delete; template concept __adl_imove = (std::__detail::__class_or_enum>) && requires(_Tp&& __t) { iter_move(static_cast<_Tp&&>(__t)); }; struct _IterMove { private: template struct __result { using type = iter_reference_t<_Tp>; }; template requires __adl_imove<_Tp> struct __result<_Tp> { using type = decltype(iter_move(std::declval<_Tp>())); }; template requires (!__adl_imove<_Tp>) && is_lvalue_reference_v> struct __result<_Tp> { using type = remove_reference_t>&&; }; template static constexpr bool _S_noexcept() { if constexpr (__adl_imove<_Tp>) return noexcept(iter_move(std::declval<_Tp>())); else return noexcept(*std::declval<_Tp>()); } public: template using __type = typename __result<_Tp>::type; template [[nodiscard]] constexpr __type<_Tp> operator()(_Tp&& __e) const noexcept(_S_noexcept<_Tp>()) { if constexpr (__adl_imove<_Tp>) return iter_move(static_cast<_Tp&&>(__e)); else if constexpr (is_lvalue_reference_v>) return static_cast<__type<_Tp>>(*__e); else return *__e; } }; } inline namespace _Cpo { inline constexpr __imove::_IterMove iter_move{}; } } template<__detail::__dereferenceable _Tp> requires __detail::__can_reference> using iter_rvalue_reference_t = ranges::__imove::_IterMove::__type<_Tp&>; template struct incrementable_traits { }; template requires is_object_v<_Tp> struct incrementable_traits<_Tp*> { using difference_type = ptrdiff_t; }; template struct incrementable_traits : incrementable_traits<_Iter> { }; template requires requires { typename _Tp::difference_type; } struct incrementable_traits<_Tp> { using difference_type = typename _Tp::difference_type; }; template requires (!requires { typename _Tp::difference_type; } && requires(const _Tp& __a, const _Tp& __b) { { __a - __b } -> integral; }) struct incrementable_traits<_Tp> { using difference_type = make_signed_t() - std::declval<_Tp>())>; }; # 204 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/iterator_concepts.h" 3 namespace __detail { template concept __primary_traits_iter = __is_base_of(__iterator_traits<_Iter, void>, iterator_traits<_Iter>); template struct __iter_traits_impl { using type = iterator_traits<_Iter>; }; template requires __primary_traits_iter<_Iter> struct __iter_traits_impl<_Iter, _Tp> { using type = _Tp; }; template using __iter_traits = typename __iter_traits_impl<_Iter, _Tp>::type; template using __iter_diff_t = typename __iter_traits<_Tp, incrementable_traits<_Tp>>::difference_type; } template using iter_difference_t = __detail::__iter_diff_t>; namespace __detail { template struct __cond_value_type { }; template requires is_object_v<_Tp> struct __cond_value_type<_Tp> { using value_type = remove_cv_t<_Tp>; }; template concept __has_member_value_type = requires { typename _Tp::value_type; }; template concept __has_member_element_type = requires { typename _Tp::element_type; }; } template struct indirectly_readable_traits { }; template struct indirectly_readable_traits<_Tp*> : __detail::__cond_value_type<_Tp> { }; template requires is_array_v<_Iter> struct indirectly_readable_traits<_Iter> { using value_type = remove_cv_t>; }; template struct indirectly_readable_traits : indirectly_readable_traits<_Iter> { }; template<__detail::__has_member_value_type _Tp> struct indirectly_readable_traits<_Tp> : __detail::__cond_value_type { }; template<__detail::__has_member_element_type _Tp> struct indirectly_readable_traits<_Tp> : __detail::__cond_value_type { }; template<__detail::__has_member_value_type _Tp> requires __detail::__has_member_element_type<_Tp> && same_as, remove_cv_t> struct indirectly_readable_traits<_Tp> : __detail::__cond_value_type { }; template<__detail::__has_member_value_type _Tp> requires __detail::__has_member_element_type<_Tp> struct indirectly_readable_traits<_Tp> { }; namespace __detail { template using __iter_value_t = typename __iter_traits<_Tp, indirectly_readable_traits<_Tp>>::value_type; } template using iter_value_t = __detail::__iter_value_t>; namespace __detail { template concept __cpp17_iterator = requires(_Iter __it) { { *__it } -> __can_reference; { ++__it } -> same_as<_Iter&>; { *__it++ } -> __can_reference; } && copyable<_Iter>; template concept __cpp17_input_iterator = __cpp17_iterator<_Iter> && equality_comparable<_Iter> && requires(_Iter __it) { typename incrementable_traits<_Iter>::difference_type; typename indirectly_readable_traits<_Iter>::value_type; typename common_reference_t&&, typename indirectly_readable_traits<_Iter>::value_type&>; typename common_reference_t::value_type&>; requires signed_integral< typename incrementable_traits<_Iter>::difference_type>; }; template concept __cpp17_fwd_iterator = __cpp17_input_iterator<_Iter> && constructible_from<_Iter> && is_lvalue_reference_v> && same_as>, typename indirectly_readable_traits<_Iter>::value_type> && requires(_Iter __it) { { __it++ } -> convertible_to; { *__it++ } -> same_as>; }; template concept __cpp17_bidi_iterator = __cpp17_fwd_iterator<_Iter> && requires(_Iter __it) { { --__it } -> same_as<_Iter&>; { __it-- } -> convertible_to; { *__it-- } -> same_as>; }; template concept __cpp17_randacc_iterator = __cpp17_bidi_iterator<_Iter> && totally_ordered<_Iter> && requires(_Iter __it, typename incrementable_traits<_Iter>::difference_type __n) { { __it += __n } -> same_as<_Iter&>; { __it -= __n } -> same_as<_Iter&>; { __it + __n } -> same_as<_Iter>; { __n + __it } -> same_as<_Iter>; { __it - __n } -> same_as<_Iter>; { __it - __it } -> same_as; { __it[__n] } -> convertible_to>; }; template concept __iter_with_nested_types = requires { typename _Iter::iterator_category; typename _Iter::value_type; typename _Iter::difference_type; typename _Iter::reference; }; template concept __iter_without_nested_types = !__iter_with_nested_types<_Iter>; template concept __iter_without_category = !requires { typename _Iter::iterator_category; }; } template requires __detail::__iter_with_nested_types<_Iterator> struct __iterator_traits<_Iterator, void> { private: template struct __ptr { using type = void; }; template requires requires { typename _Iter::pointer; } struct __ptr<_Iter> { using type = typename _Iter::pointer; }; public: using iterator_category = typename _Iterator::iterator_category; using value_type = typename _Iterator::value_type; using difference_type = typename _Iterator::difference_type; using pointer = typename __ptr<_Iterator>::type; using reference = typename _Iterator::reference; }; template requires __detail::__iter_without_nested_types<_Iterator> && __detail::__cpp17_input_iterator<_Iterator> struct __iterator_traits<_Iterator, void> { private: template struct __cat { using type = input_iterator_tag; }; template requires requires { typename _Iter::iterator_category; } struct __cat<_Iter> { using type = typename _Iter::iterator_category; }; template requires __detail::__iter_without_category<_Iter> && __detail::__cpp17_randacc_iterator<_Iter> struct __cat<_Iter> { using type = random_access_iterator_tag; }; template requires __detail::__iter_without_category<_Iter> && __detail::__cpp17_bidi_iterator<_Iter> struct __cat<_Iter> { using type = bidirectional_iterator_tag; }; template requires __detail::__iter_without_category<_Iter> && __detail::__cpp17_fwd_iterator<_Iter> struct __cat<_Iter> { using type = forward_iterator_tag; }; template struct __ptr { using type = void; }; template requires requires { typename _Iter::pointer; } struct __ptr<_Iter> { using type = typename _Iter::pointer; }; template requires (!requires { typename _Iter::pointer; } && requires(_Iter& __it) { __it.operator->(); }) struct __ptr<_Iter> { using type = decltype(std::declval<_Iter&>().operator->()); }; template struct __ref { using type = iter_reference_t<_Iter>; }; template requires requires { typename _Iter::reference; } struct __ref<_Iter> { using type = typename _Iter::reference; }; public: using iterator_category = typename __cat<_Iterator>::type; using value_type = typename indirectly_readable_traits<_Iterator>::value_type; using difference_type = typename incrementable_traits<_Iterator>::difference_type; using pointer = typename __ptr<_Iterator>::type; using reference = typename __ref<_Iterator>::type; }; template requires __detail::__iter_without_nested_types<_Iterator> && __detail::__cpp17_iterator<_Iterator> struct __iterator_traits<_Iterator, void> { private: template struct __diff { using type = void; }; template requires requires { typename incrementable_traits<_Iter>::difference_type; } struct __diff<_Iter> { using type = typename incrementable_traits<_Iter>::difference_type; }; public: using iterator_category = output_iterator_tag; using value_type = void; using difference_type = typename __diff<_Iterator>::type; using pointer = void; using reference = void; }; namespace __detail { template struct __iter_concept_impl; template requires requires { typename __iter_traits<_Iter>::iterator_concept; } struct __iter_concept_impl<_Iter> { using type = typename __iter_traits<_Iter>::iterator_concept; }; template requires (!requires { typename __iter_traits<_Iter>::iterator_concept; } && requires { typename __iter_traits<_Iter>::iterator_category; }) struct __iter_concept_impl<_Iter> { using type = typename __iter_traits<_Iter>::iterator_category; }; template requires (!requires { typename __iter_traits<_Iter>::iterator_concept; } && !requires { typename __iter_traits<_Iter>::iterator_category; } && __primary_traits_iter<_Iter>) struct __iter_concept_impl<_Iter> { using type = random_access_iterator_tag; }; template struct __iter_concept_impl { }; template using __iter_concept = typename __iter_concept_impl<_Iter>::type; template concept __indirectly_readable_impl = requires { typename iter_value_t<_In>; typename iter_reference_t<_In>; typename iter_rvalue_reference_t<_In>; requires same_as, iter_reference_t<_In>>; requires same_as, iter_rvalue_reference_t<_In>>; } && common_reference_with&&, iter_value_t<_In>&> && common_reference_with&&, iter_rvalue_reference_t<_In>&&> && common_reference_with&&, const iter_value_t<_In>&>; } template concept indirectly_readable = __detail::__indirectly_readable_impl>; template using iter_common_reference_t = common_reference_t, iter_value_t<_Tp>&>; template concept indirectly_writable = requires(_Out&& __o, _Tp&& __t) { *__o = std::forward<_Tp>(__t); *std::forward<_Out>(__o) = std::forward<_Tp>(__t); const_cast&&>(*__o) = std::forward<_Tp>(__t); const_cast&&>(*std::forward<_Out>(__o)) = std::forward<_Tp>(__t); }; namespace ranges::__detail { class __max_diff_type; class __max_size_type; __extension__ template concept __is_signed_int128 = same_as<_Tp, __int128>; __extension__ template concept __is_unsigned_int128 = same_as<_Tp, unsigned __int128>; template concept __cv_bool = same_as; template concept __integral_nonbool = integral<_Tp> && !__cv_bool<_Tp>; template concept __is_int128 = __is_signed_int128<_Tp> || __is_unsigned_int128<_Tp>; template concept __is_integer_like = __integral_nonbool<_Tp> || __is_int128<_Tp> || same_as<_Tp, __max_diff_type> || same_as<_Tp, __max_size_type>; template concept __is_signed_integer_like = signed_integral<_Tp> || __is_signed_int128<_Tp> || same_as<_Tp, __max_diff_type>; } namespace __detail { using ranges::__detail::__is_signed_integer_like; } template concept weakly_incrementable = movable<_Iter> && requires(_Iter __i) { typename iter_difference_t<_Iter>; requires __detail::__is_signed_integer_like>; { ++__i } -> same_as<_Iter&>; __i++; }; template concept incrementable = regular<_Iter> && weakly_incrementable<_Iter> && requires(_Iter __i) { { __i++ } -> same_as<_Iter>; }; template concept input_or_output_iterator = requires(_Iter __i) { { *__i } -> __detail::__can_reference; } && weakly_incrementable<_Iter>; template concept sentinel_for = semiregular<_Sent> && input_or_output_iterator<_Iter> && __detail::__weakly_eq_cmp_with<_Sent, _Iter>; template inline constexpr bool disable_sized_sentinel_for = false; template concept sized_sentinel_for = sentinel_for<_Sent, _Iter> && !disable_sized_sentinel_for, remove_cv_t<_Iter>> && requires(const _Iter& __i, const _Sent& __s) { { __s - __i } -> same_as>; { __i - __s } -> same_as>; }; template concept input_iterator = input_or_output_iterator<_Iter> && indirectly_readable<_Iter> && requires { typename __detail::__iter_concept<_Iter>; } && derived_from<__detail::__iter_concept<_Iter>, input_iterator_tag>; template concept output_iterator = input_or_output_iterator<_Iter> && indirectly_writable<_Iter, _Tp> && requires(_Iter __i, _Tp&& __t) { *__i++ = std::forward<_Tp>(__t); }; template concept forward_iterator = input_iterator<_Iter> && derived_from<__detail::__iter_concept<_Iter>, forward_iterator_tag> && incrementable<_Iter> && sentinel_for<_Iter, _Iter>; template concept bidirectional_iterator = forward_iterator<_Iter> && derived_from<__detail::__iter_concept<_Iter>, bidirectional_iterator_tag> && requires(_Iter __i) { { --__i } -> same_as<_Iter&>; { __i-- } -> same_as<_Iter>; }; template concept random_access_iterator = bidirectional_iterator<_Iter> && derived_from<__detail::__iter_concept<_Iter>, random_access_iterator_tag> && totally_ordered<_Iter> && sized_sentinel_for<_Iter, _Iter> && requires(_Iter __i, const _Iter __j, const iter_difference_t<_Iter> __n) { { __i += __n } -> same_as<_Iter&>; { __j + __n } -> same_as<_Iter>; { __n + __j } -> same_as<_Iter>; { __i -= __n } -> same_as<_Iter&>; { __j - __n } -> same_as<_Iter>; { __j[__n] } -> same_as>; }; template concept contiguous_iterator = random_access_iterator<_Iter> && derived_from<__detail::__iter_concept<_Iter>, contiguous_iterator_tag> && is_lvalue_reference_v> && same_as, remove_cvref_t>> && requires(const _Iter& __i) { { std::to_address(__i) } -> same_as>>; }; template concept indirectly_unary_invocable = indirectly_readable<_Iter> && copy_constructible<_Fn> && invocable<_Fn&, iter_value_t<_Iter>&> && invocable<_Fn&, iter_reference_t<_Iter>> && invocable<_Fn&, iter_common_reference_t<_Iter>> && common_reference_with&>, invoke_result_t<_Fn&, iter_reference_t<_Iter>>>; template concept indirectly_regular_unary_invocable = indirectly_readable<_Iter> && copy_constructible<_Fn> && regular_invocable<_Fn&, iter_value_t<_Iter>&> && regular_invocable<_Fn&, iter_reference_t<_Iter>> && regular_invocable<_Fn&, iter_common_reference_t<_Iter>> && common_reference_with&>, invoke_result_t<_Fn&, iter_reference_t<_Iter>>>; template concept indirect_unary_predicate = indirectly_readable<_Iter> && copy_constructible<_Fn> && predicate<_Fn&, iter_value_t<_Iter>&> && predicate<_Fn&, iter_reference_t<_Iter>> && predicate<_Fn&, iter_common_reference_t<_Iter>>; template concept indirect_binary_predicate = indirectly_readable<_I1> && indirectly_readable<_I2> && copy_constructible<_Fn> && predicate<_Fn&, iter_value_t<_I1>&, iter_value_t<_I2>&> && predicate<_Fn&, iter_value_t<_I1>&, iter_reference_t<_I2>> && predicate<_Fn&, iter_reference_t<_I1>, iter_value_t<_I2>&> && predicate<_Fn&, iter_reference_t<_I1>, iter_reference_t<_I2>> && predicate<_Fn&, iter_common_reference_t<_I1>, iter_common_reference_t<_I2>>; template concept indirect_equivalence_relation = indirectly_readable<_I1> && indirectly_readable<_I2> && copy_constructible<_Fn> && equivalence_relation<_Fn&, iter_value_t<_I1>&, iter_value_t<_I2>&> && equivalence_relation<_Fn&, iter_value_t<_I1>&, iter_reference_t<_I2>> && equivalence_relation<_Fn&, iter_reference_t<_I1>, iter_value_t<_I2>&> && equivalence_relation<_Fn&, iter_reference_t<_I1>, iter_reference_t<_I2>> && equivalence_relation<_Fn&, iter_common_reference_t<_I1>, iter_common_reference_t<_I2>>; template concept indirect_strict_weak_order = indirectly_readable<_I1> && indirectly_readable<_I2> && copy_constructible<_Fn> && strict_weak_order<_Fn&, iter_value_t<_I1>&, iter_value_t<_I2>&> && strict_weak_order<_Fn&, iter_value_t<_I1>&, iter_reference_t<_I2>> && strict_weak_order<_Fn&, iter_reference_t<_I1>, iter_value_t<_I2>&> && strict_weak_order<_Fn&, iter_reference_t<_I1>, iter_reference_t<_I2>> && strict_weak_order<_Fn&, iter_common_reference_t<_I1>, iter_common_reference_t<_I2>>; template requires (indirectly_readable<_Is> && ...) && invocable<_Fn, iter_reference_t<_Is>...> using indirect_result_t = invoke_result_t<_Fn, iter_reference_t<_Is>...>; namespace __detail { template struct __projected { struct __type { using value_type = remove_cvref_t>; indirect_result_t<_Proj&, _Iter> operator*() const; }; }; template struct __projected<_Iter, _Proj> { struct __type { using value_type = remove_cvref_t>; using difference_type = iter_difference_t<_Iter>; indirect_result_t<_Proj&, _Iter> operator*() const; }; }; } template _Proj> using projected = typename __detail::__projected<_Iter, _Proj>::__type; template concept indirectly_movable = indirectly_readable<_In> && indirectly_writable<_Out, iter_rvalue_reference_t<_In>>; template concept indirectly_movable_storable = indirectly_movable<_In, _Out> && indirectly_writable<_Out, iter_value_t<_In>> && movable> && constructible_from, iter_rvalue_reference_t<_In>> && assignable_from&, iter_rvalue_reference_t<_In>>; template concept indirectly_copyable = indirectly_readable<_In> && indirectly_writable<_Out, iter_reference_t<_In>>; template concept indirectly_copyable_storable = indirectly_copyable<_In, _Out> && indirectly_writable<_Out, iter_value_t<_In>&> && indirectly_writable<_Out, const iter_value_t<_In>&> && indirectly_writable<_Out, iter_value_t<_In>&&> && indirectly_writable<_Out, const iter_value_t<_In>&&> && copyable> && constructible_from, iter_reference_t<_In>> && assignable_from&, iter_reference_t<_In>>; namespace ranges { namespace __iswap { template void iter_swap(_It1, _It2) = delete; template concept __adl_iswap = (std::__detail::__class_or_enum> || std::__detail::__class_or_enum>) && requires(_Tp&& __t, _Up&& __u) { iter_swap(static_cast<_Tp&&>(__t), static_cast<_Up&&>(__u)); }; template constexpr iter_value_t<_Xp> __iter_exchange_move(_Xp&& __x, _Yp&& __y) noexcept(noexcept(iter_value_t<_Xp>(iter_move(__x))) && noexcept(*__x = iter_move(__y))) { iter_value_t<_Xp> __old_value(iter_move(__x)); *__x = iter_move(__y); return __old_value; } struct _IterSwap { private: template static constexpr bool _S_noexcept() { if constexpr (__adl_iswap<_Tp, _Up>) return noexcept(iter_swap(std::declval<_Tp>(), std::declval<_Up>())); else if constexpr (indirectly_readable<_Tp> && indirectly_readable<_Up> && swappable_with, iter_reference_t<_Up>>) return noexcept(ranges::swap(*std::declval<_Tp>(), *std::declval<_Up>())); else return noexcept(*std::declval<_Tp>() = __iswap::__iter_exchange_move(std::declval<_Up>(), std::declval<_Tp>())); } public: template requires __adl_iswap<_Tp, _Up> || (indirectly_readable> && indirectly_readable> && swappable_with, iter_reference_t<_Up>>) || (indirectly_movable_storable<_Tp, _Up> && indirectly_movable_storable<_Up, _Tp>) constexpr void operator()(_Tp&& __e1, _Up&& __e2) const noexcept(_S_noexcept<_Tp, _Up>()) { if constexpr (__adl_iswap<_Tp, _Up>) iter_swap(static_cast<_Tp&&>(__e1), static_cast<_Up&&>(__e2)); else if constexpr (indirectly_readable<_Tp> && indirectly_readable<_Up> && swappable_with, iter_reference_t<_Up>>) ranges::swap(*__e1, *__e2); else *__e1 = __iswap::__iter_exchange_move(__e2, __e1); } }; } inline namespace _Cpo { inline constexpr __iswap::_IterSwap iter_swap{}; } } template concept indirectly_swappable = indirectly_readable<_I1> && indirectly_readable<_I2> && requires(const _I1 __i1, const _I2 __i2) { ranges::iter_swap(__i1, __i1); ranges::iter_swap(__i2, __i2); ranges::iter_swap(__i1, __i2); ranges::iter_swap(__i2, __i1); }; template concept indirectly_comparable = indirect_binary_predicate<_Rel, projected<_I1, _P1>, projected<_I2, _P2>>; template concept permutable = forward_iterator<_Iter> && indirectly_movable_storable<_Iter, _Iter> && indirectly_swappable<_Iter, _Iter>; template concept mergeable = input_iterator<_I1> && input_iterator<_I2> && weakly_incrementable<_Out> && indirectly_copyable<_I1, _Out> && indirectly_copyable<_I2, _Out> && indirect_strict_weak_order<_Rel, projected<_I1, _P1>, projected<_I2, _P2>>; template concept sortable = permutable<_Iter> && indirect_strict_weak_order<_Rel, projected<_Iter, _Proj>>; struct unreachable_sentinel_t { template friend constexpr bool operator==(unreachable_sentinel_t, const _It&) noexcept { return false; } }; inline constexpr unreachable_sentinel_t unreachable_sentinel{}; namespace ranges::__access { using std::__detail::__class_or_enum; struct _Decay_copy final { template constexpr decay_t<_Tp> operator()(_Tp&& __t) const noexcept(is_nothrow_convertible_v<_Tp, decay_t<_Tp>>) { return std::forward<_Tp>(__t); } } inline constexpr __decay_copy{}; template concept __member_begin = requires(_Tp& __t) { { __decay_copy(__t.begin()) } -> input_or_output_iterator; }; void begin() = delete; template concept __adl_begin = __class_or_enum> && requires(_Tp& __t) { { __decay_copy(begin(__t)) } -> input_or_output_iterator; }; template requires is_array_v<_Tp> || __member_begin<_Tp&> || __adl_begin<_Tp&> auto __begin(_Tp& __t) { if constexpr (is_array_v<_Tp>) return __t + 0; else if constexpr (__member_begin<_Tp&>) return __t.begin(); else return begin(__t); } } namespace __detail { template using __range_iter_t = decltype(ranges::__access::__begin(std::declval<_Tp&>())); } } # 72 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_iterator_base_types.h" 2 3 namespace std __attribute__ ((__visibility__ ("default"))) { # 93 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_iterator_base_types.h" 3 struct input_iterator_tag { }; struct output_iterator_tag { }; struct forward_iterator_tag : public input_iterator_tag { }; struct bidirectional_iterator_tag : public forward_iterator_tag { }; struct random_access_iterator_tag : public bidirectional_iterator_tag { }; struct contiguous_iterator_tag : public random_access_iterator_tag { }; # 125 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_iterator_base_types.h" 3 template struct [[__deprecated__]] iterator { typedef _Category iterator_category; typedef _Tp value_type; typedef _Distance difference_type; typedef _Pointer pointer; typedef _Reference reference; }; # 149 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_iterator_base_types.h" 3 template struct iterator_traits; template> struct __iterator_traits { }; # 176 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_iterator_base_types.h" 3 template struct iterator_traits : public __iterator_traits<_Iterator> { }; # 194 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_iterator_base_types.h" 3 template requires is_object_v<_Tp> struct iterator_traits<_Tp*> { using iterator_concept = contiguous_iterator_tag; using iterator_category = random_access_iterator_tag; using value_type = remove_cv_t<_Tp>; using difference_type = ptrdiff_t; using pointer = _Tp*; using reference = _Tp&; }; # 235 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_iterator_base_types.h" 3 template __attribute__((__always_inline__)) inline constexpr typename iterator_traits<_Iter>::iterator_category __iterator_category(const _Iter&) { return typename iterator_traits<_Iter>::iterator_category(); } template using __iter_category_t = typename iterator_traits<_Iter>::iterator_category; template using _RequireInputIter = __enable_if_t, input_iterator_tag>::value>; template> struct __is_random_access_iter : is_base_of { typedef is_base_of _Base; enum { __value = _Base::value }; }; # 270 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_iterator_base_types.h" 3 } # 65 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_iterator.h" 2 3 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/ext/type_traits.h" 1 3 # 33 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/ext/type_traits.h" 3 extern "C++" { namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) { template struct __enable_if { }; template struct __enable_if { typedef _Tp __type; }; template struct __conditional_type { typedef _Iftrue __type; }; template struct __conditional_type { typedef _Iffalse __type; }; template struct __add_unsigned { private: typedef __enable_if::__value, _Tp> __if_type; public: typedef typename __if_type::__type __type; }; template<> struct __add_unsigned { typedef unsigned char __type; }; template<> struct __add_unsigned { typedef unsigned char __type; }; template<> struct __add_unsigned { typedef unsigned short __type; }; template<> struct __add_unsigned { typedef unsigned int __type; }; template<> struct __add_unsigned { typedef unsigned long __type; }; template<> struct __add_unsigned { typedef unsigned long long __type; }; template<> struct __add_unsigned; template<> struct __add_unsigned; template struct __remove_unsigned { private: typedef __enable_if::__value, _Tp> __if_type; public: typedef typename __if_type::__type __type; }; template<> struct __remove_unsigned { typedef signed char __type; }; template<> struct __remove_unsigned { typedef signed char __type; }; template<> struct __remove_unsigned { typedef short __type; }; template<> struct __remove_unsigned { typedef int __type; }; template<> struct __remove_unsigned { typedef long __type; }; template<> struct __remove_unsigned { typedef long long __type; }; template<> struct __remove_unsigned; template<> struct __remove_unsigned; template constexpr inline bool __is_null_pointer(_Type* __ptr) { return __ptr == 0; } template constexpr inline bool __is_null_pointer(_Type) { return false; } constexpr bool __is_null_pointer(std::nullptr_t) { return true; } template::__value> struct __promote { typedef double __type; }; template struct __promote<_Tp, false> { }; template<> struct __promote { typedef long double __type; }; template<> struct __promote { typedef double __type; }; template<> struct __promote { typedef float __type; }; # 225 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/ext/type_traits.h" 3 template using __promoted_t = decltype((typename __promote<_Tp>::__type(0) + ...)); template using __promote_2 = __promote<__promoted_t<_Tp, _Up>>; template using __promote_3 = __promote<__promoted_t<_Tp, _Up, _Vp>>; template using __promote_4 = __promote<__promoted_t<_Tp, _Up, _Vp, _Wp>>; # 270 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/ext/type_traits.h" 3 } } # 66 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_iterator.h" 2 3 # 75 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_iterator.h" 3 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/new" 1 3 # 39 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/new" 3 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/exception.h" 1 3 # 35 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/exception.h" 3 extern "C++" { namespace std __attribute__ ((__visibility__ ("default"))) { # 59 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/exception.h" 3 class exception { public: exception() noexcept { } virtual ~exception() noexcept; exception(const exception&) = default; exception& operator=(const exception&) = default; exception(exception&&) = default; exception& operator=(exception&&) = default; virtual const char* what() const noexcept; }; } } # 42 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/new" 2 3 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/version.h" 1 3 # 48 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/version.h" 3 # 47 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/new" 2 3 #pragma GCC visibility push(default) extern "C++" { namespace std { class bad_alloc : public exception { public: bad_alloc() throw() { } bad_alloc(const bad_alloc&) = default; bad_alloc& operator=(const bad_alloc&) = default; virtual ~bad_alloc() throw(); virtual const char* what() const throw(); }; class bad_array_new_length : public bad_alloc { public: bad_array_new_length() throw() { } virtual ~bad_array_new_length() throw(); virtual const char* what() const throw(); }; enum class align_val_t: size_t {}; struct nothrow_t { explicit nothrow_t() = default; }; extern const nothrow_t nothrow; typedef void (*new_handler)(); new_handler set_new_handler(new_handler) throw(); new_handler get_new_handler() noexcept; } # 131 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/new" 3 [[__nodiscard__]] void* operator new(std::size_t) __attribute__((__externally_visible__)); [[__nodiscard__]] void* operator new[](std::size_t) __attribute__((__externally_visible__)); void operator delete(void*) noexcept __attribute__((__externally_visible__)); void operator delete[](void*) noexcept __attribute__((__externally_visible__)); [[__nodiscard__]] void* operator new(std::size_t, const std::nothrow_t&) noexcept __attribute__((__externally_visible__, __alloc_size__ (1), __malloc__)); [[__nodiscard__]] void* operator new[](std::size_t, const std::nothrow_t&) noexcept __attribute__((__externally_visible__, __alloc_size__ (1), __malloc__)); void operator delete(void*, const std::nothrow_t&) noexcept __attribute__((__externally_visible__)); void operator delete[](void*, const std::nothrow_t&) noexcept __attribute__((__externally_visible__)); [[__nodiscard__]] void* operator new(std::size_t, std::align_val_t) __attribute__((__externally_visible__, __alloc_size__ (1), __malloc__)); [[__nodiscard__]] void* operator new(std::size_t, std::align_val_t, const std::nothrow_t&) noexcept __attribute__((__externally_visible__, __alloc_size__ (1), __malloc__)); void operator delete(void*, std::align_val_t) noexcept __attribute__((__externally_visible__)); void operator delete(void*, std::align_val_t, const std::nothrow_t&) noexcept __attribute__((__externally_visible__)); [[__nodiscard__]] void* operator new[](std::size_t, std::align_val_t) __attribute__((__externally_visible__, __alloc_size__ (1), __malloc__)); [[__nodiscard__]] void* operator new[](std::size_t, std::align_val_t, const std::nothrow_t&) noexcept __attribute__((__externally_visible__, __alloc_size__ (1), __malloc__)); void operator delete[](void*, std::align_val_t) noexcept __attribute__((__externally_visible__)); void operator delete[](void*, std::align_val_t, const std::nothrow_t&) noexcept __attribute__((__externally_visible__)); # 179 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/new" 3 [[__nodiscard__]] inline void* operator new(std::size_t, void* __p) noexcept { return __p; } [[__nodiscard__]] inline void* operator new[](std::size_t, void* __p) noexcept { return __p; } inline void operator delete (void*, void*) noexcept { } inline void operator delete[](void*, void*) noexcept { } } namespace std { template [[nodiscard]] constexpr _Tp* launder(_Tp* __p) noexcept { return __builtin_launder(__p); } template void launder(_Ret (*)(_Args...) noexcept (_NE)) = delete; template void launder(_Ret (*)(_Args......) noexcept (_NE)) = delete; void launder(void*) = delete; void launder(const void*) = delete; void launder(volatile void*) = delete; void launder(const volatile void*) = delete; } namespace std { struct destroying_delete_t { explicit destroying_delete_t() = default; }; inline constexpr destroying_delete_t destroying_delete{}; } #pragma GCC visibility pop # 76 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_iterator.h" 2 3 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/exception_defines.h" 1 3 # 77 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_iterator.h" 2 3 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_construct.h" 1 3 # 62 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_construct.h" 3 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_iterator_base_funcs.h" 1 3 # 63 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_iterator_base_funcs.h" 3 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/concept_check.h" 1 3 # 34 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/concept_check.h" 3 # 65 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_iterator_base_funcs.h" 2 3 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/debug/assertions.h" 1 3 # 66 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_iterator_base_funcs.h" 2 3 namespace std __attribute__ ((__visibility__ ("default"))) { template struct _List_iterator; template struct _List_const_iterator; template inline constexpr typename iterator_traits<_InputIterator>::difference_type __distance(_InputIterator __first, _InputIterator __last, input_iterator_tag) { typename iterator_traits<_InputIterator>::difference_type __n = 0; while (__first != __last) { ++__first; ++__n; } return __n; } template __attribute__((__always_inline__)) inline constexpr typename iterator_traits<_RandomAccessIterator>::difference_type __distance(_RandomAccessIterator __first, _RandomAccessIterator __last, random_access_iterator_tag) { return __last - __first; } template ptrdiff_t __distance(std::_List_iterator<_Tp>, std::_List_iterator<_Tp>, input_iterator_tag); template ptrdiff_t __distance(std::_List_const_iterator<_Tp>, std::_List_const_iterator<_Tp>, input_iterator_tag); template void __distance(_OutputIterator, _OutputIterator, output_iterator_tag) = delete; # 144 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_iterator_base_funcs.h" 3 template [[__nodiscard__]] __attribute__((__always_inline__)) inline constexpr typename iterator_traits<_InputIterator>::difference_type distance(_InputIterator __first, _InputIterator __last) { return std::__distance(__first, __last, std::__iterator_category(__first)); } template inline constexpr void __advance(_InputIterator& __i, _Distance __n, input_iterator_tag) { do { if (std::__is_constant_evaluated()) if (__builtin_expect(!bool(__n >= 0), false)) std::__glibcxx_assert_fail(); } while (false); while (__n--) ++__i; } template inline constexpr void __advance(_BidirectionalIterator& __i, _Distance __n, bidirectional_iterator_tag) { if (__n > 0) while (__n--) ++__i; else while (__n++) --__i; } template inline constexpr void __advance(_RandomAccessIterator& __i, _Distance __n, random_access_iterator_tag) { if (__builtin_constant_p(__n) && __n == 1) ++__i; else if (__builtin_constant_p(__n) && __n == -1) --__i; else __i += __n; } template void __advance(_OutputIterator&, _Distance, output_iterator_tag) = delete; # 217 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_iterator_base_funcs.h" 3 template __attribute__((__always_inline__)) inline constexpr void advance(_InputIterator& __i, _Distance __n) { typename iterator_traits<_InputIterator>::difference_type __d = __n; std::__advance(__i, __d, std::__iterator_category(__i)); } template [[__nodiscard__]] [[__gnu__::__always_inline__]] inline constexpr _InputIterator next(_InputIterator __x, typename iterator_traits<_InputIterator>::difference_type __n = 1) { std::advance(__x, __n); return __x; } template [[__nodiscard__]] [[__gnu__::__always_inline__]] inline constexpr _BidirectionalIterator prev(_BidirectionalIterator __x, typename iterator_traits<_BidirectionalIterator>::difference_type __n = 1) { std::advance(__x, -__n); return __x; } } # 63 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_construct.h" 2 3 # 73 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_construct.h" 3 namespace std __attribute__ ((__visibility__ ("default"))) { template constexpr inline void destroy_at(_Tp* __location) { if constexpr (202302L > 201703L && is_array_v<_Tp>) { for (auto& __x : *__location) std::destroy_at(std::__addressof(__x)); } else __location->~_Tp(); } template constexpr auto construct_at(_Tp* __location, _Args&&... __args) noexcept(noexcept(::new((void*)0) _Tp(std::declval<_Args>()...))) -> decltype(::new((void*)0) _Tp(std::declval<_Args>()...)) { return ::new((void*)__location) _Tp(std::forward<_Args>(__args)...); } # 106 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_construct.h" 3 template constexpr inline void _Construct(_Tp* __p, _Args&&... __args) { if (std::__is_constant_evaluated()) { std::construct_at(__p, std::forward<_Args>(__args)...); return; } ::new((void*)__p) _Tp(std::forward<_Args>(__args)...); } # 132 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_construct.h" 3 template inline void _Construct_novalue(_T1* __p) { ::new((void*)__p) _T1; } template constexpr void _Destroy(_ForwardIterator __first, _ForwardIterator __last); template constexpr inline void _Destroy(_Tp* __pointer) { std::destroy_at(__pointer); } template struct _Destroy_aux { template static constexpr void __destroy(_ForwardIterator __first, _ForwardIterator __last) { for (; __first != __last; ++__first) std::_Destroy(std::__addressof(*__first)); } }; template<> struct _Destroy_aux { template static void __destroy(_ForwardIterator, _ForwardIterator) { } }; template constexpr inline void _Destroy(_ForwardIterator __first, _ForwardIterator __last) { typedef typename iterator_traits<_ForwardIterator>::value_type _Value_type; static_assert(is_destructible<_Value_type>::value, "value type is destructible"); if (std::__is_constant_evaluated()) return std::_Destroy_aux::__destroy(__first, __last); std::_Destroy_aux<__has_trivial_destructor(_Value_type)>:: __destroy(__first, __last); } template struct _Destroy_n_aux { template static constexpr _ForwardIterator __destroy_n(_ForwardIterator __first, _Size __count) { for (; __count > 0; (void)++__first, --__count) std::_Destroy(std::__addressof(*__first)); return __first; } }; template<> struct _Destroy_n_aux { template static _ForwardIterator __destroy_n(_ForwardIterator __first, _Size __count) { std::advance(__first, __count); return __first; } }; template constexpr inline _ForwardIterator _Destroy_n(_ForwardIterator __first, _Size __count) { typedef typename iterator_traits<_ForwardIterator>::value_type _Value_type; static_assert(is_destructible<_Value_type>::value, "value type is destructible"); if (std::__is_constant_evaluated()) return std::_Destroy_n_aux::__destroy_n(__first, __count); return std::_Destroy_n_aux<__has_trivial_destructor(_Value_type)>:: __destroy_n(__first, __count); } template constexpr inline void destroy(_ForwardIterator __first, _ForwardIterator __last) { std::_Destroy(__first, __last); } template constexpr inline _ForwardIterator destroy_n(_ForwardIterator __first, _Size __count) { return std::_Destroy_n(__first, __count); } } # 79 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_iterator.h" 2 3 namespace std __attribute__ ((__visibility__ ("default"))) { # 95 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_iterator.h" 3 namespace __detail { template using __clamp_iter_cat = __conditional_t, _Limit, _Otherwise>; } #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wdeprecated-declarations" # 128 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_iterator.h" 3 template class reverse_iterator : public iterator::iterator_category, typename iterator_traits<_Iterator>::value_type, typename iterator_traits<_Iterator>::difference_type, typename iterator_traits<_Iterator>::pointer, typename iterator_traits<_Iterator>::reference> { template friend class reverse_iterator; template static constexpr bool __convertible = !is_same_v<_Iter, _Iterator> && convertible_to; protected: _Iterator current; typedef iterator_traits<_Iterator> __traits_type; public: typedef _Iterator iterator_type; typedef typename __traits_type::pointer pointer; using iterator_concept = __conditional_t, random_access_iterator_tag, bidirectional_iterator_tag>; using iterator_category = __detail::__clamp_iter_cat; using value_type = iter_value_t<_Iterator>; using difference_type = iter_difference_t<_Iterator>; using reference = iter_reference_t<_Iterator>; # 178 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_iterator.h" 3 constexpr reverse_iterator() noexcept(noexcept(_Iterator())) : current() { } explicit constexpr reverse_iterator(iterator_type __x) noexcept(noexcept(_Iterator(__x))) : current(__x) { } constexpr reverse_iterator(const reverse_iterator& __x) noexcept(noexcept(_Iterator(__x.current))) : current(__x.current) { } reverse_iterator& operator=(const reverse_iterator&) = default; template requires __convertible<_Iter> constexpr reverse_iterator(const reverse_iterator<_Iter>& __x) noexcept(noexcept(_Iterator(__x.current))) : current(__x.current) { } template requires __convertible<_Iter> && assignable_from<_Iterator&, const _Iter&> constexpr reverse_iterator& operator=(const reverse_iterator<_Iter>& __x) noexcept(noexcept(current = __x.current)) { current = __x.current; return *this; } [[__nodiscard__]] constexpr iterator_type base() const noexcept(noexcept(_Iterator(current))) { return current; } # 255 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_iterator.h" 3 [[__nodiscard__]] constexpr reference operator*() const { _Iterator __tmp = current; return *--__tmp; } [[__nodiscard__]] constexpr pointer operator->() const requires is_pointer_v<_Iterator> || requires(const _Iterator __i) { __i.operator->(); } { _Iterator __tmp = current; --__tmp; return _S_to_pointer(__tmp); } constexpr reverse_iterator& operator++() { --current; return *this; } constexpr reverse_iterator operator++(int) { reverse_iterator __tmp = *this; --current; return __tmp; } constexpr reverse_iterator& operator--() { ++current; return *this; } constexpr reverse_iterator operator--(int) { reverse_iterator __tmp = *this; ++current; return __tmp; } [[__nodiscard__]] constexpr reverse_iterator operator+(difference_type __n) const { return reverse_iterator(current - __n); } constexpr reverse_iterator& operator+=(difference_type __n) { current -= __n; return *this; } [[__nodiscard__]] constexpr reverse_iterator operator-(difference_type __n) const { return reverse_iterator(current + __n); } constexpr reverse_iterator& operator-=(difference_type __n) { current += __n; return *this; } [[__nodiscard__]] constexpr reference operator[](difference_type __n) const { return *(*this + __n); } [[nodiscard]] friend constexpr iter_rvalue_reference_t<_Iterator> iter_move(const reverse_iterator& __i) noexcept(is_nothrow_copy_constructible_v<_Iterator> && noexcept(ranges::iter_move(--std::declval<_Iterator&>()))) { auto __tmp = __i.base(); return ranges::iter_move(--__tmp); } template _Iter2> friend constexpr void iter_swap(const reverse_iterator& __x, const reverse_iterator<_Iter2>& __y) noexcept(is_nothrow_copy_constructible_v<_Iterator> && is_nothrow_copy_constructible_v<_Iter2> && noexcept(ranges::iter_swap(--std::declval<_Iterator&>(), --std::declval<_Iter2&>()))) { auto __xtmp = __x.base(); auto __ytmp = __y.base(); ranges::iter_swap(--__xtmp, --__ytmp); } private: template static constexpr _Tp* _S_to_pointer(_Tp* __p) { return __p; } template static constexpr pointer _S_to_pointer(_Tp __t) { return __t.operator->(); } }; # 524 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_iterator.h" 3 template [[nodiscard]] constexpr bool operator==(const reverse_iterator<_IteratorL>& __x, const reverse_iterator<_IteratorR>& __y) requires requires { { __x.base() == __y.base() } -> convertible_to; } { return __x.base() == __y.base(); } template [[nodiscard]] constexpr bool operator!=(const reverse_iterator<_IteratorL>& __x, const reverse_iterator<_IteratorR>& __y) requires requires { { __x.base() != __y.base() } -> convertible_to; } { return __x.base() != __y.base(); } template [[nodiscard]] constexpr bool operator<(const reverse_iterator<_IteratorL>& __x, const reverse_iterator<_IteratorR>& __y) requires requires { { __x.base() > __y.base() } -> convertible_to; } { return __x.base() > __y.base(); } template [[nodiscard]] constexpr bool operator>(const reverse_iterator<_IteratorL>& __x, const reverse_iterator<_IteratorR>& __y) requires requires { { __x.base() < __y.base() } -> convertible_to; } { return __x.base() < __y.base(); } template [[nodiscard]] constexpr bool operator<=(const reverse_iterator<_IteratorL>& __x, const reverse_iterator<_IteratorR>& __y) requires requires { { __x.base() >= __y.base() } -> convertible_to; } { return __x.base() >= __y.base(); } template [[nodiscard]] constexpr bool operator>=(const reverse_iterator<_IteratorL>& __x, const reverse_iterator<_IteratorR>& __y) requires requires { { __x.base() <= __y.base() } -> convertible_to; } { return __x.base() <= __y.base(); } template _IteratorR> [[nodiscard]] constexpr compare_three_way_result_t<_IteratorL, _IteratorR> operator<=>(const reverse_iterator<_IteratorL>& __x, const reverse_iterator<_IteratorR>& __y) { return __y.base() <=> __x.base(); } template [[nodiscard]] constexpr bool operator==(const reverse_iterator<_Iterator>& __x, const reverse_iterator<_Iterator>& __y) requires requires { { __x.base() == __y.base() } -> convertible_to; } { return __x.base() == __y.base(); } template [[nodiscard]] constexpr compare_three_way_result_t<_Iterator, _Iterator> operator<=>(const reverse_iterator<_Iterator>& __x, const reverse_iterator<_Iterator>& __y) { return __y.base() <=> __x.base(); } # 615 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_iterator.h" 3 template [[__nodiscard__]] inline constexpr auto operator-(const reverse_iterator<_IteratorL>& __x, const reverse_iterator<_IteratorR>& __y) -> decltype(__y.base() - __x.base()) { return __y.base() - __x.base(); } template [[__nodiscard__]] inline constexpr reverse_iterator<_Iterator> operator+(typename reverse_iterator<_Iterator>::difference_type __n, const reverse_iterator<_Iterator>& __x) { return reverse_iterator<_Iterator>(__x.base() - __n); } template inline constexpr reverse_iterator<_Iterator> __make_reverse_iterator(_Iterator __i) { return reverse_iterator<_Iterator>(__i); } template [[__nodiscard__]] inline constexpr reverse_iterator<_Iterator> make_reverse_iterator(_Iterator __i) { return reverse_iterator<_Iterator>(__i); } template requires (!sized_sentinel_for<_Iterator1, _Iterator2>) inline constexpr bool disable_sized_sentinel_for, reverse_iterator<_Iterator2>> = true; template constexpr auto __niter_base(reverse_iterator<_Iterator> __it) -> decltype(__make_reverse_iterator(__niter_base(__it.base()))) { return __make_reverse_iterator(__niter_base(__it.base())); } template struct __is_move_iterator > : __is_move_iterator<_Iterator> { }; template constexpr auto __miter_base(reverse_iterator<_Iterator> __it) -> decltype(__make_reverse_iterator(__miter_base(__it.base()))) { return __make_reverse_iterator(__miter_base(__it.base())); } # 688 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_iterator.h" 3 template class back_insert_iterator : public iterator { protected: _Container* container; public: typedef _Container container_type; using difference_type = ptrdiff_t; explicit constexpr back_insert_iterator(_Container& __x) : container(std::__addressof(__x)) { } # 726 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_iterator.h" 3 constexpr back_insert_iterator& operator=(const typename _Container::value_type& __value) { container->push_back(__value); return *this; } constexpr back_insert_iterator& operator=(typename _Container::value_type&& __value) { container->push_back(std::move(__value)); return *this; } [[__nodiscard__]] constexpr back_insert_iterator& operator*() { return *this; } constexpr back_insert_iterator& operator++() { return *this; } constexpr back_insert_iterator operator++(int) { return *this; } }; # 773 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_iterator.h" 3 template [[__nodiscard__]] constexpr inline back_insert_iterator<_Container> back_inserter(_Container& __x) { return back_insert_iterator<_Container>(__x); } # 789 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_iterator.h" 3 template class front_insert_iterator : public iterator { protected: _Container* container; public: typedef _Container container_type; using difference_type = ptrdiff_t; explicit constexpr front_insert_iterator(_Container& __x) : container(std::__addressof(__x)) { } # 827 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_iterator.h" 3 constexpr front_insert_iterator& operator=(const typename _Container::value_type& __value) { container->push_front(__value); return *this; } constexpr front_insert_iterator& operator=(typename _Container::value_type&& __value) { container->push_front(std::move(__value)); return *this; } [[__nodiscard__]] constexpr front_insert_iterator& operator*() { return *this; } constexpr front_insert_iterator& operator++() { return *this; } constexpr front_insert_iterator operator++(int) { return *this; } }; # 874 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_iterator.h" 3 template [[__nodiscard__]] constexpr inline front_insert_iterator<_Container> front_inserter(_Container& __x) { return front_insert_iterator<_Container>(__x); } # 894 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_iterator.h" 3 template class insert_iterator : public iterator { using _Iter = std::__detail::__range_iter_t<_Container>; protected: _Container* container; _Iter iter; public: typedef _Container container_type; using difference_type = ptrdiff_t; constexpr insert_iterator(_Container& __x, _Iter __i) : container(std::__addressof(__x)), iter(__i) {} # 955 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_iterator.h" 3 constexpr insert_iterator& operator=(const typename _Container::value_type& __value) { iter = container->insert(iter, __value); ++iter; return *this; } constexpr insert_iterator& operator=(typename _Container::value_type&& __value) { iter = container->insert(iter, std::move(__value)); ++iter; return *this; } [[__nodiscard__]] constexpr insert_iterator& operator*() { return *this; } constexpr insert_iterator& operator++() { return *this; } constexpr insert_iterator& operator++(int) { return *this; } }; #pragma GCC diagnostic pop # 1008 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_iterator.h" 3 template [[nodiscard]] constexpr insert_iterator<_Container> inserter(_Container& __x, std::__detail::__range_iter_t<_Container> __i) { return insert_iterator<_Container>(__x, __i); } # 1024 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_iterator.h" 3 } namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) { # 1037 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_iterator.h" 3 template class __normal_iterator { protected: _Iterator _M_current; typedef std::iterator_traits<_Iterator> __traits_type; template using __convertible_from = std::__enable_if_t::value>; public: typedef _Iterator iterator_type; typedef typename __traits_type::iterator_category iterator_category; typedef typename __traits_type::value_type value_type; typedef typename __traits_type::difference_type difference_type; typedef typename __traits_type::reference reference; typedef typename __traits_type::pointer pointer; using iterator_concept = std::__detail::__iter_concept<_Iterator>; constexpr __normal_iterator() noexcept : _M_current(_Iterator()) { } explicit constexpr __normal_iterator(const _Iterator& __i) noexcept : _M_current(__i) { } template> constexpr __normal_iterator(const __normal_iterator<_Iter, _Container>& __i) noexcept # 1085 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_iterator.h" 3 : _M_current(__i.base()) { } constexpr reference operator*() const noexcept { return *_M_current; } constexpr pointer operator->() const noexcept { return _M_current; } constexpr __normal_iterator& operator++() noexcept { ++_M_current; return *this; } constexpr __normal_iterator operator++(int) noexcept { return __normal_iterator(_M_current++); } constexpr __normal_iterator& operator--() noexcept { --_M_current; return *this; } constexpr __normal_iterator operator--(int) noexcept { return __normal_iterator(_M_current--); } constexpr reference operator[](difference_type __n) const noexcept { return _M_current[__n]; } constexpr __normal_iterator& operator+=(difference_type __n) noexcept { _M_current += __n; return *this; } constexpr __normal_iterator operator+(difference_type __n) const noexcept { return __normal_iterator(_M_current + __n); } constexpr __normal_iterator& operator-=(difference_type __n) noexcept { _M_current -= __n; return *this; } constexpr __normal_iterator operator-(difference_type __n) const noexcept { return __normal_iterator(_M_current - __n); } constexpr const _Iterator& base() const noexcept { return _M_current; } }; # 1166 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_iterator.h" 3 template [[nodiscard]] constexpr bool operator==(const __normal_iterator<_IteratorL, _Container>& __lhs, const __normal_iterator<_IteratorR, _Container>& __rhs) noexcept(noexcept(__lhs.base() == __rhs.base())) requires requires { { __lhs.base() == __rhs.base() } -> std::convertible_to; } { return __lhs.base() == __rhs.base(); } template [[nodiscard]] constexpr std::__detail::__synth3way_t<_IteratorR, _IteratorL> operator<=>(const __normal_iterator<_IteratorL, _Container>& __lhs, const __normal_iterator<_IteratorR, _Container>& __rhs) noexcept(noexcept(std::__detail::__synth3way(__lhs.base(), __rhs.base()))) { return std::__detail::__synth3way(__lhs.base(), __rhs.base()); } template [[nodiscard]] constexpr bool operator==(const __normal_iterator<_Iterator, _Container>& __lhs, const __normal_iterator<_Iterator, _Container>& __rhs) noexcept(noexcept(__lhs.base() == __rhs.base())) requires requires { { __lhs.base() == __rhs.base() } -> std::convertible_to; } { return __lhs.base() == __rhs.base(); } template [[nodiscard]] constexpr std::__detail::__synth3way_t<_Iterator> operator<=>(const __normal_iterator<_Iterator, _Container>& __lhs, const __normal_iterator<_Iterator, _Container>& __rhs) noexcept(noexcept(std::__detail::__synth3way(__lhs.base(), __rhs.base()))) { return std::__detail::__synth3way(__lhs.base(), __rhs.base()); } # 1307 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_iterator.h" 3 template [[__nodiscard__]] constexpr inline auto operator-(const __normal_iterator<_IteratorL, _Container>& __lhs, const __normal_iterator<_IteratorR, _Container>& __rhs) noexcept -> decltype(__lhs.base() - __rhs.base()) { return __lhs.base() - __rhs.base(); } template [[__nodiscard__]] constexpr inline typename __normal_iterator<_Iterator, _Container>::difference_type operator-(const __normal_iterator<_Iterator, _Container>& __lhs, const __normal_iterator<_Iterator, _Container>& __rhs) noexcept { return __lhs.base() - __rhs.base(); } template [[__nodiscard__]] constexpr inline __normal_iterator<_Iterator, _Container> operator+(typename __normal_iterator<_Iterator, _Container>::difference_type __n, const __normal_iterator<_Iterator, _Container>& __i) noexcept { return __normal_iterator<_Iterator, _Container>(__i.base() + __n); } } namespace std __attribute__ ((__visibility__ ("default"))) { template constexpr _Iterator __niter_base(__gnu_cxx::__normal_iterator<_Iterator, _Container> __it) noexcept(std::is_nothrow_copy_constructible<_Iterator>::value) { return __it.base(); } # 1371 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_iterator.h" 3 template class move_sentinel { public: constexpr move_sentinel() noexcept(is_nothrow_default_constructible_v<_Sent>) : _M_last() { } constexpr explicit move_sentinel(_Sent __s) noexcept(is_nothrow_move_constructible_v<_Sent>) : _M_last(std::move(__s)) { } template requires convertible_to constexpr move_sentinel(const move_sentinel<_S2>& __s) noexcept(is_nothrow_constructible_v<_Sent, const _S2&>) : _M_last(__s.base()) { } template requires assignable_from<_Sent&, const _S2&> constexpr move_sentinel& operator=(const move_sentinel<_S2>& __s) noexcept(is_nothrow_assignable_v<_Sent, const _S2&>) { _M_last = __s.base(); return *this; } [[nodiscard]] constexpr _Sent base() const noexcept(is_nothrow_copy_constructible_v<_Sent>) { return _M_last; } private: _Sent _M_last; }; namespace __detail { template struct __move_iter_cat { }; template requires requires { typename __iter_category_t<_Iterator>; } struct __move_iter_cat<_Iterator> { using iterator_category = __clamp_iter_cat<__iter_category_t<_Iterator>, random_access_iterator_tag>; }; } # 1439 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_iterator.h" 3 template class move_iterator : public __detail::__move_iter_cat<_Iterator> { _Iterator _M_current; using __traits_type = iterator_traits<_Iterator>; template friend class move_iterator; template static constexpr bool __convertible = !is_same_v<_Iter2, _Iterator> && convertible_to; static auto _S_iter_concept() { if constexpr (random_access_iterator<_Iterator>) return random_access_iterator_tag{}; else if constexpr (bidirectional_iterator<_Iterator>) return bidirectional_iterator_tag{}; else if constexpr (forward_iterator<_Iterator>) return forward_iterator_tag{}; else return input_iterator_tag{}; } public: using iterator_type = _Iterator; using iterator_concept = decltype(_S_iter_concept()); using value_type = iter_value_t<_Iterator>; using difference_type = iter_difference_t<_Iterator>; using pointer = _Iterator; using reference = iter_rvalue_reference_t<_Iterator>; # 1503 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_iterator.h" 3 constexpr move_iterator() : _M_current() { } explicit constexpr move_iterator(iterator_type __i) : _M_current(std::move(__i)) { } template requires __convertible<_Iter> constexpr move_iterator(const move_iterator<_Iter>& __i) : _M_current(__i._M_current) { } template requires __convertible<_Iter> && assignable_from<_Iterator&, const _Iter&> constexpr move_iterator& operator=(const move_iterator<_Iter>& __i) { _M_current = __i._M_current; return *this; } [[nodiscard]] constexpr const iterator_type& base() const & noexcept { return _M_current; } [[nodiscard]] constexpr iterator_type base() && { return std::move(_M_current); } [[__nodiscard__]] constexpr reference operator*() const { return ranges::iter_move(_M_current); } [[__nodiscard__]] constexpr pointer operator->() const { return _M_current; } constexpr move_iterator& operator++() { ++_M_current; return *this; } constexpr move_iterator operator++(int) { move_iterator __tmp = *this; ++_M_current; return __tmp; } constexpr void operator++(int) requires (!forward_iterator<_Iterator>) { ++_M_current; } constexpr move_iterator& operator--() { --_M_current; return *this; } constexpr move_iterator operator--(int) { move_iterator __tmp = *this; --_M_current; return __tmp; } [[__nodiscard__]] constexpr move_iterator operator+(difference_type __n) const { return move_iterator(_M_current + __n); } constexpr move_iterator& operator+=(difference_type __n) { _M_current += __n; return *this; } [[__nodiscard__]] constexpr move_iterator operator-(difference_type __n) const { return move_iterator(_M_current - __n); } constexpr move_iterator& operator-=(difference_type __n) { _M_current -= __n; return *this; } [[__nodiscard__]] constexpr reference operator[](difference_type __n) const { return ranges::iter_move(_M_current + __n); } template _Sent> [[nodiscard]] friend constexpr bool operator==(const move_iterator& __x, const move_sentinel<_Sent>& __y) { return __x.base() == __y.base(); } template _Sent> [[nodiscard]] friend constexpr iter_difference_t<_Iterator> operator-(const move_sentinel<_Sent>& __x, const move_iterator& __y) { return __x.base() - __y.base(); } template _Sent> [[nodiscard]] friend constexpr iter_difference_t<_Iterator> operator-(const move_iterator& __x, const move_sentinel<_Sent>& __y) { return __x.base() - __y.base(); } [[nodiscard]] friend constexpr iter_rvalue_reference_t<_Iterator> iter_move(const move_iterator& __i) noexcept(noexcept(ranges::iter_move(__i._M_current))) { return ranges::iter_move(__i._M_current); } template _Iter2> friend constexpr void iter_swap(const move_iterator& __x, const move_iterator<_Iter2>& __y) noexcept(noexcept(ranges::iter_swap(__x._M_current, __y._M_current))) { return ranges::iter_swap(__x._M_current, __y._M_current); } }; template [[__nodiscard__]] inline constexpr bool operator==(const move_iterator<_IteratorL>& __x, const move_iterator<_IteratorR>& __y) requires requires { { __x.base() == __y.base() } -> convertible_to; } { return __x.base() == __y.base(); } template _IteratorR> [[__nodiscard__]] constexpr compare_three_way_result_t<_IteratorL, _IteratorR> operator<=>(const move_iterator<_IteratorL>& __x, const move_iterator<_IteratorR>& __y) { return __x.base() <=> __y.base(); } # 1691 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_iterator.h" 3 template [[__nodiscard__]] inline constexpr bool operator<(const move_iterator<_IteratorL>& __x, const move_iterator<_IteratorR>& __y) requires requires { { __x.base() < __y.base() } -> convertible_to; } { return __x.base() < __y.base(); } template [[__nodiscard__]] inline constexpr bool operator<=(const move_iterator<_IteratorL>& __x, const move_iterator<_IteratorR>& __y) requires requires { { __y.base() < __x.base() } -> convertible_to; } { return !(__y < __x); } template [[__nodiscard__]] inline constexpr bool operator>(const move_iterator<_IteratorL>& __x, const move_iterator<_IteratorR>& __y) requires requires { { __y.base() < __x.base() } -> convertible_to; } { return __y < __x; } template [[__nodiscard__]] inline constexpr bool operator>=(const move_iterator<_IteratorL>& __x, const move_iterator<_IteratorR>& __y) requires requires { { __x.base() < __y.base() } -> convertible_to; } { return !(__x < __y); } template [[__nodiscard__]] inline constexpr bool operator==(const move_iterator<_Iterator>& __x, const move_iterator<_Iterator>& __y) { return __x.base() == __y.base(); } template [[__nodiscard__]] constexpr compare_three_way_result_t<_Iterator> operator<=>(const move_iterator<_Iterator>& __x, const move_iterator<_Iterator>& __y) { return __x.base() <=> __y.base(); } # 1786 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_iterator.h" 3 template [[__nodiscard__]] inline constexpr auto operator-(const move_iterator<_IteratorL>& __x, const move_iterator<_IteratorR>& __y) -> decltype(__x.base() - __y.base()) { return __x.base() - __y.base(); } template [[__nodiscard__]] inline constexpr move_iterator<_Iterator> operator+(typename move_iterator<_Iterator>::difference_type __n, const move_iterator<_Iterator>& __x) { return __x + __n; } template [[__nodiscard__]] inline constexpr move_iterator<_Iterator> make_move_iterator(_Iterator __i) { return move_iterator<_Iterator>(std::move(__i)); } template::value_type>::value, _Iterator, move_iterator<_Iterator>>> inline constexpr _ReturnType __make_move_if_noexcept_iterator(_Iterator __i) { return _ReturnType(__i); } template::value, const _Tp*, move_iterator<_Tp*>>> inline constexpr _ReturnType __make_move_if_noexcept_iterator(_Tp* __i) { return _ReturnType(__i); } namespace __detail { template concept __common_iter_has_arrow = indirectly_readable && (requires(const _It& __it) { __it.operator->(); } || is_reference_v> || constructible_from, iter_reference_t<_It>>); template concept __common_iter_use_postfix_proxy = (!requires (_It& __i) { { *__i++ } -> __can_reference; }) && constructible_from, iter_reference_t<_It>> && move_constructible>; } template _Sent> requires (!same_as<_It, _Sent>) && copyable<_It> class common_iterator { template static constexpr bool _S_noexcept1() { if constexpr (is_trivially_default_constructible_v<_Tp>) return is_nothrow_assignable_v<_Tp&, _Up>; else return is_nothrow_constructible_v<_Tp, _Up>; } template static constexpr bool _S_noexcept() { return _S_noexcept1<_It, _It2>() && _S_noexcept1<_Sent, _Sent2>(); } class __arrow_proxy { iter_value_t<_It> _M_keep; constexpr __arrow_proxy(iter_reference_t<_It>&& __x) : _M_keep(std::move(__x)) { } friend class common_iterator; public: constexpr const iter_value_t<_It>* operator->() const noexcept { return std::__addressof(_M_keep); } }; class __postfix_proxy { iter_value_t<_It> _M_keep; constexpr __postfix_proxy(iter_reference_t<_It>&& __x) : _M_keep(std::forward>(__x)) { } friend class common_iterator; public: constexpr const iter_value_t<_It>& operator*() const noexcept { return _M_keep; } }; public: constexpr common_iterator() noexcept(is_nothrow_default_constructible_v<_It>) requires default_initializable<_It> : _M_it(), _M_index(0) { } constexpr common_iterator(_It __i) noexcept(is_nothrow_move_constructible_v<_It>) : _M_it(std::move(__i)), _M_index(0) { } constexpr common_iterator(_Sent __s) noexcept(is_nothrow_move_constructible_v<_Sent>) : _M_sent(std::move(__s)), _M_index(1) { } template requires convertible_to && convertible_to constexpr common_iterator(const common_iterator<_It2, _Sent2>& __x) noexcept(_S_noexcept()) : _M_valueless(), _M_index(__x._M_index) { do { if (std::__is_constant_evaluated()) if (__builtin_expect(!bool(__x._M_has_value()), false)) std::__glibcxx_assert_fail(); } while (false); if (_M_index == 0) { if constexpr (is_trivially_default_constructible_v<_It>) _M_it = std::move(__x._M_it); else std::construct_at(std::__addressof(_M_it), __x._M_it); } else if (_M_index == 1) { if constexpr (is_trivially_default_constructible_v<_Sent>) _M_sent = std::move(__x._M_sent); else std::construct_at(std::__addressof(_M_sent), __x._M_sent); } } common_iterator(const common_iterator&) = default; constexpr common_iterator(const common_iterator& __x) noexcept(_S_noexcept()) requires (!is_trivially_copyable_v<_It> || !is_trivially_copyable_v<_Sent>) : _M_valueless(), _M_index(__x._M_index) { if (_M_index == 0) { if constexpr (is_trivially_default_constructible_v<_It>) _M_it = __x._M_it; else std::construct_at(std::__addressof(_M_it), __x._M_it); } else if (_M_index == 1) { if constexpr (is_trivially_default_constructible_v<_Sent>) _M_sent = __x._M_sent; else std::construct_at(std::__addressof(_M_sent), __x._M_sent); } } common_iterator(common_iterator&&) = default; constexpr common_iterator(common_iterator&& __x) noexcept(_S_noexcept<_It, _Sent>()) requires (!is_trivially_copyable_v<_It> || !is_trivially_copyable_v<_Sent>) : _M_valueless(), _M_index(__x._M_index) { if (_M_index == 0) { if constexpr (is_trivially_default_constructible_v<_It>) _M_it = std::move(__x._M_it); else std::construct_at(std::__addressof(_M_it), std::move(__x._M_it)); } else if (_M_index == 1) { if constexpr (is_trivially_default_constructible_v<_Sent>) _M_sent = std::move(__x._M_sent); else std::construct_at(std::__addressof(_M_sent), std::move(__x._M_sent)); } } constexpr common_iterator& operator=(const common_iterator&) = default; constexpr common_iterator& operator=(const common_iterator& __x) noexcept(is_nothrow_copy_assignable_v<_It> && is_nothrow_copy_assignable_v<_Sent> && is_nothrow_copy_constructible_v<_It> && is_nothrow_copy_constructible_v<_Sent>) requires (!is_trivially_copy_assignable_v<_It> || !is_trivially_copy_assignable_v<_Sent>) { _M_assign(__x); return *this; } constexpr common_iterator& operator=(common_iterator&&) = default; constexpr common_iterator& operator=(common_iterator&& __x) noexcept(is_nothrow_move_assignable_v<_It> && is_nothrow_move_assignable_v<_Sent> && is_nothrow_move_constructible_v<_It> && is_nothrow_move_constructible_v<_Sent>) requires (!is_trivially_move_assignable_v<_It> || !is_trivially_move_assignable_v<_Sent>) { _M_assign(std::move(__x)); return *this; } template requires convertible_to && convertible_to && assignable_from<_It&, const _It2&> && assignable_from<_Sent&, const _Sent2&> constexpr common_iterator& operator=(const common_iterator<_It2, _Sent2>& __x) noexcept(is_nothrow_constructible_v<_It, const _It2&> && is_nothrow_constructible_v<_Sent, const _Sent2&> && is_nothrow_assignable_v<_It&, const _It2&> && is_nothrow_assignable_v<_Sent&, const _Sent2&>) { do { if (std::__is_constant_evaluated()) if (__builtin_expect(!bool(__x._M_has_value()), false)) std::__glibcxx_assert_fail(); } while (false); _M_assign(__x); return *this; } # 2045 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_iterator.h" 3 constexpr ~common_iterator() { if (_M_index == 0) _M_it.~_It(); else if (_M_index == 1) _M_sent.~_Sent(); } [[nodiscard]] constexpr decltype(auto) operator*() { do { if (std::__is_constant_evaluated()) if (__builtin_expect(!bool(_M_index == 0), false)) std::__glibcxx_assert_fail(); } while (false); return *_M_it; } [[nodiscard]] constexpr decltype(auto) operator*() const requires __detail::__dereferenceable { do { if (std::__is_constant_evaluated()) if (__builtin_expect(!bool(_M_index == 0), false)) std::__glibcxx_assert_fail(); } while (false); return *_M_it; } [[nodiscard]] constexpr auto operator->() const requires __detail::__common_iter_has_arrow<_It> { do { if (std::__is_constant_evaluated()) if (__builtin_expect(!bool(_M_index == 0), false)) std::__glibcxx_assert_fail(); } while (false); if constexpr (is_pointer_v<_It> || requires { _M_it.operator->(); }) return _M_it; else if constexpr (is_reference_v>) { auto&& __tmp = *_M_it; return std::__addressof(__tmp); } else return __arrow_proxy{*_M_it}; } constexpr common_iterator& operator++() { do { if (std::__is_constant_evaluated()) if (__builtin_expect(!bool(_M_index == 0), false)) std::__glibcxx_assert_fail(); } while (false); ++_M_it; return *this; } constexpr decltype(auto) operator++(int) { do { if (std::__is_constant_evaluated()) if (__builtin_expect(!bool(_M_index == 0), false)) std::__glibcxx_assert_fail(); } while (false); if constexpr (forward_iterator<_It>) { common_iterator __tmp = *this; ++*this; return __tmp; } else if constexpr (!__detail::__common_iter_use_postfix_proxy<_It>) return _M_it++; else { __postfix_proxy __p(**this); ++*this; return __p; } } template _Sent2> requires sentinel_for<_Sent, _It2> friend constexpr bool operator== [[nodiscard]] (const common_iterator& __x, const common_iterator<_It2, _Sent2>& __y) { switch(__x._M_index << 2 | __y._M_index) { case 0b0000: case 0b0101: return true; case 0b0001: return __x._M_it == __y._M_sent; case 0b0100: return __x._M_sent == __y._M_it; default: do { if (std::__is_constant_evaluated()) if (__builtin_expect(!bool(__x._M_has_value()), false)) std::__glibcxx_assert_fail(); } while (false); do { if (std::__is_constant_evaluated()) if (__builtin_expect(!bool(__y._M_has_value()), false)) std::__glibcxx_assert_fail(); } while (false); __builtin_unreachable(); } } template _Sent2> requires sentinel_for<_Sent, _It2> && equality_comparable_with<_It, _It2> friend constexpr bool operator== [[nodiscard]] (const common_iterator& __x, const common_iterator<_It2, _Sent2>& __y) { switch(__x._M_index << 2 | __y._M_index) { case 0b0101: return true; case 0b0000: return __x._M_it == __y._M_it; case 0b0001: return __x._M_it == __y._M_sent; case 0b0100: return __x._M_sent == __y._M_it; default: do { if (std::__is_constant_evaluated()) if (__builtin_expect(!bool(__x._M_has_value()), false)) std::__glibcxx_assert_fail(); } while (false); do { if (std::__is_constant_evaluated()) if (__builtin_expect(!bool(__y._M_has_value()), false)) std::__glibcxx_assert_fail(); } while (false); __builtin_unreachable(); } } template _It2, sized_sentinel_for<_It> _Sent2> requires sized_sentinel_for<_Sent, _It2> friend constexpr iter_difference_t<_It2> operator- [[nodiscard]] (const common_iterator& __x, const common_iterator<_It2, _Sent2>& __y) { switch(__x._M_index << 2 | __y._M_index) { case 0b0101: return 0; case 0b0000: return __x._M_it - __y._M_it; case 0b0001: return __x._M_it - __y._M_sent; case 0b0100: return __x._M_sent - __y._M_it; default: do { if (std::__is_constant_evaluated()) if (__builtin_expect(!bool(__x._M_has_value()), false)) std::__glibcxx_assert_fail(); } while (false); do { if (std::__is_constant_evaluated()) if (__builtin_expect(!bool(__y._M_has_value()), false)) std::__glibcxx_assert_fail(); } while (false); __builtin_unreachable(); } } [[nodiscard]] friend constexpr iter_rvalue_reference_t<_It> iter_move(const common_iterator& __i) noexcept(noexcept(ranges::iter_move(std::declval()))) requires input_iterator<_It> { do { if (std::__is_constant_evaluated()) if (__builtin_expect(!bool(__i._M_index == 0), false)) std::__glibcxx_assert_fail(); } while (false); return ranges::iter_move(__i._M_it); } template _It2, typename _Sent2> friend constexpr void iter_swap(const common_iterator& __x, const common_iterator<_It2, _Sent2>& __y) noexcept(noexcept(ranges::iter_swap(std::declval(), std::declval()))) { do { if (std::__is_constant_evaluated()) if (__builtin_expect(!bool(__x._M_index == 0), false)) std::__glibcxx_assert_fail(); } while (false); do { if (std::__is_constant_evaluated()) if (__builtin_expect(!bool(__y._M_index == 0), false)) std::__glibcxx_assert_fail(); } while (false); return ranges::iter_swap(__x._M_it, __y._M_it); } private: template _Sent2> requires (!same_as<_It2, _Sent2>) && copyable<_It2> friend class common_iterator; constexpr bool _M_has_value() const noexcept { return _M_index != _S_valueless; } template constexpr void _M_assign(_CIt&& __x) { if (_M_index == __x._M_index) { if (_M_index == 0) _M_it = std::forward<_CIt>(__x)._M_it; else if (_M_index == 1) _M_sent = std::forward<_CIt>(__x)._M_sent; } else { if (_M_index == 0) _M_it.~_It(); else if (_M_index == 1) _M_sent.~_Sent(); _M_index = _S_valueless; if (__x._M_index == 0) std::construct_at(std::__addressof(_M_it), std::forward<_CIt>(__x)._M_it); else if (__x._M_index == 1) std::construct_at(std::__addressof(_M_sent), std::forward<_CIt>(__x)._M_sent); _M_index = __x._M_index; } } union { _It _M_it; _Sent _M_sent; unsigned char _M_valueless; }; unsigned char _M_index; static constexpr unsigned char _S_valueless{2}; }; template struct incrementable_traits> { using difference_type = iter_difference_t<_It>; }; template struct iterator_traits> { private: template struct __ptr { using type = void; }; template requires __detail::__common_iter_has_arrow<_Iter> struct __ptr<_Iter> { using _CIter = common_iterator<_Iter, _Sent>; using type = decltype(std::declval().operator->()); }; static auto _S_iter_cat() { if constexpr (requires { requires derived_from<__iter_category_t<_It>, forward_iterator_tag>; }) return forward_iterator_tag{}; else return input_iterator_tag{}; } public: using iterator_concept = __conditional_t, forward_iterator_tag, input_iterator_tag>; using iterator_category = decltype(_S_iter_cat()); using value_type = iter_value_t<_It>; using difference_type = iter_difference_t<_It>; using pointer = typename __ptr<_It>::type; using reference = iter_reference_t<_It>; }; namespace __detail { template struct __counted_iter_value_type { }; template struct __counted_iter_value_type<_It> { using value_type = iter_value_t<_It>; }; template struct __counted_iter_concept { }; template requires requires { typename _It::iterator_concept; } struct __counted_iter_concept<_It> { using iterator_concept = typename _It::iterator_concept; }; template struct __counted_iter_cat { }; template requires requires { typename _It::iterator_category; } struct __counted_iter_cat<_It> { using iterator_category = typename _It::iterator_category; }; } template class counted_iterator : public __detail::__counted_iter_value_type<_It>, public __detail::__counted_iter_concept<_It>, public __detail::__counted_iter_cat<_It> { public: using iterator_type = _It; using difference_type = iter_difference_t<_It>; constexpr counted_iterator() requires default_initializable<_It> = default; constexpr counted_iterator(_It __i, iter_difference_t<_It> __n) : _M_current(std::move(__i)), _M_length(__n) { do { if (std::__is_constant_evaluated()) if (__builtin_expect(!bool(__n >= 0), false)) std::__glibcxx_assert_fail(); } while (false); } template requires convertible_to constexpr counted_iterator(const counted_iterator<_It2>& __x) : _M_current(__x._M_current), _M_length(__x._M_length) { } template requires assignable_from<_It&, const _It2&> constexpr counted_iterator& operator=(const counted_iterator<_It2>& __x) { _M_current = __x._M_current; _M_length = __x._M_length; return *this; } [[nodiscard]] constexpr const _It& base() const & noexcept { return _M_current; } [[nodiscard]] constexpr _It base() && noexcept(is_nothrow_move_constructible_v<_It>) { return std::move(_M_current); } [[nodiscard]] constexpr iter_difference_t<_It> count() const noexcept { return _M_length; } [[nodiscard]] constexpr decltype(auto) operator*() noexcept(noexcept(*_M_current)) { do { if (std::__is_constant_evaluated()) if (__builtin_expect(!bool(_M_length > 0), false)) std::__glibcxx_assert_fail(); } while (false); return *_M_current; } [[nodiscard]] constexpr decltype(auto) operator*() const noexcept(noexcept(*_M_current)) requires __detail::__dereferenceable { do { if (std::__is_constant_evaluated()) if (__builtin_expect(!bool(_M_length > 0), false)) std::__glibcxx_assert_fail(); } while (false); return *_M_current; } [[nodiscard]] constexpr auto operator->() const noexcept requires contiguous_iterator<_It> { return std::to_address(_M_current); } constexpr counted_iterator& operator++() { do { if (std::__is_constant_evaluated()) if (__builtin_expect(!bool(_M_length > 0), false)) std::__glibcxx_assert_fail(); } while (false); ++_M_current; --_M_length; return *this; } constexpr decltype(auto) operator++(int) { do { if (std::__is_constant_evaluated()) if (__builtin_expect(!bool(_M_length > 0), false)) std::__glibcxx_assert_fail(); } while (false); --_M_length; try { return _M_current++; } catch(...) { ++_M_length; throw; } } constexpr counted_iterator operator++(int) requires forward_iterator<_It> { auto __tmp = *this; ++*this; return __tmp; } constexpr counted_iterator& operator--() requires bidirectional_iterator<_It> { --_M_current; ++_M_length; return *this; } constexpr counted_iterator operator--(int) requires bidirectional_iterator<_It> { auto __tmp = *this; --*this; return __tmp; } [[nodiscard]] constexpr counted_iterator operator+(iter_difference_t<_It> __n) const requires random_access_iterator<_It> { return counted_iterator(_M_current + __n, _M_length - __n); } [[nodiscard]] friend constexpr counted_iterator operator+(iter_difference_t<_It> __n, const counted_iterator& __x) requires random_access_iterator<_It> { return __x + __n; } constexpr counted_iterator& operator+=(iter_difference_t<_It> __n) requires random_access_iterator<_It> { do { if (std::__is_constant_evaluated()) if (__builtin_expect(!bool(__n <= _M_length), false)) std::__glibcxx_assert_fail(); } while (false); _M_current += __n; _M_length -= __n; return *this; } [[nodiscard]] constexpr counted_iterator operator-(iter_difference_t<_It> __n) const requires random_access_iterator<_It> { return counted_iterator(_M_current - __n, _M_length + __n); } template _It2> [[nodiscard]] friend constexpr iter_difference_t<_It2> operator-(const counted_iterator& __x, const counted_iterator<_It2>& __y) { return __y._M_length - __x._M_length; } [[nodiscard]] friend constexpr iter_difference_t<_It> operator-(const counted_iterator& __x, default_sentinel_t) { return -__x._M_length; } [[nodiscard]] friend constexpr iter_difference_t<_It> operator-(default_sentinel_t, const counted_iterator& __y) { return __y._M_length; } constexpr counted_iterator& operator-=(iter_difference_t<_It> __n) requires random_access_iterator<_It> { do { if (std::__is_constant_evaluated()) if (__builtin_expect(!bool(-__n <= _M_length), false)) std::__glibcxx_assert_fail(); } while (false); _M_current -= __n; _M_length += __n; return *this; } [[nodiscard]] constexpr decltype(auto) operator[](iter_difference_t<_It> __n) const noexcept(noexcept(_M_current[__n])) requires random_access_iterator<_It> { do { if (std::__is_constant_evaluated()) if (__builtin_expect(!bool(__n < _M_length), false)) std::__glibcxx_assert_fail(); } while (false); return _M_current[__n]; } template _It2> [[nodiscard]] friend constexpr bool operator==(const counted_iterator& __x, const counted_iterator<_It2>& __y) { return __x._M_length == __y._M_length; } [[nodiscard]] friend constexpr bool operator==(const counted_iterator& __x, default_sentinel_t) { return __x._M_length == 0; } template _It2> [[nodiscard]] friend constexpr strong_ordering operator<=>(const counted_iterator& __x, const counted_iterator<_It2>& __y) { return __y._M_length <=> __x._M_length; } [[nodiscard]] friend constexpr iter_rvalue_reference_t<_It> iter_move(const counted_iterator& __i) noexcept(noexcept(ranges::iter_move(__i._M_current))) requires input_iterator<_It> { do { if (std::__is_constant_evaluated()) if (__builtin_expect(!bool(__i._M_length > 0), false)) std::__glibcxx_assert_fail(); } while (false); return ranges::iter_move(__i._M_current); } template _It2> friend constexpr void iter_swap(const counted_iterator& __x, const counted_iterator<_It2>& __y) noexcept(noexcept(ranges::iter_swap(__x._M_current, __y._M_current))) { do { if (std::__is_constant_evaluated()) if (__builtin_expect(!bool(__x._M_length > 0 && __y._M_length > 0), false)) std::__glibcxx_assert_fail(); } while (false); ranges::iter_swap(__x._M_current, __y._M_current); } private: template friend class counted_iterator; _It _M_current = _It(); iter_difference_t<_It> _M_length = 0; }; template requires same_as<__detail::__iter_traits<_It>, iterator_traits<_It>> struct iterator_traits> : iterator_traits<_It> { using pointer = __conditional_t, add_pointer_t>, void>; }; template using iter_const_reference_t = common_reference_t&&, iter_reference_t<_It>>; template class basic_const_iterator; namespace __detail { template concept __constant_iterator = input_iterator<_It> && same_as, iter_reference_t<_It>>; template inline constexpr bool __is_const_iterator = false; template inline constexpr bool __is_const_iterator> = true; template concept __not_a_const_iterator = !__is_const_iterator<_Tp>; template using __iter_const_rvalue_reference_t = common_reference_t&&, iter_rvalue_reference_t<_It>>; template struct __basic_const_iterator_iter_cat { }; template struct __basic_const_iterator_iter_cat<_It> { using iterator_category = __iter_category_t<_It>; }; } template using const_iterator = __conditional_t<__detail::__constant_iterator<_It>, _It, basic_const_iterator<_It>>; namespace __detail { template struct __const_sentinel { using type = _Sent; }; template struct __const_sentinel<_Sent> { using type = const_iterator<_Sent>; }; } template using const_sentinel = typename __detail::__const_sentinel<_Sent>::type; template class basic_const_iterator : public __detail::__basic_const_iterator_iter_cat<_It> { _It _M_current = _It(); using __reference = iter_const_reference_t<_It>; using __rvalue_reference = __detail::__iter_const_rvalue_reference_t<_It>; static auto _S_iter_concept() { if constexpr (contiguous_iterator<_It>) return contiguous_iterator_tag{}; else if constexpr (random_access_iterator<_It>) return random_access_iterator_tag{}; else if constexpr (bidirectional_iterator<_It>) return bidirectional_iterator_tag{}; else if constexpr (forward_iterator<_It>) return forward_iterator_tag{}; else return input_iterator_tag{}; } template friend class basic_const_iterator; public: using iterator_concept = decltype(_S_iter_concept()); using value_type = iter_value_t<_It>; using difference_type = iter_difference_t<_It>; basic_const_iterator() requires default_initializable<_It> = default; constexpr basic_const_iterator(_It __current) noexcept(is_nothrow_move_constructible_v<_It>) : _M_current(std::move(__current)) { } template _It2> constexpr basic_const_iterator(basic_const_iterator<_It2> __current) noexcept(is_nothrow_constructible_v<_It, _It2>) : _M_current(std::move(__current._M_current)) { } template<__detail::__different_from _Tp> requires convertible_to<_Tp, _It> constexpr basic_const_iterator(_Tp&& __current) noexcept(is_nothrow_constructible_v<_It, _Tp>) : _M_current(std::forward<_Tp>(__current)) { } constexpr const _It& base() const & noexcept { return _M_current; } constexpr _It base() && noexcept(is_nothrow_move_constructible_v<_It>) { return std::move(_M_current); } constexpr __reference operator*() const noexcept(noexcept(static_cast<__reference>(*_M_current))) { return static_cast<__reference>(*_M_current); } constexpr const auto* operator->() const noexcept(contiguous_iterator<_It> || noexcept(*_M_current)) requires is_lvalue_reference_v> && same_as>, value_type> { if constexpr (contiguous_iterator<_It>) return std::to_address(_M_current); else return std::__addressof(*_M_current); } constexpr basic_const_iterator& operator++() noexcept(noexcept(++_M_current)) { ++_M_current; return *this; } constexpr void operator++(int) noexcept(noexcept(++_M_current)) { ++_M_current; } constexpr basic_const_iterator operator++(int) noexcept(noexcept(++*this) && is_nothrow_copy_constructible_v) requires forward_iterator<_It> { auto __tmp = *this; ++*this; return __tmp; } constexpr basic_const_iterator& operator--() noexcept(noexcept(--_M_current)) requires bidirectional_iterator<_It> { --_M_current; return *this; } constexpr basic_const_iterator operator--(int) noexcept(noexcept(--*this) && is_nothrow_copy_constructible_v) requires bidirectional_iterator<_It> { auto __tmp = *this; --*this; return __tmp; } constexpr basic_const_iterator& operator+=(difference_type __n) noexcept(noexcept(_M_current += __n)) requires random_access_iterator<_It> { _M_current += __n; return *this; } constexpr basic_const_iterator& operator-=(difference_type __n) noexcept(noexcept(_M_current -= __n)) requires random_access_iterator<_It> { _M_current -= __n; return *this; } constexpr __reference operator[](difference_type __n) const noexcept(noexcept(static_cast<__reference>(_M_current[__n]))) requires random_access_iterator<_It> { return static_cast<__reference>(_M_current[__n]); } template _Sent> constexpr bool operator==(const _Sent& __s) const noexcept(noexcept(_M_current == __s)) { return _M_current == __s; } template<__detail::__not_a_const_iterator _CIt> requires __detail::__constant_iterator<_CIt> && convertible_to<_It, _CIt> constexpr operator _CIt() const& { return _M_current; } template<__detail::__not_a_const_iterator _CIt> requires __detail::__constant_iterator<_CIt> && convertible_to<_It, _CIt> constexpr operator _CIt() && { return std::move(_M_current); } constexpr bool operator<(const basic_const_iterator& __y) const noexcept(noexcept(_M_current < __y._M_current)) requires random_access_iterator<_It> { return _M_current < __y._M_current; } constexpr bool operator>(const basic_const_iterator& __y) const noexcept(noexcept(_M_current > __y._M_current)) requires random_access_iterator<_It> { return _M_current > __y._M_current; } constexpr bool operator<=(const basic_const_iterator& __y) const noexcept(noexcept(_M_current <= __y._M_current)) requires random_access_iterator<_It> { return _M_current <= __y._M_current; } constexpr bool operator>=(const basic_const_iterator& __y) const noexcept(noexcept(_M_current >= __y._M_current)) requires random_access_iterator<_It> { return _M_current >= __y._M_current; } constexpr auto operator<=>(const basic_const_iterator& __y) const noexcept(noexcept(_M_current <=> __y._M_current)) requires random_access_iterator<_It> && three_way_comparable<_It> { return _M_current <=> __y._M_current; } template<__detail::__different_from _It2> constexpr bool operator<(const _It2& __y) const noexcept(noexcept(_M_current < __y)) requires random_access_iterator<_It> && totally_ordered_with<_It, _It2> { return _M_current < __y; } template<__detail::__different_from _It2> constexpr bool operator>(const _It2& __y) const noexcept(noexcept(_M_current > __y)) requires random_access_iterator<_It> && totally_ordered_with<_It, _It2> { return _M_current > __y; } template<__detail::__different_from _It2> constexpr bool operator<=(const _It2& __y) const noexcept(noexcept(_M_current <= __y)) requires random_access_iterator<_It> && totally_ordered_with<_It, _It2> { return _M_current <= __y; } template<__detail::__different_from _It2> constexpr bool operator>=(const _It2& __y) const noexcept(noexcept(_M_current >= __y)) requires random_access_iterator<_It> && totally_ordered_with<_It, _It2> { return _M_current >= __y; } template<__detail::__different_from _It2> constexpr auto operator<=>(const _It2& __y) const noexcept(noexcept(_M_current <=> __y)) requires random_access_iterator<_It> && totally_ordered_with<_It, _It2> && three_way_comparable_with<_It, _It2> { return _M_current <=> __y; } template<__detail::__not_a_const_iterator _It2> friend constexpr bool operator<(const _It2& __x, const basic_const_iterator& __y) noexcept(noexcept(__x < __y._M_current)) requires random_access_iterator<_It> && totally_ordered_with<_It, _It2> { return __x < __y._M_current; } template<__detail::__not_a_const_iterator _It2> friend constexpr bool operator>(const _It2& __x, const basic_const_iterator& __y) noexcept(noexcept(__x > __y._M_current)) requires random_access_iterator<_It> && totally_ordered_with<_It, _It2> { return __x > __y._M_current; } template<__detail::__not_a_const_iterator _It2> friend constexpr bool operator<=(const _It2& __x, const basic_const_iterator& __y) noexcept(noexcept(__x <= __y._M_current)) requires random_access_iterator<_It> && totally_ordered_with<_It, _It2> { return __x <= __y._M_current; } template<__detail::__not_a_const_iterator _It2> friend constexpr bool operator>=(const _It2& __x, const basic_const_iterator& __y) noexcept(noexcept(__x >= __y._M_current)) requires random_access_iterator<_It> && totally_ordered_with<_It, _It2> { return __x >= __y._M_current; } friend constexpr basic_const_iterator operator+(const basic_const_iterator& __i, difference_type __n) noexcept(noexcept(basic_const_iterator(__i._M_current + __n))) requires random_access_iterator<_It> { return basic_const_iterator(__i._M_current + __n); } friend constexpr basic_const_iterator operator+(difference_type __n, const basic_const_iterator& __i) noexcept(noexcept(basic_const_iterator(__i._M_current + __n))) requires random_access_iterator<_It> { return basic_const_iterator(__i._M_current + __n); } friend constexpr basic_const_iterator operator-(const basic_const_iterator& __i, difference_type __n) noexcept(noexcept(basic_const_iterator(__i._M_current - __n))) requires random_access_iterator<_It> { return basic_const_iterator(__i._M_current - __n); } template _Sent> constexpr difference_type operator-(const _Sent& __y) const noexcept(noexcept(_M_current - __y)) { return _M_current - __y; } template<__detail::__not_a_const_iterator _Sent> requires sized_sentinel_for<_Sent, _It> friend constexpr difference_type operator-(const _Sent& __x, const basic_const_iterator& __y) noexcept(noexcept(__x - __y._M_current)) { return __x - __y._M_current; } friend constexpr __rvalue_reference iter_move(const basic_const_iterator& __i) noexcept(noexcept(static_cast<__rvalue_reference>(ranges::iter_move(__i._M_current)))) { return static_cast<__rvalue_reference>(ranges::iter_move(__i._M_current)); } }; template _Up> requires input_iterator> struct common_type, _Up> { using type = basic_const_iterator>; }; template _Up> requires input_iterator> struct common_type<_Up, basic_const_iterator<_Tp>> { using type = basic_const_iterator>; }; template _Up> requires input_iterator> struct common_type, basic_const_iterator<_Up>> { using type = basic_const_iterator>; }; template constexpr const_iterator<_It> make_const_iterator(_It __it) noexcept(is_nothrow_convertible_v<_It, const_iterator<_It>>) { return __it; } template constexpr const_sentinel<_Sent> make_const_sentinel(_Sent __s) noexcept(is_nothrow_convertible_v<_Sent, const_sentinel<_Sent>>) { return __s; } template constexpr auto __niter_base(move_iterator<_Iterator> __it) -> decltype(make_move_iterator(__niter_base(__it.base()))) { return make_move_iterator(__niter_base(__it.base())); } template struct __is_move_iterator > { enum { __value = 1 }; typedef __true_type __type; }; template constexpr auto __miter_base(move_iterator<_Iterator> __it) -> decltype(__miter_base(__it.base())) { return __miter_base(__it.base()); } # 2984 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_iterator.h" 3 template using __iter_key_t = remove_const_t< tuple_element_t<0, typename iterator_traits<_InputIterator>::value_type>>; template using __iter_val_t = tuple_element_t<1, typename iterator_traits<_InputIterator>::value_type>; template struct pair; template using __iter_to_alloc_t = pair, __iter_val_t<_InputIterator>>; } # 38 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/ranges_base.h" 2 3 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/ext/numeric_traits.h" 1 3 # 33 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/ext/numeric_traits.h" 3 namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) { # 50 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/ext/numeric_traits.h" 3 template struct __is_integer_nonstrict : public std::__is_integer<_Tp> { using std::__is_integer<_Tp>::__value; enum { __width = __value ? sizeof(_Tp) * 8 : 0 }; }; template struct __numeric_traits_integer { static_assert(__is_integer_nonstrict<_Value>::__value, "invalid specialization"); static const bool __is_signed = (_Value)(-1) < 0; static const int __digits = __is_integer_nonstrict<_Value>::__width - __is_signed; static const _Value __max = __is_signed ? (((((_Value)1 << (__digits - 1)) - 1) << 1) + 1) : ~(_Value)0; static const _Value __min = __is_signed ? -__max - 1 : (_Value)0; }; template const _Value __numeric_traits_integer<_Value>::__min; template const _Value __numeric_traits_integer<_Value>::__max; template const bool __numeric_traits_integer<_Value>::__is_signed; template const int __numeric_traits_integer<_Value>::__digits; # 137 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/ext/numeric_traits.h" 3 template using __int_traits = __numeric_traits_integer<_Tp>; # 157 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/ext/numeric_traits.h" 3 template struct __numeric_traits_floating { static const int __max_digits10 = (2 + (std::__are_same<_Value, float>::__value ? 24 : std::__are_same<_Value, double>::__value ? 53 : 64) * 643L / 2136); static const bool __is_signed = true; static const int __digits10 = (std::__are_same<_Value, float>::__value ? 6 : std::__are_same<_Value, double>::__value ? 15 : 18); static const int __max_exponent10 = (std::__are_same<_Value, float>::__value ? 38 : std::__are_same<_Value, double>::__value ? 308 : 4932); }; template const int __numeric_traits_floating<_Value>::__max_digits10; template const bool __numeric_traits_floating<_Value>::__is_signed; template const int __numeric_traits_floating<_Value>::__digits10; template const int __numeric_traits_floating<_Value>::__max_exponent10; template struct __numeric_traits : public __numeric_traits_integer<_Value> { }; template<> struct __numeric_traits : public __numeric_traits_floating { }; template<> struct __numeric_traits : public __numeric_traits_floating { }; template<> struct __numeric_traits : public __numeric_traits_floating { }; # 239 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/ext/numeric_traits.h" 3 } # 39 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/ranges_base.h" 2 3 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/max_size_type.h" 1 3 # 34 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/max_size_type.h" 3 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/numbers" 1 3 # 33 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/numbers" 3 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/version.h" 1 3 # 48 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/version.h" 3 # 36 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/numbers" 2 3 namespace std __attribute__ ((__visibility__ ("default"))) { # 51 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/numbers" 3 namespace numbers { template using _Enable_if_floating = enable_if_t, _Tp>; template inline constexpr _Tp e_v = _Enable_if_floating<_Tp>(2.718281828459045235360287471352662498L); template inline constexpr _Tp log2e_v = _Enable_if_floating<_Tp>(1.442695040888963407359924681001892137L); template inline constexpr _Tp log10e_v = _Enable_if_floating<_Tp>(0.434294481903251827651128918916605082L); template inline constexpr _Tp pi_v = _Enable_if_floating<_Tp>(3.141592653589793238462643383279502884L); template inline constexpr _Tp inv_pi_v = _Enable_if_floating<_Tp>(0.318309886183790671537767526745028724L); template inline constexpr _Tp inv_sqrtpi_v = _Enable_if_floating<_Tp>(0.564189583547756286948079451560772586L); template inline constexpr _Tp ln2_v = _Enable_if_floating<_Tp>(0.693147180559945309417232121458176568L); template inline constexpr _Tp ln10_v = _Enable_if_floating<_Tp>(2.302585092994045684017991454684364208L); template inline constexpr _Tp sqrt2_v = _Enable_if_floating<_Tp>(1.414213562373095048801688724209698079L); template inline constexpr _Tp sqrt3_v = _Enable_if_floating<_Tp>(1.732050807568877293527446341505872367L); template inline constexpr _Tp inv_sqrt3_v = _Enable_if_floating<_Tp>(0.577350269189625764509148780501957456L); template inline constexpr _Tp egamma_v = _Enable_if_floating<_Tp>(0.577215664901532860606512090082402431L); template inline constexpr _Tp phi_v = _Enable_if_floating<_Tp>(1.618033988749894848204586834365638118L); inline constexpr double e = e_v; inline constexpr double log2e = log2e_v; inline constexpr double log10e = log10e_v; inline constexpr double pi = pi_v; inline constexpr double inv_pi = inv_pi_v; inline constexpr double inv_sqrtpi = inv_sqrtpi_v; inline constexpr double ln2 = ln2_v; inline constexpr double ln10 = ln10_v; inline constexpr double sqrt2 = sqrt2_v; inline constexpr double sqrt3 = sqrt3_v; inline constexpr double inv_sqrt3 = inv_sqrt3_v; inline constexpr double egamma = egamma_v; inline constexpr double phi = phi_v; # 225 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/numbers" 3 template<> inline constexpr __float128 e_v<__float128> = 2.718281828459045235360287471352662498Q; template<> inline constexpr __float128 log2e_v<__float128> = 1.442695040888963407359924681001892137Q; template<> inline constexpr __float128 log10e_v<__float128> = 0.434294481903251827651128918916605082Q; template<> inline constexpr __float128 pi_v<__float128> = 3.141592653589793238462643383279502884Q; template<> inline constexpr __float128 inv_pi_v<__float128> = 0.318309886183790671537767526745028724Q; template<> inline constexpr __float128 inv_sqrtpi_v<__float128> = 0.564189583547756286948079451560772586Q; template<> inline constexpr __float128 ln2_v<__float128> = 0.693147180559945309417232121458176568Q; template<> inline constexpr __float128 ln10_v<__float128> = 2.302585092994045684017991454684364208Q; template<> inline constexpr __float128 sqrt2_v<__float128> = 1.414213562373095048801688724209698079Q; template<> inline constexpr __float128 sqrt3_v<__float128> = 1.732050807568877293527446341505872367Q; template<> inline constexpr __float128 inv_sqrt3_v<__float128> = 0.577350269189625764509148780501957456Q; template<> inline constexpr __float128 egamma_v<__float128> = 0.577215664901532860606512090082402431Q; template<> inline constexpr __float128 phi_v<__float128> = 1.618033988749894848204586834365638118Q; } } # 38 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/max_size_type.h" 2 3 # 48 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/max_size_type.h" 3 namespace std __attribute__ ((__visibility__ ("default"))) { template struct numeric_limits; namespace ranges { namespace __detail { class __max_size_type { public: __max_size_type() = default; template requires integral<_Tp> || __is_int128<_Tp> constexpr __max_size_type(_Tp __i) noexcept : _M_val(__i), _M_msb(__i < 0) { } constexpr explicit __max_size_type(const __max_diff_type& __d) noexcept; template requires integral<_Tp> || __is_int128<_Tp> constexpr explicit operator _Tp() const noexcept { return _M_val; } constexpr explicit operator bool() const noexcept { return _M_val != 0 || _M_msb != 0; } constexpr __max_size_type operator+() const noexcept { return *this; } constexpr __max_size_type operator~() const noexcept { return __max_size_type{~_M_val, !_M_msb}; } constexpr __max_size_type operator-() const noexcept { return operator~() + 1; } constexpr __max_size_type& operator++() noexcept { return *this += 1; } constexpr __max_size_type operator++(int) noexcept { auto __tmp = *this; ++*this; return __tmp; } constexpr __max_size_type& operator--() noexcept { return *this -= 1; } constexpr __max_size_type operator--(int) noexcept { auto __tmp = *this; --*this; return __tmp; } constexpr __max_size_type& operator+=(const __max_size_type& __r) noexcept { const auto __sum = _M_val + __r._M_val; const bool __overflow = (__sum < _M_val); _M_msb = _M_msb ^ __r._M_msb ^ __overflow; _M_val = __sum; return *this; } constexpr __max_size_type& operator-=(const __max_size_type& __r) noexcept { return *this += -__r; } constexpr __max_size_type& operator*=(__max_size_type __r) noexcept { constexpr __max_size_type __threshold = __rep(1) << (_S_rep_bits / 2 - 1); if (_M_val < __threshold && __r < __threshold) _M_val = _M_val * __r._M_val; else { const bool __lsb = _M_val & 1; const bool __rlsb = __r._M_val & 1; *this >>= 1; __r >>= 1; _M_val = (2 * _M_val * __r._M_val + _M_val * __rlsb + __r._M_val * __lsb); *this <<= 1; *this += __rlsb * __lsb; } return *this; } constexpr __max_size_type& operator/=(const __max_size_type& __r) noexcept { do { if (std::__is_constant_evaluated()) if (__builtin_expect(!bool(__r != 0), false)) std::__glibcxx_assert_fail(); } while (false); if (!_M_msb && !__r._M_msb) [[likely]] _M_val /= __r._M_val; else if (_M_msb && __r._M_msb) { _M_val = (_M_val >= __r._M_val); _M_msb = 0; } else if (!_M_msb && __r._M_msb) _M_val = 0; else if (_M_msb && !__r._M_msb) { const auto __orig = *this; *this >>= 1; _M_val /= __r._M_val; *this <<= 1; if (__orig - *this * __r >= __r) ++_M_val; } return *this; } constexpr __max_size_type& operator%=(const __max_size_type& __r) noexcept { if (!_M_msb && !__r._M_msb) [[likely]] _M_val %= __r._M_val; else *this -= (*this / __r) * __r; return *this; } constexpr __max_size_type& operator<<=(const __max_size_type& __r) noexcept { do { if (std::__is_constant_evaluated()) if (__builtin_expect(!bool(__r <= _S_rep_bits), false)) std::__glibcxx_assert_fail(); } while (false); if (__r != 0) { _M_msb = (_M_val >> (_S_rep_bits - __r._M_val)) & 1; if (__r._M_val == _S_rep_bits) [[unlikely]] _M_val = 0; else _M_val <<= __r._M_val; } return *this; } constexpr __max_size_type& operator>>=(const __max_size_type& __r) noexcept { do { if (std::__is_constant_evaluated()) if (__builtin_expect(!bool(__r <= _S_rep_bits), false)) std::__glibcxx_assert_fail(); } while (false); if (__r != 0) { if (__r._M_val == _S_rep_bits) [[unlikely]] _M_val = 0; else _M_val >>= __r._M_val; if (_M_msb) [[unlikely]] { _M_val |= __rep(1) << (_S_rep_bits - __r._M_val); _M_msb = 0; } } return *this; } constexpr __max_size_type& operator&=(const __max_size_type& __r) noexcept { _M_val &= __r._M_val; _M_msb &= __r._M_msb; return *this; } constexpr __max_size_type& operator|=(const __max_size_type& __r) noexcept { _M_val |= __r._M_val; _M_msb |= __r._M_msb; return *this; } constexpr __max_size_type& operator^=(const __max_size_type& __r) noexcept { _M_val ^= __r._M_val; _M_msb ^= __r._M_msb; return *this; } template requires integral<_Tp> || __is_int128<_Tp> friend constexpr _Tp& operator+=(_Tp& __a, const __max_size_type& __b) noexcept { return (__a = static_cast<_Tp>(__a + __b)); } template requires integral<_Tp> || __is_int128<_Tp> friend constexpr _Tp& operator-=(_Tp& __a, const __max_size_type& __b) noexcept { return (__a = static_cast<_Tp>(__a - __b)); } template requires integral<_Tp> || __is_int128<_Tp> friend constexpr _Tp& operator*=(_Tp& __a, const __max_size_type& __b) noexcept { return (__a = static_cast<_Tp>(__a * __b)); } template requires integral<_Tp> || __is_int128<_Tp> friend constexpr _Tp& operator/=(_Tp& __a, const __max_size_type& __b) noexcept { return (__a = static_cast<_Tp>(__a / __b)); } template requires integral<_Tp> || __is_int128<_Tp> friend constexpr _Tp& operator%=(_Tp& __a, const __max_size_type& __b) noexcept { return (__a = static_cast<_Tp>(__a % __b)); } template requires integral<_Tp> || __is_int128<_Tp> friend constexpr _Tp& operator&=(_Tp& __a, const __max_size_type& __b) noexcept { return (__a = static_cast<_Tp>(__a & __b)); } template requires integral<_Tp> || __is_int128<_Tp> friend constexpr _Tp& operator|=(_Tp& __a, const __max_size_type& __b) noexcept { return (__a = static_cast<_Tp>(__a | __b)); } template requires integral<_Tp> || __is_int128<_Tp> friend constexpr _Tp& operator^=(_Tp& __a, const __max_size_type& __b) noexcept { return (__a = static_cast<_Tp>(__a ^ __b)); } template requires integral<_Tp> || __is_int128<_Tp> friend constexpr _Tp& operator<<=(_Tp& __a, const __max_size_type& __b) noexcept { return (__a = static_cast<_Tp>(__a << __b)); } template requires integral<_Tp> || __is_int128<_Tp> friend constexpr _Tp& operator>>=(_Tp& __a, const __max_size_type& __b) noexcept { return (__a = static_cast<_Tp>(__a >> __b)); } friend constexpr __max_size_type operator+(__max_size_type __l, const __max_size_type& __r) noexcept { __l += __r; return __l; } friend constexpr __max_size_type operator-(__max_size_type __l, const __max_size_type& __r) noexcept { __l -= __r; return __l; } friend constexpr __max_size_type operator*(__max_size_type __l, const __max_size_type& __r) noexcept { __l *= __r; return __l; } friend constexpr __max_size_type operator/(__max_size_type __l, const __max_size_type& __r) noexcept { __l /= __r; return __l; } friend constexpr __max_size_type operator%(__max_size_type __l, const __max_size_type& __r) noexcept { __l %= __r; return __l; } friend constexpr __max_size_type operator<<(__max_size_type __l, const __max_size_type& __r) noexcept { __l <<= __r; return __l; } friend constexpr __max_size_type operator>>(__max_size_type __l, const __max_size_type& __r) noexcept { __l >>= __r; return __l; } friend constexpr __max_size_type operator&(__max_size_type __l, const __max_size_type& __r) noexcept { __l &= __r; return __l; } friend constexpr __max_size_type operator|(__max_size_type __l, const __max_size_type& __r) noexcept { __l |= __r; return __l; } friend constexpr __max_size_type operator^(__max_size_type __l, const __max_size_type& __r) noexcept { __l ^= __r; return __l; } friend constexpr bool operator==(const __max_size_type& __l, const __max_size_type& __r) noexcept { return __l._M_val == __r._M_val && __l._M_msb == __r._M_msb; } friend constexpr strong_ordering operator<=>(const __max_size_type& __l, const __max_size_type& __r) noexcept { if (__l._M_msb ^ __r._M_msb) return __l._M_msb ? strong_ordering::greater : strong_ordering::less; else return __l._M_val <=> __r._M_val; } # 420 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/max_size_type.h" 3 __extension__ using __rep = unsigned __int128; static constexpr size_t _S_rep_bits = sizeof(__rep) * 8; private: __rep _M_val = 0; unsigned _M_msb:1 = 0; constexpr explicit __max_size_type(__rep __val, int __msb) noexcept : _M_val(__val), _M_msb(__msb) { } friend __max_diff_type; friend std::numeric_limits<__max_size_type>; friend std::numeric_limits<__max_diff_type>; }; class __max_diff_type { public: __max_diff_type() = default; template requires integral<_Tp> || __is_int128<_Tp> constexpr __max_diff_type(_Tp __i) noexcept : _M_rep(__i) { } constexpr explicit __max_diff_type(const __max_size_type& __d) noexcept : _M_rep(__d) { } template requires integral<_Tp> || __is_int128<_Tp> constexpr explicit operator _Tp() const noexcept { return static_cast<_Tp>(_M_rep); } constexpr explicit operator bool() const noexcept { return _M_rep != 0; } constexpr __max_diff_type operator+() const noexcept { return *this; } constexpr __max_diff_type operator-() const noexcept { return __max_diff_type(-_M_rep); } constexpr __max_diff_type operator~() const noexcept { return __max_diff_type(~_M_rep); } constexpr __max_diff_type& operator++() noexcept { return *this += 1; } constexpr __max_diff_type operator++(int) noexcept { auto __tmp = *this; ++*this; return __tmp; } constexpr __max_diff_type& operator--() noexcept { return *this -= 1; } constexpr __max_diff_type operator--(int) noexcept { auto __tmp = *this; --*this; return __tmp; } constexpr __max_diff_type& operator+=(const __max_diff_type& __r) noexcept { _M_rep += __r._M_rep; return *this; } constexpr __max_diff_type& operator-=(const __max_diff_type& __r) noexcept { _M_rep -= __r._M_rep; return *this; } constexpr __max_diff_type& operator*=(const __max_diff_type& __r) noexcept { _M_rep *= __r._M_rep; return *this; } constexpr __max_diff_type& operator/=(const __max_diff_type& __r) noexcept { do { if (std::__is_constant_evaluated()) if (__builtin_expect(!bool(__r != 0), false)) std::__glibcxx_assert_fail(); } while (false); const bool __neg = *this < 0; const bool __rneg = __r < 0; if (!__neg && !__rneg) _M_rep = _M_rep / __r._M_rep; else if (__neg && __rneg) _M_rep = -_M_rep / -__r._M_rep; else if (__neg && !__rneg) _M_rep = -(-_M_rep / __r._M_rep); else _M_rep = -(_M_rep / -__r._M_rep); return *this ; } constexpr __max_diff_type& operator%=(const __max_diff_type& __r) noexcept { do { if (std::__is_constant_evaluated()) if (__builtin_expect(!bool(__r != 0), false)) std::__glibcxx_assert_fail(); } while (false); if (*this >= 0 && __r > 0) _M_rep %= __r._M_rep; else *this -= (*this / __r) * __r; return *this; } constexpr __max_diff_type& operator<<=(const __max_diff_type& __r) noexcept { _M_rep.operator<<=(__r._M_rep); return *this; } constexpr __max_diff_type& operator>>=(const __max_diff_type& __r) noexcept { const auto __msb = _M_rep._M_msb; _M_rep >>= __r._M_rep; if (__msb) _M_rep |= ~(__max_size_type(-1) >> __r._M_rep); return *this; } constexpr __max_diff_type& operator&=(const __max_diff_type& __r) noexcept { _M_rep &= __r._M_rep; return *this; } constexpr __max_diff_type& operator|=(const __max_diff_type& __r) noexcept { _M_rep |= __r._M_rep; return *this; } constexpr __max_diff_type& operator^=(const __max_diff_type& __r) noexcept { _M_rep ^= __r._M_rep; return *this; } template requires integral<_Tp> || __is_int128<_Tp> friend constexpr _Tp& operator+=(_Tp& __a, const __max_diff_type& __b) noexcept { return (__a = static_cast<_Tp>(__a + __b)); } template requires integral<_Tp> || __is_int128<_Tp> friend constexpr _Tp& operator-=(_Tp& __a, const __max_diff_type& __b) noexcept { return (__a = static_cast<_Tp>(__a - __b)); } template requires integral<_Tp> || __is_int128<_Tp> friend constexpr _Tp& operator*=(_Tp& __a, const __max_diff_type& __b) noexcept { return (__a = static_cast<_Tp>(__a * __b)); } template requires integral<_Tp> || __is_int128<_Tp> friend constexpr _Tp& operator/=(_Tp& __a, const __max_diff_type& __b) noexcept { return (__a = static_cast<_Tp>(__a / __b)); } template requires integral<_Tp> || __is_int128<_Tp> friend constexpr _Tp& operator%=(_Tp& __a, const __max_diff_type& __b) noexcept { return (__a = static_cast<_Tp>(__a % __b)); } template requires integral<_Tp> || __is_int128<_Tp> friend constexpr _Tp& operator&=(_Tp& __a, const __max_diff_type& __b) noexcept { return (__a = static_cast<_Tp>(__a & __b)); } template requires integral<_Tp> || __is_int128<_Tp> friend constexpr _Tp& operator|=(_Tp& __a, const __max_diff_type& __b) noexcept { return (__a = static_cast<_Tp>(__a | __b)); } template requires integral<_Tp> || __is_int128<_Tp> friend constexpr _Tp& operator^=(_Tp& __a, const __max_diff_type& __b) noexcept { return (__a = static_cast<_Tp>(__a ^ __b)); } template requires integral<_Tp> || __is_int128<_Tp> friend constexpr _Tp& operator<<=(_Tp& __a, const __max_diff_type& __b) noexcept { return (__a = static_cast<_Tp>(__a << __b)); } template requires integral<_Tp> || __is_int128<_Tp> friend constexpr _Tp& operator>>=(_Tp& __a, const __max_diff_type& __b) noexcept { return (__a = static_cast<_Tp>(__a >> __b)); } friend constexpr __max_diff_type operator+(__max_diff_type __l, const __max_diff_type& __r) noexcept { __l += __r; return __l; } friend constexpr __max_diff_type operator-(__max_diff_type __l, const __max_diff_type& __r) noexcept { __l -= __r; return __l; } friend constexpr __max_diff_type operator*(__max_diff_type __l, const __max_diff_type& __r) noexcept { __l *= __r; return __l; } friend constexpr __max_diff_type operator/(__max_diff_type __l, const __max_diff_type& __r) noexcept { __l /= __r; return __l; } friend constexpr __max_diff_type operator%(__max_diff_type __l, const __max_diff_type& __r) noexcept { __l %= __r; return __l; } friend constexpr __max_diff_type operator<<(__max_diff_type __l, const __max_diff_type& __r) noexcept { __l <<= __r; return __l; } friend constexpr __max_diff_type operator>>(__max_diff_type __l, const __max_diff_type& __r) noexcept { __l >>= __r; return __l; } friend constexpr __max_diff_type operator&(__max_diff_type __l, const __max_diff_type& __r) noexcept { __l &= __r; return __l; } friend constexpr __max_diff_type operator|(__max_diff_type __l, const __max_diff_type& __r) noexcept { __l |= __r; return __l; } friend constexpr __max_diff_type operator^(__max_diff_type __l, const __max_diff_type& __r) noexcept { __l ^= __r; return __l; } friend constexpr bool operator==(const __max_diff_type& __l, const __max_diff_type& __r) noexcept { return __l._M_rep == __r._M_rep; } constexpr strong_ordering operator<=>(const __max_diff_type& __r) const noexcept { const auto __lsign = _M_rep._M_msb; const auto __rsign = __r._M_rep._M_msb; if (__lsign ^ __rsign) return __lsign ? strong_ordering::less : strong_ordering::greater; else return _M_rep <=> __r._M_rep; } # 753 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/max_size_type.h" 3 private: __max_size_type _M_rep = 0; friend class __max_size_type; }; constexpr __max_size_type::__max_size_type(const __max_diff_type& __d) noexcept : __max_size_type(__d._M_rep) { } } } template<> struct numeric_limits { using _Sp = ranges::__detail::__max_size_type; static constexpr bool is_specialized = true; static constexpr bool is_signed = false; static constexpr bool is_integer = true; static constexpr bool is_exact = true; static constexpr int digits = __gnu_cxx::__int_traits<_Sp::__rep>::__digits + 1; static constexpr int digits10 = static_cast(digits * numbers::ln2 / numbers::ln10); static constexpr _Sp min() noexcept { return 0; } static constexpr _Sp max() noexcept { return _Sp(static_cast<_Sp::__rep>(-1), 1); } static constexpr _Sp lowest() noexcept { return min(); } }; template<> struct numeric_limits { using _Dp = ranges::__detail::__max_diff_type; using _Sp = ranges::__detail::__max_size_type; static constexpr bool is_specialized = true; static constexpr bool is_signed = true; static constexpr bool is_integer = true; static constexpr bool is_exact = true; static constexpr int digits = numeric_limits<_Sp>::digits - 1; static constexpr int digits10 = static_cast(digits * numbers::ln2 / numbers::ln10); static constexpr _Dp min() noexcept { return _Dp(_Sp(0, 1)); } static constexpr _Dp max() noexcept { return _Dp(_Sp(static_cast<_Sp::__rep>(-1), 0)); } static constexpr _Dp lowest() noexcept { return min(); } }; } # 40 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/ranges_base.h" 2 3 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/version.h" 1 3 # 48 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/version.h" 3 # 41 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/ranges_base.h" 2 3 namespace std __attribute__ ((__visibility__ ("default"))) { namespace ranges { template inline constexpr bool disable_sized_range = false; template inline constexpr bool enable_borrowed_range = false; namespace __detail { constexpr __max_size_type __to_unsigned_like(__max_size_type __t) noexcept { return __t; } constexpr __max_size_type __to_unsigned_like(__max_diff_type __t) noexcept { return __max_size_type(__t); } template constexpr auto __to_unsigned_like(_Tp __t) noexcept { return static_cast>(__t); } # 79 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/ranges_base.h" 3 template using __make_unsigned_like_t = decltype(__detail::__to_unsigned_like(std::declval<_Tp>())); template concept __maybe_borrowed_range = is_lvalue_reference_v<_Tp> || enable_borrowed_range>; } namespace __access { using std::ranges::__detail::__maybe_borrowed_range; using std::__detail::__range_iter_t; struct _Begin { private: template static constexpr bool _S_noexcept() { if constexpr (is_array_v>) return true; else if constexpr (__member_begin<_Tp>) return noexcept(__decay_copy(std::declval<_Tp&>().begin())); else return noexcept(__decay_copy(begin(std::declval<_Tp&>()))); } public: template<__maybe_borrowed_range _Tp> requires is_array_v> || __member_begin<_Tp> || __adl_begin<_Tp> constexpr auto operator()[[nodiscard]](_Tp&& __t) const noexcept(_S_noexcept<_Tp&>()) { if constexpr (is_array_v>) { static_assert(is_lvalue_reference_v<_Tp>); return __t + 0; } else if constexpr (__member_begin<_Tp>) return __t.begin(); else return begin(__t); } }; template concept __member_end = requires(_Tp& __t) { { __decay_copy(__t.end()) } -> sentinel_for<__range_iter_t<_Tp>>; }; void end() = delete; template concept __adl_end = __class_or_enum> && requires(_Tp& __t) { { __decay_copy(end(__t)) } -> sentinel_for<__range_iter_t<_Tp>>; }; struct _End { private: template static constexpr bool _S_noexcept() { if constexpr (is_bounded_array_v>) return true; else if constexpr (__member_end<_Tp>) return noexcept(__decay_copy(std::declval<_Tp&>().end())); else return noexcept(__decay_copy(end(std::declval<_Tp&>()))); } public: template<__maybe_borrowed_range _Tp> requires is_bounded_array_v> || __member_end<_Tp> || __adl_end<_Tp> constexpr auto operator()[[nodiscard]](_Tp&& __t) const noexcept(_S_noexcept<_Tp&>()) { if constexpr (is_bounded_array_v>) { static_assert(is_lvalue_reference_v<_Tp>); return __t + extent_v>; } else if constexpr (__member_end<_Tp>) return __t.end(); else return end(__t); } }; template concept __member_rbegin = requires(_Tp& __t) { { __decay_copy(__t.rbegin()) } -> input_or_output_iterator; }; void rbegin() = delete; template concept __adl_rbegin = __class_or_enum> && requires(_Tp& __t) { { __decay_copy(rbegin(__t)) } -> input_or_output_iterator; }; template concept __reversable = requires(_Tp& __t) { { _Begin{}(__t) } -> bidirectional_iterator; { _End{}(__t) } -> same_as; }; struct _RBegin { private: template static constexpr bool _S_noexcept() { if constexpr (__member_rbegin<_Tp>) return noexcept(__decay_copy(std::declval<_Tp&>().rbegin())); else if constexpr (__adl_rbegin<_Tp>) return noexcept(__decay_copy(rbegin(std::declval<_Tp&>()))); else { if constexpr (noexcept(_End{}(std::declval<_Tp&>()))) { using _It = decltype(_End{}(std::declval<_Tp&>())); return is_nothrow_copy_constructible_v<_It>; } else return false; } } public: template<__maybe_borrowed_range _Tp> requires __member_rbegin<_Tp> || __adl_rbegin<_Tp> || __reversable<_Tp> constexpr auto operator()[[nodiscard]](_Tp&& __t) const noexcept(_S_noexcept<_Tp&>()) { if constexpr (__member_rbegin<_Tp>) return __t.rbegin(); else if constexpr (__adl_rbegin<_Tp>) return rbegin(__t); else return std::make_reverse_iterator(_End{}(__t)); } }; template concept __member_rend = requires(_Tp& __t) { { __decay_copy(__t.rend()) } -> sentinel_for(__t)))>; }; void rend() = delete; template concept __adl_rend = __class_or_enum> && requires(_Tp& __t) { { __decay_copy(rend(__t)) } -> sentinel_for(__t)))>; }; struct _REnd { private: template static constexpr bool _S_noexcept() { if constexpr (__member_rend<_Tp>) return noexcept(__decay_copy(std::declval<_Tp&>().rend())); else if constexpr (__adl_rend<_Tp>) return noexcept(__decay_copy(rend(std::declval<_Tp&>()))); else { if constexpr (noexcept(_Begin{}(std::declval<_Tp&>()))) { using _It = decltype(_Begin{}(std::declval<_Tp&>())); return is_nothrow_copy_constructible_v<_It>; } else return false; } } public: template<__maybe_borrowed_range _Tp> requires __member_rend<_Tp> || __adl_rend<_Tp> || __reversable<_Tp> constexpr auto operator()[[nodiscard]](_Tp&& __t) const noexcept(_S_noexcept<_Tp&>()) { if constexpr (__member_rend<_Tp>) return __t.rend(); else if constexpr (__adl_rend<_Tp>) return rend(__t); else return std::make_reverse_iterator(_Begin{}(__t)); } }; template concept __member_size = !disable_sized_range> && requires(_Tp& __t) { { __decay_copy(__t.size()) } -> __detail::__is_integer_like; }; void size() = delete; template concept __adl_size = __class_or_enum> && !disable_sized_range> && requires(_Tp& __t) { { __decay_copy(size(__t)) } -> __detail::__is_integer_like; }; template concept __sentinel_size = requires(_Tp& __t) { requires (!is_unbounded_array_v>); { _Begin{}(__t) } -> forward_iterator; { _End{}(__t) } -> sized_sentinel_for; __detail::__to_unsigned_like(_End{}(__t) - _Begin{}(__t)); }; struct _Size { private: template static constexpr bool _S_noexcept() { if constexpr (is_bounded_array_v>) return true; else if constexpr (__member_size<_Tp>) return noexcept(__decay_copy(std::declval<_Tp&>().size())); else if constexpr (__adl_size<_Tp>) return noexcept(__decay_copy(size(std::declval<_Tp&>()))); else if constexpr (__sentinel_size<_Tp>) return noexcept(_End{}(std::declval<_Tp&>()) - _Begin{}(std::declval<_Tp&>())); } public: template requires is_bounded_array_v> || __member_size<_Tp> || __adl_size<_Tp> || __sentinel_size<_Tp> constexpr auto operator()[[nodiscard]](_Tp&& __t) const noexcept(_S_noexcept<_Tp&>()) { if constexpr (is_bounded_array_v>) return extent_v>; else if constexpr (__member_size<_Tp>) return __t.size(); else if constexpr (__adl_size<_Tp>) return size(__t); else if constexpr (__sentinel_size<_Tp>) return __detail::__to_unsigned_like(_End{}(__t) - _Begin{}(__t)); } }; struct _SSize { template requires requires (_Tp& __t) { _Size{}(__t); } constexpr auto operator()[[nodiscard]](_Tp&& __t) const noexcept(noexcept(_Size{}(__t))) { auto __size = _Size{}(__t); using __size_type = decltype(__size); if constexpr (integral<__size_type>) { using __gnu_cxx::__int_traits; if constexpr (__int_traits<__size_type>::__digits < __int_traits::__digits) return static_cast(__size); else return static_cast>(__size); } else return __detail::__max_diff_type(__size); } }; template concept __member_empty = requires(_Tp& __t) { bool(__t.empty()); }; template concept __size0_empty = requires(_Tp& __t) { _Size{}(__t) == 0; }; template concept __eq_iter_empty = requires(_Tp& __t) { requires (!is_unbounded_array_v>); { _Begin{}(__t) } -> forward_iterator; bool(_Begin{}(__t) == _End{}(__t)); }; struct _Empty { private: template static constexpr bool _S_noexcept() { if constexpr (__member_empty<_Tp>) return noexcept(bool(std::declval<_Tp&>().empty())); else if constexpr (__size0_empty<_Tp>) return noexcept(_Size{}(std::declval<_Tp&>()) == 0); else return noexcept(bool(_Begin{}(std::declval<_Tp&>()) == _End{}(std::declval<_Tp&>()))); } public: template requires __member_empty<_Tp> || __size0_empty<_Tp> || __eq_iter_empty<_Tp> constexpr bool operator()[[nodiscard]](_Tp&& __t) const noexcept(_S_noexcept<_Tp&>()) { if constexpr (__member_empty<_Tp>) return bool(__t.empty()); else if constexpr (__size0_empty<_Tp>) return _Size{}(__t) == 0; else return bool(_Begin{}(__t) == _End{}(__t)); } }; template concept __pointer_to_object = is_pointer_v<_Tp> && is_object_v>; template concept __member_data = requires(_Tp& __t) { { __decay_copy(__t.data()) } -> __pointer_to_object; }; template concept __begin_data = contiguous_iterator<__range_iter_t<_Tp>>; struct _Data { private: template static constexpr bool _S_noexcept() { if constexpr (__member_data<_Tp>) return noexcept(__decay_copy(std::declval<_Tp&>().data())); else return noexcept(_Begin{}(std::declval<_Tp&>())); } public: template<__maybe_borrowed_range _Tp> requires __member_data<_Tp> || __begin_data<_Tp> constexpr auto operator()[[nodiscard]](_Tp&& __t) const noexcept(_S_noexcept<_Tp>()) { if constexpr (__member_data<_Tp>) return __t.data(); else return std::to_address(_Begin{}(__t)); } }; } inline namespace _Cpo { inline constexpr ranges::__access::_Begin begin{}; inline constexpr ranges::__access::_End end{}; inline constexpr ranges::__access::_RBegin rbegin{}; inline constexpr ranges::__access::_REnd rend{}; inline constexpr ranges::__access::_Size size{}; inline constexpr ranges::__access::_SSize ssize{}; inline constexpr ranges::__access::_Empty empty{}; inline constexpr ranges::__access::_Data data{}; } template concept range = requires(_Tp& __t) { ranges::begin(__t); ranges::end(__t); }; template concept borrowed_range = range<_Tp> && __detail::__maybe_borrowed_range<_Tp>; template using iterator_t = std::__detail::__range_iter_t<_Tp>; template using sentinel_t = decltype(ranges::end(std::declval<_Range&>())); template using const_iterator_t = const_iterator>; template using const_sentinel_t = const_sentinel>; template using range_const_reference_t = iter_const_reference_t>; template using range_difference_t = iter_difference_t>; template using range_value_t = iter_value_t>; template using range_reference_t = iter_reference_t>; template using range_rvalue_reference_t = iter_rvalue_reference_t>; template concept sized_range = range<_Tp> && requires(_Tp& __t) { ranges::size(__t); }; template using range_size_t = decltype(ranges::size(std::declval<_Range&>())); template requires is_class_v<_Derived> && same_as<_Derived, remove_cv_t<_Derived>> class view_interface; namespace __detail { template requires (!same_as<_Tp, view_interface<_Up>>) void __is_derived_from_view_interface_fn(const _Tp&, const view_interface<_Up>&); template concept __is_derived_from_view_interface = requires (_Tp __t) { __is_derived_from_view_interface_fn(__t, __t); }; } struct view_base { }; template inline constexpr bool enable_view = derived_from<_Tp, view_base> || __detail::__is_derived_from_view_interface<_Tp>; template concept view = range<_Tp> && movable<_Tp> && enable_view<_Tp>; template concept output_range = range<_Range> && output_iterator, _Tp>; template concept input_range = range<_Tp> && input_iterator>; template concept forward_range = input_range<_Tp> && forward_iterator>; template concept bidirectional_range = forward_range<_Tp> && bidirectional_iterator>; template concept random_access_range = bidirectional_range<_Tp> && random_access_iterator>; template concept contiguous_range = random_access_range<_Tp> && contiguous_iterator> && requires(_Tp& __t) { { ranges::data(__t) } -> same_as>>; }; template concept common_range = range<_Tp> && same_as, sentinel_t<_Tp>>; template concept constant_range = input_range<_Tp> && std::__detail::__constant_iterator>; namespace __access { template constexpr auto& __possibly_const_range(_Range& __r) noexcept { if constexpr (constant_range && !constant_range<_Range>) return const_cast(__r); else return __r; } # 652 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/ranges_base.h" 3 struct _CBegin { template<__maybe_borrowed_range _Tp> [[nodiscard]] constexpr auto operator()(_Tp&& __t) const noexcept(noexcept(std::make_const_iterator (ranges::begin(__access::__possibly_const_range(__t))))) requires requires { std::make_const_iterator (ranges::begin(__access::__possibly_const_range(__t))); } { auto& __r = __access::__possibly_const_range(__t); return const_iterator_t(ranges::begin(__r)); } # 678 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/ranges_base.h" 3 }; struct _CEnd final { template<__maybe_borrowed_range _Tp> [[nodiscard]] constexpr auto operator()(_Tp&& __t) const noexcept(noexcept(std::make_const_sentinel (ranges::end(__access::__possibly_const_range(__t))))) requires requires { std::make_const_sentinel (ranges::end(__access::__possibly_const_range(__t))); } { auto& __r = __access::__possibly_const_range(__t); return const_sentinel_t(ranges::end(__r)); } # 706 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/ranges_base.h" 3 }; struct _CRBegin { template<__maybe_borrowed_range _Tp> [[nodiscard]] constexpr auto operator()(_Tp&& __t) const noexcept(noexcept(std::make_const_iterator (ranges::rbegin(__access::__possibly_const_range(__t))))) requires requires { std::make_const_iterator (ranges::rbegin(__access::__possibly_const_range(__t))); } { auto& __r = __access::__possibly_const_range(__t); return const_iterator(ranges::rbegin(__r)); } # 734 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/ranges_base.h" 3 }; struct _CREnd { template<__maybe_borrowed_range _Tp> [[nodiscard]] constexpr auto operator()(_Tp&& __t) const noexcept(noexcept(std::make_const_sentinel (ranges::rend(__access::__possibly_const_range(__t))))) requires requires { std::make_const_sentinel (ranges::rend(__access::__possibly_const_range(__t))); } { auto& __r = __access::__possibly_const_range(__t); return const_sentinel(ranges::rend(__r)); } # 762 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/ranges_base.h" 3 }; struct _CData { template<__maybe_borrowed_range _Tp> [[nodiscard]] constexpr const auto* operator()(_Tp&& __t) const noexcept(noexcept(ranges::data(__access::__possibly_const_range(__t)))) requires requires { ranges::data(__access::__possibly_const_range(__t)); } { return ranges::data(__access::__possibly_const_range(__t)); } # 785 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/ranges_base.h" 3 }; } inline namespace _Cpo { inline constexpr ranges::__access::_CBegin cbegin{}; inline constexpr ranges::__access::_CEnd cend{}; inline constexpr ranges::__access::_CRBegin crbegin{}; inline constexpr ranges::__access::_CREnd crend{}; inline constexpr ranges::__access::_CData cdata{}; } namespace __detail { template inline constexpr bool __is_initializer_list = false; template inline constexpr bool __is_initializer_list> = true; } template concept viewable_range = range<_Tp> && ((view> && constructible_from, _Tp>) || (!view> && (is_lvalue_reference_v<_Tp> || (movable> && !__detail::__is_initializer_list>)))); struct __advance_fn final { template constexpr void operator()(_It& __it, iter_difference_t<_It> __n) const { if constexpr (random_access_iterator<_It>) __it += __n; else if constexpr (bidirectional_iterator<_It>) { if (__n > 0) { do { ++__it; } while (--__n); } else if (__n < 0) { do { --__it; } while (++__n); } } else { do { if (std::__is_constant_evaluated()) if (__builtin_expect(!bool(__n >= 0), false)) std::__glibcxx_assert_fail(); } while (false); while (__n-- > 0) ++__it; } } template _Sent> constexpr void operator()(_It& __it, _Sent __bound) const { if constexpr (assignable_from<_It&, _Sent>) __it = std::move(__bound); else if constexpr (sized_sentinel_for<_Sent, _It>) (*this)(__it, __bound - __it); else { while (__it != __bound) ++__it; } } template _Sent> constexpr iter_difference_t<_It> operator()(_It& __it, iter_difference_t<_It> __n, _Sent __bound) const { if constexpr (sized_sentinel_for<_Sent, _It>) { const auto __diff = __bound - __it; if (__diff == 0) return __n; else if (__diff > 0 ? __n >= __diff : __n <= __diff) { (*this)(__it, __bound); return __n - __diff; } else if (__n != 0) [[likely]] { do { if (std::__is_constant_evaluated()) if (__builtin_expect(!bool((__n < 0) == (__diff < 0)), false)) std::__glibcxx_assert_fail(); } while (false); (*this)(__it, __n); return 0; } else return 0; } else if (__it == __bound || __n == 0) return __n; else if (__n > 0) { iter_difference_t<_It> __m = 0; do { ++__it; ++__m; } while (__m != __n && __it != __bound); return __n - __m; } else if constexpr (bidirectional_iterator<_It> && same_as<_It, _Sent>) { iter_difference_t<_It> __m = 0; do { --__it; --__m; } while (__m != __n && __it != __bound); return __n - __m; } else { do { if (std::__is_constant_evaluated()) if (__builtin_expect(!bool(__n >= 0), false)) std::__glibcxx_assert_fail(); } while (false); return __n; } } void operator&() const = delete; }; inline constexpr __advance_fn advance{}; struct __distance_fn final { template _Sent> requires (!sized_sentinel_for<_Sent, _It>) constexpr iter_difference_t<_It> operator()[[nodiscard]](_It __first, _Sent __last) const { iter_difference_t<_It> __n = 0; while (__first != __last) { ++__first; ++__n; } return __n; } template _Sent> [[nodiscard]] constexpr iter_difference_t<_It> operator()(const _It& __first, const _Sent& __last) const { return __last - __first; } template [[nodiscard]] constexpr range_difference_t<_Range> operator()(_Range&& __r) const { if constexpr (sized_range<_Range>) return static_cast>(ranges::size(__r)); else return (*this)(ranges::begin(__r), ranges::end(__r)); } void operator&() const = delete; }; inline constexpr __distance_fn distance{}; struct __next_fn final { template [[nodiscard]] constexpr _It operator()(_It __x) const { ++__x; return __x; } template [[nodiscard]] constexpr _It operator()(_It __x, iter_difference_t<_It> __n) const { ranges::advance(__x, __n); return __x; } template _Sent> [[nodiscard]] constexpr _It operator()(_It __x, _Sent __bound) const { ranges::advance(__x, __bound); return __x; } template _Sent> [[nodiscard]] constexpr _It operator()(_It __x, iter_difference_t<_It> __n, _Sent __bound) const { ranges::advance(__x, __n, __bound); return __x; } void operator&() const = delete; }; inline constexpr __next_fn next{}; struct __prev_fn final { template [[nodiscard]] constexpr _It operator()(_It __x) const { --__x; return __x; } template [[nodiscard]] constexpr _It operator()(_It __x, iter_difference_t<_It> __n) const { ranges::advance(__x, -__n); return __x; } template [[nodiscard]] constexpr _It operator()(_It __x, iter_difference_t<_It> __n, _It __bound) const { ranges::advance(__x, -__n, __bound); return __x; } void operator&() const = delete; }; inline constexpr __prev_fn prev{}; struct dangling { constexpr dangling() noexcept = default; template constexpr dangling(_Args&&...) noexcept { } }; template using borrowed_iterator_t = __conditional_t, iterator_t<_Range>, dangling>; } struct from_range_t { explicit from_range_t() = default; }; inline constexpr from_range_t from_range{}; } # 35 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/ranges_util.h" 2 3 namespace std __attribute__ ((__visibility__ ("default"))) { namespace ranges { namespace __detail { template concept __simple_view = view<_Range> && range && same_as, iterator_t> && same_as, sentinel_t>; template concept __has_arrow = input_iterator<_It> && (is_pointer_v<_It> || requires(_It __it) { __it.operator->(); }); using std::__detail::__different_from; } template requires is_class_v<_Derived> && same_as<_Derived, remove_cv_t<_Derived>> class view_interface { private: constexpr _Derived& _M_derived() noexcept { static_assert(derived_from<_Derived, view_interface<_Derived>>); static_assert(view<_Derived>); return static_cast<_Derived&>(*this); } constexpr const _Derived& _M_derived() const noexcept { static_assert(derived_from<_Derived, view_interface<_Derived>>); static_assert(view<_Derived>); return static_cast(*this); } static constexpr bool _S_bool(bool) noexcept; template static constexpr bool _S_empty(_Tp& __t) noexcept(noexcept(_S_bool(ranges::begin(__t) == ranges::end(__t)))) { return ranges::begin(__t) == ranges::end(__t); } template static constexpr auto _S_size(_Tp& __t) noexcept(noexcept(ranges::end(__t) - ranges::begin(__t))) { return ranges::end(__t) - ranges::begin(__t); } public: constexpr bool empty() noexcept(noexcept(_S_empty(_M_derived()))) requires forward_range<_Derived> && (!sized_range<_Derived>) { return _S_empty(_M_derived()); } constexpr bool empty() noexcept(noexcept(ranges::size(_M_derived()) == 0)) requires sized_range<_Derived> { return ranges::size(_M_derived()) == 0; } constexpr bool empty() const noexcept(noexcept(_S_empty(_M_derived()))) requires forward_range && (!sized_range) { return _S_empty(_M_derived()); } constexpr bool empty() const noexcept(noexcept(ranges::size(_M_derived()) == 0)) requires sized_range { return ranges::size(_M_derived()) == 0; } constexpr explicit operator bool() noexcept(noexcept(ranges::empty(_M_derived()))) requires requires { ranges::empty(_M_derived()); } { return !ranges::empty(_M_derived()); } constexpr explicit operator bool() const noexcept(noexcept(ranges::empty(_M_derived()))) requires requires { ranges::empty(_M_derived()); } { return !ranges::empty(_M_derived()); } constexpr auto data() noexcept(noexcept(ranges::begin(_M_derived()))) requires contiguous_iterator> { return std::to_address(ranges::begin(_M_derived())); } constexpr auto data() const noexcept(noexcept(ranges::begin(_M_derived()))) requires range && contiguous_iterator> { return std::to_address(ranges::begin(_M_derived())); } constexpr auto size() noexcept(noexcept(_S_size(_M_derived()))) requires forward_range<_Derived> && sized_sentinel_for, iterator_t<_Derived>> { return _S_size(_M_derived()); } constexpr auto size() const noexcept(noexcept(_S_size(_M_derived()))) requires forward_range && sized_sentinel_for, iterator_t> { return _S_size(_M_derived()); } constexpr decltype(auto) front() requires forward_range<_Derived> { do { if (std::__is_constant_evaluated()) if (__builtin_expect(!bool(!empty()), false)) std::__glibcxx_assert_fail(); } while (false); return *ranges::begin(_M_derived()); } constexpr decltype(auto) front() const requires forward_range { do { if (std::__is_constant_evaluated()) if (__builtin_expect(!bool(!empty()), false)) std::__glibcxx_assert_fail(); } while (false); return *ranges::begin(_M_derived()); } constexpr decltype(auto) back() requires bidirectional_range<_Derived> && common_range<_Derived> { do { if (std::__is_constant_evaluated()) if (__builtin_expect(!bool(!empty()), false)) std::__glibcxx_assert_fail(); } while (false); return *ranges::prev(ranges::end(_M_derived())); } constexpr decltype(auto) back() const requires bidirectional_range && common_range { do { if (std::__is_constant_evaluated()) if (__builtin_expect(!bool(!empty()), false)) std::__glibcxx_assert_fail(); } while (false); return *ranges::prev(ranges::end(_M_derived())); } template constexpr decltype(auto) operator[](range_difference_t<_Range> __n) { return ranges::begin(_M_derived())[__n]; } template constexpr decltype(auto) operator[](range_difference_t<_Range> __n) const { return ranges::begin(_M_derived())[__n]; } constexpr auto cbegin() requires input_range<_Derived> { return ranges::cbegin(_M_derived()); } constexpr auto cbegin() const requires input_range { return ranges::cbegin(_M_derived()); } constexpr auto cend() requires input_range<_Derived> { return ranges::cend(_M_derived()); } constexpr auto cend() const requires input_range { return ranges::cend(_M_derived()); } }; namespace __detail { template concept __uses_nonqualification_pointer_conversion = is_pointer_v<_From> && is_pointer_v<_To> && !convertible_to(*)[], remove_pointer_t<_To>(*)[]>; template concept __convertible_to_non_slicing = convertible_to<_From, _To> && !__uses_nonqualification_pointer_conversion, decay_t<_To>>; # 244 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/ranges_util.h" 3 template concept __pair_like_convertible_from = !range<_Tp> && !is_reference_v<_Vp> && __pair_like<_Tp> && constructible_from<_Tp, _Up, _Vp> && __convertible_to_non_slicing<_Up, tuple_element_t<0, _Tp>> && convertible_to<_Vp, tuple_element_t<1, _Tp>>; } namespace views { struct _Drop; } enum class subrange_kind : bool { unsized, sized }; template _Sent = _It, subrange_kind _Kind = sized_sentinel_for<_Sent, _It> ? subrange_kind::sized : subrange_kind::unsized> requires (_Kind == subrange_kind::sized || !sized_sentinel_for<_Sent, _It>) class subrange : public view_interface> { private: static constexpr bool _S_store_size = _Kind == subrange_kind::sized && !sized_sentinel_for<_Sent, _It>; friend struct views::_Drop; _It _M_begin = _It(); [[no_unique_address]] _Sent _M_end = _Sent(); using __size_type = __detail::__make_unsigned_like_t>; template struct _Size { [[__gnu__::__always_inline__]] constexpr _Size(_Tp = {}) { } }; template struct _Size<_Tp, true> { [[__gnu__::__always_inline__]] constexpr _Size(_Tp __s = {}) : _M_size(__s) { } _Tp _M_size; }; [[no_unique_address]] _Size<__size_type> _M_size = {}; public: subrange() requires default_initializable<_It> = default; constexpr subrange(__detail::__convertible_to_non_slicing<_It> auto __i, _Sent __s) noexcept(is_nothrow_constructible_v<_It, decltype(__i)> && is_nothrow_constructible_v<_Sent, _Sent&>) requires (!_S_store_size) : _M_begin(std::move(__i)), _M_end(__s) { } constexpr subrange(__detail::__convertible_to_non_slicing<_It> auto __i, _Sent __s, __size_type __n) noexcept(is_nothrow_constructible_v<_It, decltype(__i)> && is_nothrow_constructible_v<_Sent, _Sent&>) requires (_Kind == subrange_kind::sized) : _M_begin(std::move(__i)), _M_end(__s), _M_size(__n) { } template<__detail::__different_from _Rng> requires borrowed_range<_Rng> && __detail::__convertible_to_non_slicing, _It> && convertible_to, _Sent> constexpr subrange(_Rng&& __r) noexcept(noexcept(subrange(__r, ranges::size(__r)))) requires _S_store_size && sized_range<_Rng> : subrange(__r, ranges::size(__r)) { } template<__detail::__different_from _Rng> requires borrowed_range<_Rng> && __detail::__convertible_to_non_slicing, _It> && convertible_to, _Sent> constexpr subrange(_Rng&& __r) noexcept(noexcept(subrange(ranges::begin(__r), ranges::end(__r)))) requires (!_S_store_size) : subrange(ranges::begin(__r), ranges::end(__r)) { } template requires __detail::__convertible_to_non_slicing, _It> && convertible_to, _Sent> constexpr subrange(_Rng&& __r, __size_type __n) noexcept(noexcept(subrange(ranges::begin(__r), ranges::end(__r), __n))) requires (_Kind == subrange_kind::sized) : subrange{ranges::begin(__r), ranges::end(__r), __n} { } template<__detail::__different_from _PairLike> requires __detail::__pair_like_convertible_from<_PairLike, const _It&, const _Sent&> constexpr operator _PairLike() const { return _PairLike(_M_begin, _M_end); } constexpr _It begin() const requires copyable<_It> { return _M_begin; } [[nodiscard]] constexpr _It begin() requires (!copyable<_It>) { return std::move(_M_begin); } constexpr _Sent end() const { return _M_end; } constexpr bool empty() const { return _M_begin == _M_end; } constexpr __size_type size() const requires (_Kind == subrange_kind::sized) { if constexpr (_S_store_size) return _M_size._M_size; else return __detail::__to_unsigned_like(_M_end - _M_begin); } [[nodiscard]] constexpr subrange next(iter_difference_t<_It> __n = 1) const & requires forward_iterator<_It> { auto __tmp = *this; __tmp.advance(__n); return __tmp; } [[nodiscard]] constexpr subrange next(iter_difference_t<_It> __n = 1) && { advance(__n); return std::move(*this); } [[nodiscard]] constexpr subrange prev(iter_difference_t<_It> __n = 1) const requires bidirectional_iterator<_It> { auto __tmp = *this; __tmp.advance(-__n); return __tmp; } constexpr subrange& advance(iter_difference_t<_It> __n) { if constexpr (bidirectional_iterator<_It>) if (__n < 0) { ranges::advance(_M_begin, __n); if constexpr (_S_store_size) _M_size._M_size += __detail::__to_unsigned_like(-__n); return *this; } do { if (std::__is_constant_evaluated()) if (__builtin_expect(!bool(__n >= 0), false)) std::__glibcxx_assert_fail(); } while (false); auto __d = __n - ranges::advance(_M_begin, __n, _M_end); if constexpr (_S_store_size) _M_size._M_size -= __detail::__to_unsigned_like(__d); return *this; } }; template _Sent> subrange(_It, _Sent) -> subrange<_It, _Sent>; template _Sent> subrange(_It, _Sent, __detail::__make_unsigned_like_t>) -> subrange<_It, _Sent, subrange_kind::sized>; template subrange(_Rng&&) -> subrange, sentinel_t<_Rng>, (sized_range<_Rng> || sized_sentinel_for, iterator_t<_Rng>>) ? subrange_kind::sized : subrange_kind::unsized>; template subrange(_Rng&&, __detail::__make_unsigned_like_t>) -> subrange, sentinel_t<_Rng>, subrange_kind::sized>; template requires (_Num < 2) constexpr auto get(const subrange<_It, _Sent, _Kind>& __r) { if constexpr (_Num == 0) return __r.begin(); else return __r.end(); } template requires (_Num < 2) constexpr auto get(subrange<_It, _Sent, _Kind>&& __r) { if constexpr (_Num == 0) return __r.begin(); else return __r.end(); } template inline constexpr bool enable_borrowed_range> = true; template using borrowed_subrange_t = __conditional_t, subrange>, dangling>; template inline constexpr bool __detail::__is_subrange> = true; } template inline constexpr bool __is_tuple_like_v> = true; namespace ranges { struct __find_fn { template _Sent, typename _Tp, typename _Proj = identity> requires indirect_binary_predicate, const _Tp*> constexpr _Iter operator()(_Iter __first, _Sent __last, const _Tp& __value, _Proj __proj = {}) const { while (__first != __last && !(std::__invoke(__proj, *__first) == __value)) ++__first; return __first; } template requires indirect_binary_predicate, _Proj>, const _Tp*> constexpr borrowed_iterator_t<_Range> operator()(_Range&& __r, const _Tp& __value, _Proj __proj = {}) const { return (*this)(ranges::begin(__r), ranges::end(__r), __value, std::move(__proj)); } }; inline constexpr __find_fn find{}; struct __find_if_fn { template _Sent, typename _Proj = identity, indirect_unary_predicate> _Pred> constexpr _Iter operator()(_Iter __first, _Sent __last, _Pred __pred, _Proj __proj = {}) const { while (__first != __last && !(bool)std::__invoke(__pred, std::__invoke(__proj, *__first))) ++__first; return __first; } template, _Proj>> _Pred> constexpr borrowed_iterator_t<_Range> operator()(_Range&& __r, _Pred __pred, _Proj __proj = {}) const { return (*this)(ranges::begin(__r), ranges::end(__r), std::move(__pred), std::move(__proj)); } }; inline constexpr __find_if_fn find_if{}; struct __find_if_not_fn { template _Sent, typename _Proj = identity, indirect_unary_predicate> _Pred> constexpr _Iter operator()(_Iter __first, _Sent __last, _Pred __pred, _Proj __proj = {}) const { while (__first != __last && (bool)std::__invoke(__pred, std::__invoke(__proj, *__first))) ++__first; return __first; } template, _Proj>> _Pred> constexpr borrowed_iterator_t<_Range> operator()(_Range&& __r, _Pred __pred, _Proj __proj = {}) const { return (*this)(ranges::begin(__r), ranges::end(__r), std::move(__pred), std::move(__proj)); } }; inline constexpr __find_if_not_fn find_if_not{}; template struct in_in_result { [[no_unique_address]] _Iter1 in1; [[no_unique_address]] _Iter2 in2; template requires convertible_to && convertible_to constexpr operator in_in_result<_IIter1, _IIter2>() const & { return {in1, in2}; } template requires convertible_to<_Iter1, _IIter1> && convertible_to<_Iter2, _IIter2> constexpr operator in_in_result<_IIter1, _IIter2>() && { return {std::move(in1), std::move(in2)}; } }; template using mismatch_result = in_in_result<_Iter1, _Iter2>; struct __mismatch_fn { template _Sent1, input_iterator _Iter2, sentinel_for<_Iter2> _Sent2, typename _Pred = ranges::equal_to, typename _Proj1 = identity, typename _Proj2 = identity> requires indirectly_comparable<_Iter1, _Iter2, _Pred, _Proj1, _Proj2> constexpr mismatch_result<_Iter1, _Iter2> operator()(_Iter1 __first1, _Sent1 __last1, _Iter2 __first2, _Sent2 __last2, _Pred __pred = {}, _Proj1 __proj1 = {}, _Proj2 __proj2 = {}) const { while (__first1 != __last1 && __first2 != __last2 && (bool)std::__invoke(__pred, std::__invoke(__proj1, *__first1), std::__invoke(__proj2, *__first2))) { ++__first1; ++__first2; } return { std::move(__first1), std::move(__first2) }; } template requires indirectly_comparable, iterator_t<_Range2>, _Pred, _Proj1, _Proj2> constexpr mismatch_result, iterator_t<_Range2>> operator()(_Range1&& __r1, _Range2&& __r2, _Pred __pred = {}, _Proj1 __proj1 = {}, _Proj2 __proj2 = {}) const { return (*this)(ranges::begin(__r1), ranges::end(__r1), ranges::begin(__r2), ranges::end(__r2), std::move(__pred), std::move(__proj1), std::move(__proj2)); } }; inline constexpr __mismatch_fn mismatch{}; struct __search_fn { template _Sent1, forward_iterator _Iter2, sentinel_for<_Iter2> _Sent2, typename _Pred = ranges::equal_to, typename _Proj1 = identity, typename _Proj2 = identity> requires indirectly_comparable<_Iter1, _Iter2, _Pred, _Proj1, _Proj2> constexpr subrange<_Iter1> operator()(_Iter1 __first1, _Sent1 __last1, _Iter2 __first2, _Sent2 __last2, _Pred __pred = {}, _Proj1 __proj1 = {}, _Proj2 __proj2 = {}) const { if (__first1 == __last1 || __first2 == __last2) return {__first1, __first1}; for (;;) { for (;;) { if (__first1 == __last1) return {__first1, __first1}; if (std::__invoke(__pred, std::__invoke(__proj1, *__first1), std::__invoke(__proj2, *__first2))) break; ++__first1; } auto __cur1 = __first1; auto __cur2 = __first2; for (;;) { if (++__cur2 == __last2) return {__first1, ++__cur1}; if (++__cur1 == __last1) return {__cur1, __cur1}; if (!(bool)std::__invoke(__pred, std::__invoke(__proj1, *__cur1), std::__invoke(__proj2, *__cur2))) { ++__first1; break; } } } } template requires indirectly_comparable, iterator_t<_Range2>, _Pred, _Proj1, _Proj2> constexpr borrowed_subrange_t<_Range1> operator()(_Range1&& __r1, _Range2&& __r2, _Pred __pred = {}, _Proj1 __proj1 = {}, _Proj2 __proj2 = {}) const { return (*this)(ranges::begin(__r1), ranges::end(__r1), ranges::begin(__r2), ranges::end(__r2), std::move(__pred), std::move(__proj1), std::move(__proj2)); } }; inline constexpr __search_fn search{}; struct __min_fn { template> _Comp = ranges::less> constexpr const _Tp& operator()(const _Tp& __a, const _Tp& __b, _Comp __comp = {}, _Proj __proj = {}) const { if (std::__invoke(__comp, std::__invoke(__proj, __b), std::__invoke(__proj, __a))) return __b; else return __a; } template, _Proj>> _Comp = ranges::less> requires indirectly_copyable_storable, range_value_t<_Range>*> constexpr range_value_t<_Range> operator()(_Range&& __r, _Comp __comp = {}, _Proj __proj = {}) const { auto __first = ranges::begin(__r); auto __last = ranges::end(__r); do { if (std::__is_constant_evaluated()) if (__builtin_expect(!bool(__first != __last), false)) std::__glibcxx_assert_fail(); } while (false); auto __result = *__first; while (++__first != __last) { auto __tmp = *__first; if (std::__invoke(__comp, std::__invoke(__proj, __tmp), std::__invoke(__proj, __result))) __result = std::move(__tmp); } return __result; } template> _Comp = ranges::less> constexpr _Tp operator()(initializer_list<_Tp> __r, _Comp __comp = {}, _Proj __proj = {}) const { return (*this)(ranges::subrange(__r), std::move(__comp), std::move(__proj)); } }; inline constexpr __min_fn min{}; struct __adjacent_find_fn { template _Sent, typename _Proj = identity, indirect_binary_predicate, projected<_Iter, _Proj>> _Pred = ranges::equal_to> constexpr _Iter operator()(_Iter __first, _Sent __last, _Pred __pred = {}, _Proj __proj = {}) const { if (__first == __last) return __first; auto __next = __first; for (; ++__next != __last; __first = __next) { if (std::__invoke(__pred, std::__invoke(__proj, *__first), std::__invoke(__proj, *__next))) return __first; } return __next; } template, _Proj>, projected, _Proj>> _Pred = ranges::equal_to> constexpr borrowed_iterator_t<_Range> operator()(_Range&& __r, _Pred __pred = {}, _Proj __proj = {}) const { return (*this)(ranges::begin(__r), ranges::end(__r), std::move(__pred), std::move(__proj)); } }; inline constexpr __adjacent_find_fn adjacent_find{}; } using ranges::get; template struct tuple_size> : integral_constant { }; template struct tuple_element<0, ranges::subrange<_Iter, _Sent, _Kind>> { using type = _Iter; }; template struct tuple_element<1, ranges::subrange<_Iter, _Sent, _Kind>> { using type = _Sent; }; template struct tuple_element<0, const ranges::subrange<_Iter, _Sent, _Kind>> { using type = _Iter; }; template struct tuple_element<1, const ranges::subrange<_Iter, _Sent, _Kind>> { using type = _Sent; }; } # 45 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/tuple" 2 3 # 54 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/tuple" 3 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/version.h" 1 3 # 48 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/version.h" 3 # 55 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/tuple" 2 3 namespace std __attribute__ ((__visibility__ ("default"))) { template class tuple; template struct __is_empty_non_tuple : is_empty<_Tp> { }; template struct __is_empty_non_tuple> : false_type { }; template using __empty_not_final = __conditional_t<__is_final(_Tp), false_type, __is_empty_non_tuple<_Tp>>; template::value> struct _Head_base; template struct _Head_base<_Idx, _Head, true> { constexpr _Head_base() : _M_head_impl() { } constexpr _Head_base(const _Head& __h) : _M_head_impl(__h) { } constexpr _Head_base(const _Head_base&) = default; constexpr _Head_base(_Head_base&&) = default; template constexpr _Head_base(_UHead&& __h) : _M_head_impl(std::forward<_UHead>(__h)) { } constexpr _Head_base(allocator_arg_t, __uses_alloc0) : _M_head_impl() { } template constexpr _Head_base(allocator_arg_t, __uses_alloc1<_Alloc> __a) : _M_head_impl(allocator_arg, *__a._M_a) { } template constexpr _Head_base(allocator_arg_t, __uses_alloc2<_Alloc> __a) : _M_head_impl(*__a._M_a) { } template constexpr _Head_base(__uses_alloc0, _UHead&& __uhead) : _M_head_impl(std::forward<_UHead>(__uhead)) { } template constexpr _Head_base(__uses_alloc1<_Alloc> __a, _UHead&& __uhead) : _M_head_impl(allocator_arg, *__a._M_a, std::forward<_UHead>(__uhead)) { } template constexpr _Head_base(__uses_alloc2<_Alloc> __a, _UHead&& __uhead) : _M_head_impl(std::forward<_UHead>(__uhead), *__a._M_a) { } static constexpr _Head& _M_head(_Head_base& __b) noexcept { return __b._M_head_impl; } static constexpr const _Head& _M_head(const _Head_base& __b) noexcept { return __b._M_head_impl; } [[__no_unique_address__]] _Head _M_head_impl; }; # 195 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/tuple" 3 template struct _Head_base<_Idx, _Head, false> { constexpr _Head_base() : _M_head_impl() { } constexpr _Head_base(const _Head& __h) : _M_head_impl(__h) { } constexpr _Head_base(const _Head_base&) = default; constexpr _Head_base(_Head_base&&) = default; template constexpr _Head_base(_UHead&& __h) : _M_head_impl(std::forward<_UHead>(__h)) { } constexpr _Head_base(allocator_arg_t, __uses_alloc0) : _M_head_impl() { } template constexpr _Head_base(allocator_arg_t, __uses_alloc1<_Alloc> __a) : _M_head_impl(allocator_arg, *__a._M_a) { } template constexpr _Head_base(allocator_arg_t, __uses_alloc2<_Alloc> __a) : _M_head_impl(*__a._M_a) { } template constexpr _Head_base(__uses_alloc0, _UHead&& __uhead) : _M_head_impl(std::forward<_UHead>(__uhead)) { } template constexpr _Head_base(__uses_alloc1<_Alloc> __a, _UHead&& __uhead) : _M_head_impl(allocator_arg, *__a._M_a, std::forward<_UHead>(__uhead)) { } template constexpr _Head_base(__uses_alloc2<_Alloc> __a, _UHead&& __uhead) : _M_head_impl(std::forward<_UHead>(__uhead), *__a._M_a) { } static constexpr _Head& _M_head(_Head_base& __b) noexcept { return __b._M_head_impl; } static constexpr const _Head& _M_head(const _Head_base& __b) noexcept { return __b._M_head_impl; } _Head _M_head_impl; }; struct __tuple_like_tag_t { explicit __tuple_like_tag_t() = default; }; template constexpr _Cat __tuple_cmp(const _Tp&, const _Up&, index_sequence<>); template constexpr _Cat __tuple_cmp(const _Tp& __t, const _Up& __u, index_sequence<_Idx0, _Idxs...>); # 274 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/tuple" 3 template struct _Tuple_impl; template struct _Tuple_impl<_Idx, _Head, _Tail...> : public _Tuple_impl<_Idx + 1, _Tail...>, private _Head_base<_Idx, _Head> { template friend struct _Tuple_impl; typedef _Tuple_impl<_Idx + 1, _Tail...> _Inherited; typedef _Head_base<_Idx, _Head> _Base; static constexpr _Head& _M_head(_Tuple_impl& __t) noexcept { return _Base::_M_head(__t); } static constexpr const _Head& _M_head(const _Tuple_impl& __t) noexcept { return _Base::_M_head(__t); } static constexpr _Inherited& _M_tail(_Tuple_impl& __t) noexcept { return __t; } static constexpr const _Inherited& _M_tail(const _Tuple_impl& __t) noexcept { return __t; } constexpr _Tuple_impl() : _Inherited(), _Base() { } explicit constexpr _Tuple_impl(const _Head& __head, const _Tail&... __tail) : _Inherited(__tail...), _Base(__head) { } template> explicit constexpr _Tuple_impl(_UHead&& __head, _UTail&&... __tail) : _Inherited(std::forward<_UTail>(__tail)...), _Base(std::forward<_UHead>(__head)) { } constexpr _Tuple_impl(const _Tuple_impl&) = default; _Tuple_impl& operator=(const _Tuple_impl&) = delete; _Tuple_impl(_Tuple_impl&&) = default; template constexpr _Tuple_impl(const _Tuple_impl<_Idx, _UElements...>& __in) : _Inherited(_Tuple_impl<_Idx, _UElements...>::_M_tail(__in)), _Base(_Tuple_impl<_Idx, _UElements...>::_M_head(__in)) { } template constexpr _Tuple_impl(_Tuple_impl<_Idx, _UHead, _UTails...>&& __in) : _Inherited(std::move (_Tuple_impl<_Idx, _UHead, _UTails...>::_M_tail(__in))), _Base(std::forward<_UHead> (_Tuple_impl<_Idx, _UHead, _UTails...>::_M_head(__in))) { } template constexpr _Tuple_impl(_Tuple_impl<_Idx, _UElements...>& __in) : _Inherited(_Tuple_impl<_Idx, _UElements...>::_M_tail(__in)), _Base(_Tuple_impl<_Idx, _UElements...>::_M_head(__in)) { } template constexpr _Tuple_impl(const _Tuple_impl<_Idx, _UHead, _UTails...>&& __in) : _Inherited(std::move (_Tuple_impl<_Idx, _UHead, _UTails...>::_M_tail(__in))), _Base(std::forward (_Tuple_impl<_Idx, _UHead, _UTails...>::_M_head(__in))) { } template constexpr _Tuple_impl(__tuple_like_tag_t, _UTuple&& __u, index_sequence<_Is...>) : _Tuple_impl(std::get<_Is>(std::forward<_UTuple>(__u))...) { } template constexpr _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a) : _Inherited(__tag, __a), _Base(__tag, __use_alloc<_Head>(__a)) { } template constexpr _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a, const _Head& __head, const _Tail&... __tail) : _Inherited(__tag, __a, __tail...), _Base(__use_alloc<_Head, _Alloc, _Head>(__a), __head) { } template> constexpr _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a, _UHead&& __head, _UTail&&... __tail) : _Inherited(__tag, __a, std::forward<_UTail>(__tail)...), _Base(__use_alloc<_Head, _Alloc, _UHead>(__a), std::forward<_UHead>(__head)) { } template constexpr _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a, const _Tuple_impl& __in) : _Inherited(__tag, __a, _M_tail(__in)), _Base(__use_alloc<_Head, _Alloc, _Head>(__a), _M_head(__in)) { } template constexpr _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a, _Tuple_impl&& __in) : _Inherited(__tag, __a, std::move(_M_tail(__in))), _Base(__use_alloc<_Head, _Alloc, _Head>(__a), std::forward<_Head>(_M_head(__in))) { } template constexpr _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a, const _Tuple_impl<_Idx, _UHead, _UTails...>& __in) : _Inherited(__tag, __a, _Tuple_impl<_Idx, _UHead, _UTails...>::_M_tail(__in)), _Base(__use_alloc<_Head, _Alloc, const _UHead&>(__a), _Tuple_impl<_Idx, _UHead, _UTails...>::_M_head(__in)) { } template constexpr _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a, _Tuple_impl<_Idx, _UHead, _UTails...>&& __in) : _Inherited(__tag, __a, std::move (_Tuple_impl<_Idx, _UHead, _UTails...>::_M_tail(__in))), _Base(__use_alloc<_Head, _Alloc, _UHead>(__a), std::forward<_UHead> (_Tuple_impl<_Idx, _UHead, _UTails...>::_M_head(__in))) { } template constexpr _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a, _Tuple_impl<_Idx, _UHead, _UTails...>& __in) : _Inherited(__tag, __a, _Tuple_impl<_Idx, _UHead, _UTails...>::_M_tail(__in)), _Base(__use_alloc<_Head, _Alloc, _UHead&>(__a), _Tuple_impl<_Idx, _UHead, _UTails...>::_M_head(__in)) { } template constexpr _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a, const _Tuple_impl<_Idx, _UHead, _UTails...>&& __in) : _Inherited(__tag, __a, std::move (_Tuple_impl<_Idx, _UHead, _UTails...>::_M_tail(__in))), _Base(__use_alloc<_Head, _Alloc, const _UHead>(__a), std::forward (_Tuple_impl<_Idx, _UHead, _UTails...>::_M_head(__in))) { } template constexpr _Tuple_impl(__tuple_like_tag_t, allocator_arg_t __tag, const _Alloc& __a, _UTuple&& __u, index_sequence<_Is...>) : _Tuple_impl(__tag, __a, std::get<_Is>(std::forward<_UTuple>(__u))...) { } template constexpr void _M_assign(const _Tuple_impl<_Idx, _UElements...>& __in) { _M_head(*this) = _Tuple_impl<_Idx, _UElements...>::_M_head(__in); _M_tail(*this)._M_assign( _Tuple_impl<_Idx, _UElements...>::_M_tail(__in)); } template constexpr void _M_assign(_Tuple_impl<_Idx, _UHead, _UTails...>&& __in) { _M_head(*this) = std::forward<_UHead> (_Tuple_impl<_Idx, _UHead, _UTails...>::_M_head(__in)); _M_tail(*this)._M_assign( std::move(_Tuple_impl<_Idx, _UHead, _UTails...>::_M_tail(__in))); } template constexpr void _M_assign(const _Tuple_impl<_Idx, _UElements...>& __in) const { _M_head(*this) = _Tuple_impl<_Idx, _UElements...>::_M_head(__in); _M_tail(*this)._M_assign( _Tuple_impl<_Idx, _UElements...>::_M_tail(__in)); } template constexpr void _M_assign(_Tuple_impl<_Idx, _UHead, _UTails...>&& __in) const { _M_head(*this) = std::forward<_UHead> (_Tuple_impl<_Idx, _UHead, _UTails...>::_M_head(__in)); _M_tail(*this)._M_assign( std::move(_Tuple_impl<_Idx, _UHead, _UTails...>::_M_tail(__in))); } template constexpr void _M_assign(__tuple_like_tag_t __tag, _UTuple&& __u) { _M_head(*this) = std::get<_Idx>(std::forward<_UTuple>(__u)); _M_tail(*this)._M_assign(__tag, std::forward<_UTuple>(__u)); } template constexpr void _M_assign(__tuple_like_tag_t __tag, _UTuple&& __u) const { _M_head(*this) = std::get<_Idx>(std::forward<_UTuple>(__u)); _M_tail(*this)._M_assign(__tag, std::forward<_UTuple>(__u)); } protected: constexpr void _M_swap(_Tuple_impl& __in) { using std::swap; swap(_M_head(*this), _M_head(__in)); _Inherited::_M_swap(_M_tail(__in)); } constexpr void _M_swap(const _Tuple_impl& __in) const { using std::swap; swap(_M_head(*this), _M_head(__in)); _Inherited::_M_swap(_M_tail(__in)); } }; template struct _Tuple_impl<_Idx, _Head> : private _Head_base<_Idx, _Head> { template friend struct _Tuple_impl; typedef _Head_base<_Idx, _Head> _Base; static constexpr _Head& _M_head(_Tuple_impl& __t) noexcept { return _Base::_M_head(__t); } static constexpr const _Head& _M_head(const _Tuple_impl& __t) noexcept { return _Base::_M_head(__t); } constexpr _Tuple_impl() : _Base() { } explicit constexpr _Tuple_impl(const _Head& __head) : _Base(__head) { } template explicit constexpr _Tuple_impl(_UHead&& __head) : _Base(std::forward<_UHead>(__head)) { } constexpr _Tuple_impl(const _Tuple_impl&) = default; _Tuple_impl& operator=(const _Tuple_impl&) = delete; constexpr _Tuple_impl(_Tuple_impl&& __in) noexcept(is_nothrow_move_constructible<_Head>::value) : _Base(static_cast<_Base&&>(__in)) { } template constexpr _Tuple_impl(const _Tuple_impl<_Idx, _UHead>& __in) : _Base(_Tuple_impl<_Idx, _UHead>::_M_head(__in)) { } template constexpr _Tuple_impl(_Tuple_impl<_Idx, _UHead>&& __in) : _Base(std::forward<_UHead>(_Tuple_impl<_Idx, _UHead>::_M_head(__in))) { } template constexpr _Tuple_impl(_Tuple_impl<_Idx, _UHead>& __in) : _Base(_Tuple_impl<_Idx, _UHead>::_M_head(__in)) { } template constexpr _Tuple_impl(const _Tuple_impl<_Idx, _UHead>&& __in) : _Base(std::forward(_Tuple_impl<_Idx, _UHead>::_M_head(__in))) { } template constexpr _Tuple_impl(__tuple_like_tag_t, _UTuple&& __u, index_sequence<0>) : _Tuple_impl(std::get<0>(std::forward<_UTuple>(__u))) { } template constexpr _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a) : _Base(__tag, __use_alloc<_Head>(__a)) { } template constexpr _Tuple_impl(allocator_arg_t, const _Alloc& __a, const _Head& __head) : _Base(__use_alloc<_Head, _Alloc, const _Head&>(__a), __head) { } template constexpr _Tuple_impl(allocator_arg_t, const _Alloc& __a, _UHead&& __head) : _Base(__use_alloc<_Head, _Alloc, _UHead>(__a), std::forward<_UHead>(__head)) { } template constexpr _Tuple_impl(allocator_arg_t, const _Alloc& __a, const _Tuple_impl& __in) : _Base(__use_alloc<_Head, _Alloc, const _Head&>(__a), _M_head(__in)) { } template constexpr _Tuple_impl(allocator_arg_t, const _Alloc& __a, _Tuple_impl&& __in) : _Base(__use_alloc<_Head, _Alloc, _Head>(__a), std::forward<_Head>(_M_head(__in))) { } template constexpr _Tuple_impl(allocator_arg_t, const _Alloc& __a, const _Tuple_impl<_Idx, _UHead>& __in) : _Base(__use_alloc<_Head, _Alloc, const _UHead&>(__a), _Tuple_impl<_Idx, _UHead>::_M_head(__in)) { } template constexpr _Tuple_impl(allocator_arg_t, const _Alloc& __a, _Tuple_impl<_Idx, _UHead>&& __in) : _Base(__use_alloc<_Head, _Alloc, _UHead>(__a), std::forward<_UHead>(_Tuple_impl<_Idx, _UHead>::_M_head(__in))) { } template constexpr _Tuple_impl(allocator_arg_t, const _Alloc& __a, _Tuple_impl<_Idx, _UHead>& __in) : _Base(__use_alloc<_Head, _Alloc, _UHead&>(__a), _Tuple_impl<_Idx, _UHead>::_M_head(__in)) { } template constexpr _Tuple_impl(allocator_arg_t, const _Alloc& __a, const _Tuple_impl<_Idx, _UHead>&& __in) : _Base(__use_alloc<_Head, _Alloc, const _UHead>(__a), std::forward(_Tuple_impl<_Idx, _UHead>::_M_head(__in))) { } template constexpr _Tuple_impl(__tuple_like_tag_t, allocator_arg_t __tag, const _Alloc& __a, _UTuple&& __u, index_sequence<0>) : _Tuple_impl(__tag, __a, std::get<0>(std::forward<_UTuple>(__u))) { } template constexpr void _M_assign(const _Tuple_impl<_Idx, _UHead>& __in) { _M_head(*this) = _Tuple_impl<_Idx, _UHead>::_M_head(__in); } template constexpr void _M_assign(_Tuple_impl<_Idx, _UHead>&& __in) { _M_head(*this) = std::forward<_UHead>(_Tuple_impl<_Idx, _UHead>::_M_head(__in)); } template constexpr void _M_assign(const _Tuple_impl<_Idx, _UHead>& __in) const { _M_head(*this) = _Tuple_impl<_Idx, _UHead>::_M_head(__in); } template constexpr void _M_assign(_Tuple_impl<_Idx, _UHead>&& __in) const { _M_head(*this) = std::forward<_UHead>(_Tuple_impl<_Idx, _UHead>::_M_head(__in)); } template constexpr void _M_assign(__tuple_like_tag_t, _UTuple&& __u) { _M_head(*this) = std::get<_Idx>(std::forward<_UTuple>(__u)); } template constexpr void _M_assign(__tuple_like_tag_t, _UTuple&& __u) const { _M_head(*this) = std::get<_Idx>(std::forward<_UTuple>(__u)); } protected: constexpr void _M_swap(_Tuple_impl& __in) { using std::swap; swap(_M_head(*this), _M_head(__in)); } constexpr void _M_swap(const _Tuple_impl& __in) const { using std::swap; swap(_M_head(*this), _M_head(__in)); } }; template struct _TupleConstraints { template using __constructible = __and_...>; template using __convertible = __and_...>; template static constexpr bool __is_implicitly_constructible() { return __and_<__constructible<_UTypes...>, __convertible<_UTypes...> >::value; } template static constexpr bool __is_explicitly_constructible() { return __and_<__constructible<_UTypes...>, __not_<__convertible<_UTypes...>> >::value; } static constexpr bool __is_implicitly_default_constructible() { return __and_... >::value; } static constexpr bool __is_explicitly_default_constructible() { return __and_..., __not_<__and_< std::__is_implicitly_default_constructible<_Types>...> >>::value; } }; template struct _TupleConstraints { template static constexpr bool __is_implicitly_constructible() { return false; } template static constexpr bool __is_explicitly_constructible() { return false; } }; template class tuple : public _Tuple_impl<0, _Elements...> { using _Inherited = _Tuple_impl<0, _Elements...>; template static consteval bool __constructible() { if constexpr (sizeof...(_UTypes) == sizeof...(_Elements)) return __and_v...>; else return false; } template static consteval bool __nothrow_constructible() { if constexpr (sizeof...(_UTypes) == sizeof...(_Elements)) return __and_v...>; else return false; } template static consteval bool __convertible() { if constexpr (sizeof...(_UTypes) == sizeof...(_Elements)) return __and_v...>; else return false; } template static consteval bool __disambiguating_constraint() { if constexpr (sizeof...(_Elements) != sizeof...(_UTypes)) return false; else if constexpr (sizeof...(_Elements) == 1) { using _U0 = typename _Nth_type<0, _UTypes...>::type; return !is_same_v, tuple>; } else if constexpr (sizeof...(_Elements) < 4) { using _U0 = typename _Nth_type<0, _UTypes...>::type; if constexpr (!is_same_v, allocator_arg_t>) return true; else { using _T0 = typename _Nth_type<0, _Elements...>::type; return is_same_v, allocator_arg_t>; } } return true; } template static consteval bool __use_other_ctor() { if constexpr (sizeof...(_Elements) != 1) return false; else if constexpr (is_same_v, tuple>) return true; else { using _Tp = typename _Nth_type<0, _Elements...>::type; if constexpr (is_convertible_v<_Tuple, _Tp>) return true; else if constexpr (is_constructible_v<_Tp, _Tuple>) return true; } return false; } template static consteval bool __dangles() { return (__reference_constructs_from_temporary(_Elements, _Up&&) || ...); } template static consteval bool __dangles_from_tuple_like() { return [](index_sequence<_Is...>) { return __dangles(std::declval<_UTuple>()))...>(); }(index_sequence_for<_Elements...>{}); } template static consteval bool __constructible_from_tuple_like() { return [](index_sequence<_Is...>) { return __constructible(std::declval<_UTuple>()))...>(); }(index_sequence_for<_Elements...>{}); } template static consteval bool __convertible_from_tuple_like() { return [](index_sequence<_Is...>) { return __convertible(std::declval<_UTuple>()))...>(); }(index_sequence_for<_Elements...>{}); } public: constexpr explicit(!(__is_implicitly_default_constructible_v<_Elements> && ...)) tuple() noexcept((is_nothrow_default_constructible_v<_Elements> && ...)) requires (is_default_constructible_v<_Elements> && ...) : _Inherited() { } constexpr explicit(!__convertible()) tuple(const _Elements&... __elements) noexcept(__nothrow_constructible()) requires (__constructible()) : _Inherited(__elements...) { } template requires (__disambiguating_constraint<_UTypes...>()) && (__constructible<_UTypes...>()) && (!__dangles<_UTypes...>()) constexpr explicit(!__convertible<_UTypes...>()) tuple(_UTypes&&... __u) noexcept(__nothrow_constructible<_UTypes...>()) : _Inherited(std::forward<_UTypes>(__u)...) { } template requires (__disambiguating_constraint<_UTypes...>()) && (__constructible<_UTypes...>()) && (__dangles<_UTypes...>()) tuple(_UTypes&&...) = delete; constexpr tuple(const tuple&) = default; constexpr tuple(tuple&&) = default; template requires (__constructible()) && (!__use_other_ctor&>()) && (!__dangles()) constexpr explicit(!__convertible()) tuple(const tuple<_UTypes...>& __u) noexcept(__nothrow_constructible()) : _Inherited(static_cast&>(__u)) { } template requires (__constructible()) && (!__use_other_ctor&>()) && (__dangles()) tuple(const tuple<_UTypes...>&) = delete; template requires (__constructible<_UTypes...>()) && (!__use_other_ctor>()) && (!__dangles<_UTypes...>()) constexpr explicit(!__convertible<_UTypes...>()) tuple(tuple<_UTypes...>&& __u) noexcept(__nothrow_constructible<_UTypes...>()) : _Inherited(static_cast<_Tuple_impl<0, _UTypes...>&&>(__u)) { } template requires (__constructible<_UTypes...>()) && (!__use_other_ctor>()) && (__dangles<_UTypes...>()) tuple(tuple<_UTypes...>&&) = delete; template requires (__constructible<_UTypes&...>()) && (!__use_other_ctor&>()) && (!__dangles<_UTypes&...>()) constexpr explicit(!__convertible<_UTypes&...>()) tuple(tuple<_UTypes...>& __u) noexcept(__nothrow_constructible<_UTypes&...>()) : _Inherited(static_cast<_Tuple_impl<0, _UTypes...>&>(__u)) { } template requires (__constructible<_UTypes&...>()) && (!__use_other_ctor&>()) && (__dangles<_UTypes&...>()) tuple(tuple<_UTypes...>&) = delete; template requires (__constructible()) && (!__use_other_ctor>()) && (!__dangles()) constexpr explicit(!__convertible()) tuple(const tuple<_UTypes...>&& __u) noexcept(__nothrow_constructible()) : _Inherited(static_cast&&>(__u)) { } template requires (__constructible()) && (!__use_other_ctor>()) && (__dangles()) tuple(const tuple<_UTypes...>&&) = delete; template requires (sizeof...(_Elements) == 2) && (__constructible()) && (!__dangles()) constexpr explicit(!__convertible()) tuple(const pair<_U1, _U2>& __u) noexcept(__nothrow_constructible()) : _Inherited(__u.first, __u.second) { } template requires (sizeof...(_Elements) == 2) && (__constructible()) && (__dangles()) tuple(const pair<_U1, _U2>&) = delete; template requires (sizeof...(_Elements) == 2) && (__constructible<_U1, _U2>()) && (!__dangles<_U1, _U2>()) constexpr explicit(!__convertible<_U1, _U2>()) tuple(pair<_U1, _U2>&& __u) noexcept(__nothrow_constructible<_U1, _U2>()) : _Inherited(std::forward<_U1>(__u.first), std::forward<_U2>(__u.second)) { } template requires (sizeof...(_Elements) == 2) && (__constructible<_U1, _U2>()) && (__dangles<_U1, _U2>()) tuple(pair<_U1, _U2>&&) = delete; template requires (sizeof...(_Elements) == 2) && (__constructible<_U1&, _U2&>()) && (!__dangles<_U1&, _U2&>()) constexpr explicit(!__convertible<_U1&, _U2&>()) tuple(pair<_U1, _U2>& __u) noexcept(__nothrow_constructible<_U1&, _U2&>()) : _Inherited(__u.first, __u.second) { } template requires (sizeof...(_Elements) == 2) && (__constructible<_U1&, _U2&>()) && (__dangles<_U1&, _U2&>()) tuple(pair<_U1, _U2>&) = delete; template requires (sizeof...(_Elements) == 2) && (__constructible()) && (!__dangles()) constexpr explicit(!__convertible()) tuple(const pair<_U1, _U2>&& __u) noexcept(__nothrow_constructible()) : _Inherited(std::forward(__u.first), std::forward(__u.second)) { } template requires (sizeof...(_Elements) == 2) && (__constructible()) && (__dangles()) tuple(const pair<_U1, _U2>&&) = delete; template<__eligible_tuple_like _UTuple> requires (__constructible_from_tuple_like<_UTuple>()) && (!__use_other_ctor<_UTuple>()) && (!__dangles_from_tuple_like<_UTuple>()) constexpr explicit(!__convertible_from_tuple_like<_UTuple>()) tuple(_UTuple&& __u) : _Inherited(__tuple_like_tag_t{}, std::forward<_UTuple>(__u), index_sequence_for<_Elements...>{}) { } template<__eligible_tuple_like _UTuple> requires (__constructible_from_tuple_like<_UTuple>()) && (!__use_other_ctor<_UTuple>()) && (__dangles_from_tuple_like<_UTuple>()) tuple(_UTuple&&) = delete; template constexpr explicit(!(__is_implicitly_default_constructible_v<_Elements> && ...)) tuple(allocator_arg_t __tag, const _Alloc& __a) requires (is_default_constructible_v<_Elements> && ...) : _Inherited(__tag, __a) { } template constexpr explicit(!__convertible()) tuple(allocator_arg_t __tag, const _Alloc& __a, const _Elements&... __elements) requires (__constructible()) : _Inherited(__tag, __a, __elements...) { } template requires (__disambiguating_constraint<_UTypes...>()) && (__constructible<_UTypes...>()) && (!__dangles<_UTypes...>()) constexpr explicit(!__convertible<_UTypes...>()) tuple(allocator_arg_t __tag, const _Alloc& __a, _UTypes&&... __u) : _Inherited(__tag, __a, std::forward<_UTypes>(__u)...) { } template requires (__disambiguating_constraint<_UTypes...>()) && (__constructible<_UTypes...>()) && (__dangles<_UTypes...>()) tuple(allocator_arg_t, const _Alloc&, _UTypes&&...) = delete; template constexpr tuple(allocator_arg_t __tag, const _Alloc& __a, const tuple& __u) : _Inherited(__tag, __a, static_cast(__u)) { } template requires (__constructible<_Elements...>()) constexpr tuple(allocator_arg_t __tag, const _Alloc& __a, tuple&& __u) : _Inherited(__tag, __a, static_cast<_Inherited&&>(__u)) { } template requires (__constructible()) && (!__use_other_ctor&>()) && (!__dangles()) constexpr explicit(!__convertible()) tuple(allocator_arg_t __tag, const _Alloc& __a, const tuple<_UTypes...>& __u) : _Inherited(__tag, __a, static_cast&>(__u)) { } template requires (__constructible()) && (!__use_other_ctor&>()) && (__dangles()) tuple(allocator_arg_t, const _Alloc&, const tuple<_UTypes...>&) = delete; template requires (__constructible<_UTypes...>()) && (!__use_other_ctor>()) && (!__dangles<_UTypes...>()) constexpr explicit(!__use_other_ctor>()) tuple(allocator_arg_t __tag, const _Alloc& __a, tuple<_UTypes...>&& __u) : _Inherited(__tag, __a, static_cast<_Tuple_impl<0, _UTypes...>&&>(__u)) { } template requires (__constructible<_UTypes...>()) && (!__use_other_ctor>()) && (__dangles<_UTypes...>()) tuple(allocator_arg_t, const _Alloc&, tuple<_UTypes...>&&) = delete; template requires (__constructible<_UTypes&...>()) && (!__use_other_ctor&>()) && (!__dangles<_UTypes&...>()) constexpr explicit(!__convertible<_UTypes&...>()) tuple(allocator_arg_t __tag, const _Alloc& __a, tuple<_UTypes...>& __u) : _Inherited(__tag, __a, static_cast<_Tuple_impl<0, _UTypes...>&>(__u)) { } template requires (__constructible<_UTypes&...>()) && (!__use_other_ctor&>()) && (__dangles<_UTypes&...>()) tuple(allocator_arg_t, const _Alloc&, tuple<_UTypes...>&) = delete; template requires (__constructible()) && (!__use_other_ctor>()) && (!__dangles()) constexpr explicit(!__convertible()) tuple(allocator_arg_t __tag, const _Alloc& __a, const tuple<_UTypes...>&& __u) : _Inherited(__tag, __a, static_cast&&>(__u)) { } template requires (__constructible()) && (!__use_other_ctor>()) && (__dangles()) tuple(allocator_arg_t, const _Alloc&, const tuple<_UTypes...>&&) = delete; template requires (sizeof...(_Elements) == 2) && (__constructible()) && (!__dangles()) constexpr explicit(!__convertible()) tuple(allocator_arg_t __tag, const _Alloc& __a, const pair<_U1, _U2>& __u) noexcept(__nothrow_constructible()) : _Inherited(__tag, __a, __u.first, __u.second) { } template requires (sizeof...(_Elements) == 2) && (__constructible()) && (__dangles()) tuple(allocator_arg_t, const _Alloc&, const pair<_U1, _U2>&) = delete; template requires (sizeof...(_Elements) == 2) && (__constructible<_U1, _U2>()) && (!__dangles<_U1, _U2>()) constexpr explicit(!__convertible<_U1, _U2>()) tuple(allocator_arg_t __tag, const _Alloc& __a, pair<_U1, _U2>&& __u) noexcept(__nothrow_constructible<_U1, _U2>()) : _Inherited(__tag, __a, std::move(__u.first), std::move(__u.second)) { } template requires (sizeof...(_Elements) == 2) && (__constructible<_U1, _U2>()) && (__dangles<_U1, _U2>()) tuple(allocator_arg_t, const _Alloc&, pair<_U1, _U2>&&) = delete; template requires (sizeof...(_Elements) == 2) && (__constructible<_U1&, _U2&>()) && (!__dangles<_U1&, _U2&>()) constexpr explicit(!__convertible<_U1&, _U2&>()) tuple(allocator_arg_t __tag, const _Alloc& __a, pair<_U1, _U2>& __u) noexcept(__nothrow_constructible<_U1&, _U2&>()) : _Inherited(__tag, __a, __u.first, __u.second) { } template requires (sizeof...(_Elements) == 2) && (__constructible<_U1&, _U2&>()) && (__dangles<_U1&, _U2&>()) tuple(allocator_arg_t, const _Alloc&, pair<_U1, _U2>&) = delete; template requires (sizeof...(_Elements) == 2) && (__constructible()) && (!__dangles()) constexpr explicit(!__convertible()) tuple(allocator_arg_t __tag, const _Alloc& __a, const pair<_U1, _U2>&& __u) noexcept(__nothrow_constructible()) : _Inherited(__tag, __a, std::move(__u.first), std::move(__u.second)) { } template requires (sizeof...(_Elements) == 2) && (__constructible()) && (__dangles()) tuple(allocator_arg_t, const _Alloc&, const pair<_U1, _U2>&&) = delete; template _UTuple> requires (__constructible_from_tuple_like<_UTuple>()) && (!__use_other_ctor<_UTuple>()) && (!__dangles_from_tuple_like<_UTuple>()) constexpr explicit(!__convertible_from_tuple_like<_UTuple>()) tuple(allocator_arg_t __tag, const _Alloc& __a, _UTuple&& __u) : _Inherited(__tuple_like_tag_t{}, __tag, __a, std::forward<_UTuple>(__u), index_sequence_for<_Elements...>{}) { } template _UTuple> requires (__constructible_from_tuple_like<_UTuple>()) && (!__use_other_ctor<_UTuple>()) && (__dangles_from_tuple_like<_UTuple>()) tuple(allocator_arg_t, const _Alloc&, _UTuple&&) = delete; # 1654 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/tuple" 3 private: template static consteval bool __assignable() { if constexpr (sizeof...(_UTypes) == sizeof...(_Elements)) return __and_v...>; else return false; } template static consteval bool __nothrow_assignable() { if constexpr (sizeof...(_UTypes) == sizeof...(_Elements)) return __and_v...>; else return false; } template static consteval bool __const_assignable() { if constexpr (sizeof...(_UTypes) == sizeof...(_Elements)) return __and_v...>; else return false; } template static consteval bool __assignable_from_tuple_like() { return [](index_sequence<_Is...>) { return __assignable(std::declval<_UTuple>()))...>(); }(index_sequence_for<_Elements...>{}); } template static consteval bool __const_assignable_from_tuple_like() { return [](index_sequence<_Is...>) { return __const_assignable(std::declval<_UTuple>()))...>(); }(index_sequence_for<_Elements...>{}); } public: tuple& operator=(const tuple& __u) = delete; constexpr tuple& operator=(const tuple& __u) noexcept(__nothrow_assignable()) requires (__assignable()) { this->_M_assign(__u); return *this; } constexpr tuple& operator=(tuple&& __u) noexcept(__nothrow_assignable<_Elements...>()) requires (__assignable<_Elements...>()) { this->_M_assign(std::move(__u)); return *this; } template requires (__assignable()) constexpr tuple& operator=(const tuple<_UTypes...>& __u) noexcept(__nothrow_assignable()) { this->_M_assign(__u); return *this; } template requires (__assignable<_UTypes...>()) constexpr tuple& operator=(tuple<_UTypes...>&& __u) noexcept(__nothrow_assignable<_UTypes...>()) { this->_M_assign(std::move(__u)); return *this; } constexpr const tuple& operator=(const tuple& __u) const requires (__const_assignable()) { this->_M_assign(__u); return *this; } constexpr const tuple& operator=(tuple&& __u) const requires (__const_assignable<_Elements...>()) { this->_M_assign(std::move(__u)); return *this; } template constexpr const tuple& operator=(const tuple<_UTypes...>& __u) const requires (__const_assignable()) { this->_M_assign(__u); return *this; } template constexpr const tuple& operator=(tuple<_UTypes...>&& __u) const requires (__const_assignable<_UTypes...>()) { this->_M_assign(std::move(__u)); return *this; } template requires (__assignable()) constexpr tuple& operator=(const pair<_U1, _U2>& __u) noexcept(__nothrow_assignable()) { this->_M_head(*this) = __u.first; this->_M_tail(*this)._M_head(*this) = __u.second; return *this; } template requires (__assignable<_U1, _U2>()) constexpr tuple& operator=(pair<_U1, _U2>&& __u) noexcept(__nothrow_assignable<_U1, _U2>()) { this->_M_head(*this) = std::forward<_U1>(__u.first); this->_M_tail(*this)._M_head(*this) = std::forward<_U2>(__u.second); return *this; } template requires (__const_assignable()) constexpr const tuple& operator=(const pair<_U1, _U2>& __u) const { this->_M_head(*this) = __u.first; this->_M_tail(*this)._M_head(*this) = __u.second; return *this; } template requires (__const_assignable<_U1, _U2>()) constexpr const tuple& operator=(pair<_U1, _U2>&& __u) const { this->_M_head(*this) = std::forward<_U1>(__u.first); this->_M_tail(*this)._M_head(*this) = std::forward<_U2>(__u.second); return *this; } template<__eligible_tuple_like _UTuple> requires (__assignable_from_tuple_like<_UTuple>()) constexpr tuple& operator=(_UTuple&& __u) { this->_M_assign(__tuple_like_tag_t{}, std::forward<_UTuple>(__u)); return *this; } template<__eligible_tuple_like _UTuple> requires (__const_assignable_from_tuple_like<_UTuple>()) constexpr const tuple& operator=(_UTuple&& __u) const { this->_M_assign(__tuple_like_tag_t{}, std::forward<_UTuple>(__u)); return *this; } template<__tuple_like _UTuple> requires (!__is_tuple_v<_UTuple>) friend constexpr bool operator==(const tuple& __t, const _UTuple& __u) { static_assert(sizeof...(_Elements) == tuple_size_v<_UTuple>, "tuple objects can only be compared if they have equal sizes."); return [&](index_sequence<_Is...>) { return (bool(std::get<_Is>(__t) == std::get<_Is>(__u)) && ...); }(index_sequence_for<_Elements...>{}); } template<__tuple_like _UTuple, typename = make_index_sequence>> struct __tuple_like_common_comparison_category; template<__tuple_like _UTuple, size_t... _Is> requires requires { typename void_t<__detail::__synth3way_t<_Elements, tuple_element_t<_Is, _UTuple>>...>; } struct __tuple_like_common_comparison_category<_UTuple, index_sequence<_Is...>> { using type = common_comparison_category_t <__detail::__synth3way_t<_Elements, tuple_element_t<_Is, _UTuple>>...>; }; template<__tuple_like _UTuple> requires (!__is_tuple_v<_UTuple>) friend constexpr typename __tuple_like_common_comparison_category<_UTuple>::type operator<=>(const tuple& __t, const _UTuple& __u) { using _Cat = typename __tuple_like_common_comparison_category<_UTuple>::type; return std::__tuple_cmp<_Cat>(__t, __u, index_sequence_for<_Elements...>()); } # 1947 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/tuple" 3 constexpr void swap(tuple& __in) noexcept(__and_<__is_nothrow_swappable<_Elements>...>::value) { _Inherited::_M_swap(__in); } # 1960 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/tuple" 3 constexpr void swap(const tuple& __in) const noexcept(__and_v<__is_nothrow_swappable...>) requires (is_swappable_v && ...) { _Inherited::_M_swap(__in); } }; template tuple(_UTypes...) -> tuple<_UTypes...>; template tuple(pair<_T1, _T2>) -> tuple<_T1, _T2>; template tuple(allocator_arg_t, _Alloc, _UTypes...) -> tuple<_UTypes...>; template tuple(allocator_arg_t, _Alloc, pair<_T1, _T2>) -> tuple<_T1, _T2>; template tuple(allocator_arg_t, _Alloc, tuple<_UTypes...>) -> tuple<_UTypes...>; template<> class tuple<> { public: constexpr void swap(tuple&) noexcept { } constexpr void swap(const tuple&) const noexcept { } tuple() = default; template constexpr tuple(allocator_arg_t, const _Alloc&) noexcept { } template constexpr tuple(allocator_arg_t, const _Alloc&, const tuple&) noexcept { } }; # 2402 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/tuple" 3 template struct tuple_size> : public integral_constant { }; template inline constexpr size_t tuple_size_v> = sizeof...(_Types); template inline constexpr size_t tuple_size_v> = sizeof...(_Types); template struct tuple_element<__i, tuple<_Types...>> { static_assert(__i < sizeof...(_Types), "tuple index must be in range"); using type = typename _Nth_type<__i, _Types...>::type; }; template constexpr _Head& __get_helper(_Tuple_impl<__i, _Head, _Tail...>& __t) noexcept { return _Tuple_impl<__i, _Head, _Tail...>::_M_head(__t); } template constexpr const _Head& __get_helper(const _Tuple_impl<__i, _Head, _Tail...>& __t) noexcept { return _Tuple_impl<__i, _Head, _Tail...>::_M_head(__t); } template __enable_if_t<(__i >= sizeof...(_Types))> __get_helper(const tuple<_Types...>&) = delete; template constexpr __tuple_element_t<__i, tuple<_Elements...>>& get(tuple<_Elements...>& __t) noexcept { return std::__get_helper<__i>(__t); } template constexpr const __tuple_element_t<__i, tuple<_Elements...>>& get(const tuple<_Elements...>& __t) noexcept { return std::__get_helper<__i>(__t); } template constexpr __tuple_element_t<__i, tuple<_Elements...>>&& get(tuple<_Elements...>&& __t) noexcept { typedef __tuple_element_t<__i, tuple<_Elements...>> __element_type; return std::forward<__element_type>(std::__get_helper<__i>(__t)); } template constexpr const __tuple_element_t<__i, tuple<_Elements...>>&& get(const tuple<_Elements...>&& __t) noexcept { typedef __tuple_element_t<__i, tuple<_Elements...>> __element_type; return std::forward(std::__get_helper<__i>(__t)); } template constexpr __enable_if_t<(__i >= sizeof...(_Elements))> get(const tuple<_Elements...>&) = delete; template constexpr _Tp& get(tuple<_Types...>& __t) noexcept { constexpr size_t __idx = __find_uniq_type_in_pack<_Tp, _Types...>(); static_assert(__idx < sizeof...(_Types), "the type T in std::get must occur exactly once in the tuple"); return std::__get_helper<__idx>(__t); } template constexpr _Tp&& get(tuple<_Types...>&& __t) noexcept { constexpr size_t __idx = __find_uniq_type_in_pack<_Tp, _Types...>(); static_assert(__idx < sizeof...(_Types), "the type T in std::get must occur exactly once in the tuple"); return std::forward<_Tp>(std::__get_helper<__idx>(__t)); } template constexpr const _Tp& get(const tuple<_Types...>& __t) noexcept { constexpr size_t __idx = __find_uniq_type_in_pack<_Tp, _Types...>(); static_assert(__idx < sizeof...(_Types), "the type T in std::get must occur exactly once in the tuple"); return std::__get_helper<__idx>(__t); } template constexpr const _Tp&& get(const tuple<_Types...>&& __t) noexcept { constexpr size_t __idx = __find_uniq_type_in_pack<_Tp, _Types...>(); static_assert(__idx < sizeof...(_Types), "the type T in std::get must occur exactly once in the tuple"); return std::forward(std::__get_helper<__idx>(__t)); } template struct __tuple_compare { static constexpr bool __eq(const _Tp& __t, const _Up& __u) { return bool(std::get<__i>(__t) == std::get<__i>(__u)) && __tuple_compare<_Tp, _Up, __i + 1, __size>::__eq(__t, __u); } static constexpr bool __less(const _Tp& __t, const _Up& __u) { return bool(std::get<__i>(__t) < std::get<__i>(__u)) || (!bool(std::get<__i>(__u) < std::get<__i>(__t)) && __tuple_compare<_Tp, _Up, __i + 1, __size>::__less(__t, __u)); } }; template struct __tuple_compare<_Tp, _Up, __size, __size> { static constexpr bool __eq(const _Tp&, const _Up&) { return true; } static constexpr bool __less(const _Tp&, const _Up&) { return false; } }; template constexpr bool operator==(const tuple<_TElements...>& __t, const tuple<_UElements...>& __u) { static_assert(sizeof...(_TElements) == sizeof...(_UElements), "tuple objects can only be compared if they have equal sizes."); using __compare = __tuple_compare, tuple<_UElements...>, 0, sizeof...(_TElements)>; return __compare::__eq(__t, __u); } template constexpr _Cat __tuple_cmp(const _Tp&, const _Up&, index_sequence<>) { return _Cat::equivalent; } template constexpr _Cat __tuple_cmp(const _Tp& __t, const _Up& __u, index_sequence<_Idx0, _Idxs...>) { auto __c = __detail::__synth3way(std::get<_Idx0>(__t), std::get<_Idx0>(__u)); if (__c != 0) return __c; return std::__tuple_cmp<_Cat>(__t, __u, index_sequence<_Idxs...>()); } template constexpr common_comparison_category_t<__detail::__synth3way_t<_Tps, _Ups>...> operator<=>(const tuple<_Tps...>& __t, const tuple<_Ups...>& __u) { using _Cat = common_comparison_category_t<__detail::__synth3way_t<_Tps, _Ups>...>; return std::__tuple_cmp<_Cat>(__t, __u, index_sequence_for<_Tps...>()); } # 2636 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/tuple" 3 template constexpr tuple::__type...> make_tuple(_Elements&&... __args) { typedef tuple::__type...> __result_type; return __result_type(std::forward<_Elements>(__args)...); } template constexpr tuple<_Elements&&...> forward_as_tuple(_Elements&&... __args) noexcept { return tuple<_Elements&&...>(std::forward<_Elements>(__args)...); } template struct __make_tuple_impl; template struct __make_tuple_impl<_Idx, tuple<_Tp...>, _Tuple, _Nm> : __make_tuple_impl<_Idx + 1, tuple<_Tp..., __tuple_element_t<_Idx, _Tuple>>, _Tuple, _Nm> { }; template struct __make_tuple_impl<_Nm, tuple<_Tp...>, _Tuple, _Nm> { typedef tuple<_Tp...> __type; }; template struct __do_make_tuple : __make_tuple_impl<0, tuple<>, _Tuple, tuple_size<_Tuple>::value> { }; template struct __make_tuple : public __do_make_tuple<__remove_cvref_t<_Tuple>> { }; template struct __combine_tuples; template<> struct __combine_tuples<> { typedef tuple<> __type; }; template struct __combine_tuples> { typedef tuple<_Ts...> __type; }; template struct __combine_tuples, tuple<_T2s...>, _Rem...> { typedef typename __combine_tuples, _Rem...>::__type __type; }; template struct __tuple_cat_result { typedef typename __combine_tuples ::__type...>::__type __type; }; template struct __make_1st_indices; template<> struct __make_1st_indices<> { typedef _Index_tuple<> __type; }; template struct __make_1st_indices<_Tp, _Tpls...> { typedef typename _Build_index_tuple::type>::value>::__type __type; }; template struct __tuple_concater; template struct __tuple_concater<_Ret, _Index_tuple<_Is...>, _Tp, _Tpls...> { template static constexpr _Ret _S_do(_Tp&& __tp, _Tpls&&... __tps, _Us&&... __us) { typedef typename __make_1st_indices<_Tpls...>::__type __idx; typedef __tuple_concater<_Ret, __idx, _Tpls...> __next; return __next::_S_do(std::forward<_Tpls>(__tps)..., std::forward<_Us>(__us)..., std::get<_Is>(std::forward<_Tp>(__tp))...); } }; template struct __tuple_concater<_Ret, _Index_tuple<>> { template static constexpr _Ret _S_do(_Us&&... __us) { return _Ret(std::forward<_Us>(__us)...); } }; template struct __is_tuple_like_impl> : true_type { }; template<__tuple_like... _Tpls> constexpr auto tuple_cat(_Tpls&&... __tpls) -> typename __tuple_cat_result<_Tpls...>::__type { typedef typename __tuple_cat_result<_Tpls...>::__type __ret; typedef typename __make_1st_indices<_Tpls...>::__type __idx; typedef __tuple_concater<__ret, __idx, _Tpls...> __concater; return __concater::_S_do(std::forward<_Tpls>(__tpls)...); } template constexpr tuple<_Elements&...> tie(_Elements&... __args) noexcept { return tuple<_Elements&...>(__args...); } template constexpr inline typename enable_if<__and_<__is_swappable<_Elements>...>::value >::type swap(tuple<_Elements...>& __x, tuple<_Elements...>& __y) noexcept(noexcept(__x.swap(__y))) { __x.swap(__y); } template requires (is_swappable_v && ...) constexpr void swap(const tuple<_Elements...>& __x, const tuple<_Elements...>& __y) noexcept(noexcept(__x.swap(__y))) { __x.swap(__y); } template constexpr typename enable_if...>::value>::type swap(tuple<_Elements...>&, tuple<_Elements...>&) = delete; struct _Swallow_assign { template constexpr const _Swallow_assign& operator=(const _Tp&) const { return *this; } }; # 2853 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/tuple" 3 inline constexpr _Swallow_assign ignore{}; template struct uses_allocator, _Alloc> : true_type { }; # 2868 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/tuple" 3 template template constexpr inline pair<_T1, _T2>:: pair(piecewise_construct_t, tuple<_Args1...> __first, tuple<_Args2...> __second) : pair(__first, __second, typename _Build_index_tuple::__type(), typename _Build_index_tuple::__type()) { } template template constexpr inline pair<_T1, _T2>:: pair(tuple<_Args1...>& __tuple1, tuple<_Args2...>& __tuple2, _Index_tuple<_Indexes1...>, _Index_tuple<_Indexes2...>) : first(std::forward<_Args1>(std::get<_Indexes1>(__tuple1))...), second(std::forward<_Args2>(std::get<_Indexes2>(__tuple2))...) { } template class _Trait, typename _Tp, typename _Tuple> inline constexpr bool __unpack_std_tuple = false; template class _Trait, typename _Tp, typename... _Up> inline constexpr bool __unpack_std_tuple<_Trait, _Tp, tuple<_Up...>> = _Trait<_Tp, _Up...>::value; template class _Trait, typename _Tp, typename... _Up> inline constexpr bool __unpack_std_tuple<_Trait, _Tp, tuple<_Up...>&> = _Trait<_Tp, _Up&...>::value; template class _Trait, typename _Tp, typename... _Up> inline constexpr bool __unpack_std_tuple<_Trait, _Tp, const tuple<_Up...>> = _Trait<_Tp, const _Up...>::value; template class _Trait, typename _Tp, typename... _Up> inline constexpr bool __unpack_std_tuple<_Trait, _Tp, const tuple<_Up...>&> = _Trait<_Tp, const _Up&...>::value; template constexpr decltype(auto) __apply_impl(_Fn&& __f, _Tuple&& __t, index_sequence<_Idx...>) { return std::__invoke(std::forward<_Fn>(__f), std::get<_Idx>(std::forward<_Tuple>(__t))...); } template constexpr decltype(auto) apply(_Fn&& __f, _Tuple&& __t) noexcept(__unpack_std_tuple) { using _Indices = make_index_sequence>>; return std::__apply_impl(std::forward<_Fn>(__f), std::forward<_Tuple>(__t), _Indices{}); } template constexpr _Tp __make_from_tuple_impl(_Tuple&& __t, index_sequence<_Idx...>) { return _Tp(std::get<_Idx>(std::forward<_Tuple>(__t))...); } template constexpr _Tp make_from_tuple(_Tuple&& __t) noexcept(__unpack_std_tuple) { constexpr size_t __n = tuple_size_v>; if constexpr (__n == 1) { using _Elt = decltype(std::get<0>(std::declval<_Tuple>())); static_assert(!__reference_constructs_from_temporary(_Tp, _Elt)); } return __make_from_tuple_impl<_Tp>(std::forward<_Tuple>(__t), make_index_sequence<__n>{}); } template<__tuple_like _TTuple, __tuple_like _UTuple, template class _TQual, template class _UQual, typename = make_index_sequence>> struct __tuple_like_common_reference; template<__tuple_like _TTuple, __tuple_like _UTuple, template class _TQual, template class _UQual, size_t... _Is> requires requires { typename tuple>, _UQual>>...>; } struct __tuple_like_common_reference<_TTuple, _UTuple, _TQual, _UQual, index_sequence<_Is...>> { using type = tuple>, _UQual>>...>; }; template<__tuple_like _TTuple, __tuple_like _UTuple, template class _TQual, template class _UQual> requires (__is_tuple_v<_TTuple> || __is_tuple_v<_UTuple>) && is_same_v<_TTuple, decay_t<_TTuple>> && is_same_v<_UTuple, decay_t<_UTuple>> && (tuple_size_v<_TTuple> == tuple_size_v<_UTuple>) && requires { typename __tuple_like_common_reference<_TTuple, _UTuple, _TQual, _UQual>::type; } struct basic_common_reference<_TTuple, _UTuple, _TQual, _UQual> { using type = typename __tuple_like_common_reference<_TTuple, _UTuple, _TQual, _UQual>::type; }; template<__tuple_like _TTuple, __tuple_like _UTuple, typename = make_index_sequence>> struct __tuple_like_common_type; template<__tuple_like _TTuple, __tuple_like _UTuple, size_t... _Is> requires requires { typename tuple, tuple_element_t<_Is, _UTuple>>...>; } struct __tuple_like_common_type<_TTuple, _UTuple, index_sequence<_Is...>> { using type = tuple, tuple_element_t<_Is, _UTuple>>...>; }; template<__tuple_like _TTuple, __tuple_like _UTuple> requires (__is_tuple_v<_TTuple> || __is_tuple_v<_UTuple>) && is_same_v<_TTuple, decay_t<_TTuple>> && is_same_v<_UTuple, decay_t<_UTuple>> && (tuple_size_v<_TTuple> == tuple_size_v<_UTuple>) && requires { typename __tuple_like_common_type<_TTuple, _UTuple>::type; } struct common_type<_TTuple, _UTuple> { using type = typename __tuple_like_common_type<_TTuple, _UTuple>::type; }; } # 35 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/hashtable_policy.h" 2 3 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/functional_hash.h" 1 3 # 34 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/functional_hash.h" 3 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/hash_bytes.h" 1 3 # 34 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/hash_bytes.h" 3 namespace std { size_t _Hash_bytes(const void* __ptr, size_t __len, size_t __seed); size_t _Fnv_hash_bytes(const void* __ptr, size_t __len, size_t __seed); } # 37 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/functional_hash.h" 2 3 namespace std __attribute__ ((__visibility__ ("default"))) { # 50 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/functional_hash.h" 3 template struct __hash_base { typedef _Result result_type [[__deprecated__]]; typedef _Arg argument_type [[__deprecated__]]; }; template struct hash; template struct __poison_hash { static constexpr bool __enable_hash_call = false; private: __poison_hash(__poison_hash&&); ~__poison_hash(); }; template struct __poison_hash<_Tp, __void_t()(declval<_Tp>()))>> { static constexpr bool __enable_hash_call = true; }; template::value> struct __hash_enum { private: __hash_enum(__hash_enum&&); ~__hash_enum(); }; template struct __hash_enum<_Tp, true> : public __hash_base { size_t operator()(_Tp __val) const noexcept { using __type = typename underlying_type<_Tp>::type; return hash<__type>{}(static_cast<__type>(__val)); } }; template struct hash : __hash_enum<_Tp> { }; template struct hash<_Tp*> : public __hash_base { size_t operator()(_Tp* __p) const noexcept { return reinterpret_cast(__p); } }; # 125 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/functional_hash.h" 3 template<> struct hash : public __hash_base { size_t operator()(bool __val) const noexcept { return static_cast(__val); } }; template<> struct hash : public __hash_base { size_t operator()(char __val) const noexcept { return static_cast(__val); } }; template<> struct hash : public __hash_base { size_t operator()(signed char __val) const noexcept { return static_cast(__val); } }; template<> struct hash : public __hash_base { size_t operator()(unsigned char __val) const noexcept { return static_cast(__val); } }; template<> struct hash : public __hash_base { size_t operator()(wchar_t __val) const noexcept { return static_cast(__val); } }; template<> struct hash : public __hash_base { size_t operator()(char8_t __val) const noexcept { return static_cast(__val); } }; template<> struct hash : public __hash_base { size_t operator()(char16_t __val) const noexcept { return static_cast(__val); } }; template<> struct hash : public __hash_base { size_t operator()(char32_t __val) const noexcept { return static_cast(__val); } }; template<> struct hash : public __hash_base { size_t operator()(short __val) const noexcept { return static_cast(__val); } }; template<> struct hash : public __hash_base { size_t operator()(int __val) const noexcept { return static_cast(__val); } }; template<> struct hash : public __hash_base { size_t operator()(long __val) const noexcept { return static_cast(__val); } }; template<> struct hash : public __hash_base { size_t operator()(long long __val) const noexcept { return static_cast(__val); } }; template<> struct hash : public __hash_base { size_t operator()(unsigned short __val) const noexcept { return static_cast(__val); } }; template<> struct hash : public __hash_base { size_t operator()(unsigned int __val) const noexcept { return static_cast(__val); } }; template<> struct hash : public __hash_base { size_t operator()(unsigned long __val) const noexcept { return static_cast(__val); } }; template<> struct hash : public __hash_base { size_t operator()(unsigned long long __val) const noexcept { return static_cast(__val); } }; __extension__ template<> struct hash<__int128> : public __hash_base { size_t operator()(__int128 __val) const noexcept { return static_cast(__val); } }; __extension__ template<> struct hash<__int128 unsigned> : public __hash_base { size_t operator()(__int128 unsigned __val) const noexcept { return static_cast(__val); } }; # 201 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/functional_hash.h" 3 struct _Hash_impl { static size_t hash(const void* __ptr, size_t __clength, size_t __seed = static_cast(0xc70f6907UL)) { return _Hash_bytes(__ptr, __clength, __seed); } template static size_t hash(const _Tp& __val) { return hash(&__val, sizeof(__val)); } template static size_t __hash_combine(const _Tp& __val, size_t __hash) { return hash(&__val, sizeof(__val), __hash); } }; struct _Fnv_hash_impl { static size_t hash(const void* __ptr, size_t __clength, size_t __seed = static_cast(2166136261UL)) { return _Fnv_hash_bytes(__ptr, __clength, __seed); } template static size_t hash(const _Tp& __val) { return hash(&__val, sizeof(__val)); } template static size_t __hash_combine(const _Tp& __val, size_t __hash) { return hash(&__val, sizeof(__val), __hash); } }; template<> struct hash : public __hash_base { size_t operator()(float __val) const noexcept { return __val != 0.0f ? std::_Hash_impl::hash(__val) : 0; } }; template<> struct hash : public __hash_base { size_t operator()(double __val) const noexcept { return __val != 0.0 ? std::_Hash_impl::hash(__val) : 0; } }; template<> struct hash : public __hash_base { __attribute__ ((__pure__)) size_t operator()(long double __val) const noexcept; }; template<> struct hash : public __hash_base { size_t operator()(nullptr_t) const noexcept { return 0; } }; # 294 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/functional_hash.h" 3 template struct __is_fast_hash : public std::true_type { }; template<> struct __is_fast_hash> : public std::false_type { }; } # 36 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/hashtable_policy.h" 2 3 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_algobase.h" 1 3 # 60 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_algobase.h" 3 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/functexcept.h" 1 3 # 42 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/functexcept.h" 3 namespace std __attribute__ ((__visibility__ ("default"))) { void __throw_bad_exception(void) __attribute__((__noreturn__)); void __throw_bad_alloc(void) __attribute__((__noreturn__)); void __throw_bad_array_new_length(void) __attribute__((__noreturn__)); void __throw_bad_cast(void) __attribute__((__noreturn__,__cold__)); void __throw_bad_typeid(void) __attribute__((__noreturn__,__cold__)); void __throw_logic_error(const char*) __attribute__((__noreturn__,__cold__)); void __throw_domain_error(const char*) __attribute__((__noreturn__,__cold__)); void __throw_invalid_argument(const char*) __attribute__((__noreturn__,__cold__)); void __throw_length_error(const char*) __attribute__((__noreturn__,__cold__)); void __throw_out_of_range(const char*) __attribute__((__noreturn__,__cold__)); void __throw_out_of_range_fmt(const char*, ...) __attribute__((__noreturn__,__cold__)) __attribute__((__format__(__gnu_printf__, 1, 2))); void __throw_runtime_error(const char*) __attribute__((__noreturn__,__cold__)); void __throw_range_error(const char*) __attribute__((__noreturn__,__cold__)); void __throw_overflow_error(const char*) __attribute__((__noreturn__,__cold__)); void __throw_underflow_error(const char*) __attribute__((__noreturn__,__cold__)); void __throw_ios_failure(const char*) __attribute__((__noreturn__,__cold__)); void __throw_ios_failure(const char*, int) __attribute__((__noreturn__,__cold__)); void __throw_system_error(int) __attribute__((__noreturn__,__cold__)); void __throw_future_error(int) __attribute__((__noreturn__,__cold__)); void __throw_bad_function_call() __attribute__((__noreturn__,__cold__)); # 141 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/functexcept.h" 3 } # 61 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_algobase.h" 2 3 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/debug/debug.h" 1 3 # 48 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/debug/debug.h" 3 namespace std { namespace __debug { } } namespace __gnu_debug { using namespace std::__debug; template struct _Safe_iterator; } # 70 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_algobase.h" 2 3 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/predefined_ops.h" 1 3 # 35 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/predefined_ops.h" 3 namespace __gnu_cxx { namespace __ops { struct _Iter_less_iter { template constexpr bool operator()(_Iterator1 __it1, _Iterator2 __it2) const { return *__it1 < *__it2; } }; constexpr inline _Iter_less_iter __iter_less_iter() { return _Iter_less_iter(); } struct _Iter_less_val { constexpr _Iter_less_val() = default; constexpr explicit _Iter_less_val(_Iter_less_iter) { } template constexpr bool operator()(_Iterator __it, _Value& __val) const { return *__it < __val; } }; constexpr inline _Iter_less_val __iter_less_val() { return _Iter_less_val(); } constexpr inline _Iter_less_val __iter_comp_val(_Iter_less_iter) { return _Iter_less_val(); } struct _Val_less_iter { constexpr _Val_less_iter() = default; constexpr explicit _Val_less_iter(_Iter_less_iter) { } template constexpr bool operator()(_Value& __val, _Iterator __it) const { return __val < *__it; } }; constexpr inline _Val_less_iter __val_less_iter() { return _Val_less_iter(); } constexpr inline _Val_less_iter __val_comp_iter(_Iter_less_iter) { return _Val_less_iter(); } struct _Iter_equal_to_iter { template constexpr bool operator()(_Iterator1 __it1, _Iterator2 __it2) const { return *__it1 == *__it2; } }; constexpr inline _Iter_equal_to_iter __iter_equal_to_iter() { return _Iter_equal_to_iter(); } struct _Iter_equal_to_val { template constexpr bool operator()(_Iterator __it, _Value& __val) const { return *__it == __val; } }; constexpr inline _Iter_equal_to_val __iter_equal_to_val() { return _Iter_equal_to_val(); } constexpr inline _Iter_equal_to_val __iter_comp_val(_Iter_equal_to_iter) { return _Iter_equal_to_val(); } template struct _Iter_comp_iter { _Compare _M_comp; explicit constexpr _Iter_comp_iter(_Compare __comp) : _M_comp(std::move(__comp)) { } template constexpr bool operator()(_Iterator1 __it1, _Iterator2 __it2) { return bool(_M_comp(*__it1, *__it2)); } }; template constexpr inline _Iter_comp_iter<_Compare> __iter_comp_iter(_Compare __comp) { return _Iter_comp_iter<_Compare>(std::move(__comp)); } template struct _Iter_comp_val { _Compare _M_comp; constexpr explicit _Iter_comp_val(_Compare __comp) : _M_comp(std::move(__comp)) { } constexpr explicit _Iter_comp_val(const _Iter_comp_iter<_Compare>& __comp) : _M_comp(__comp._M_comp) { } constexpr explicit _Iter_comp_val(_Iter_comp_iter<_Compare>&& __comp) : _M_comp(std::move(__comp._M_comp)) { } template constexpr bool operator()(_Iterator __it, _Value& __val) { return bool(_M_comp(*__it, __val)); } }; template constexpr inline _Iter_comp_val<_Compare> __iter_comp_val(_Compare __comp) { return _Iter_comp_val<_Compare>(std::move(__comp)); } template constexpr inline _Iter_comp_val<_Compare> __iter_comp_val(_Iter_comp_iter<_Compare> __comp) { return _Iter_comp_val<_Compare>(std::move(__comp)); } template struct _Val_comp_iter { _Compare _M_comp; constexpr explicit _Val_comp_iter(_Compare __comp) : _M_comp(std::move(__comp)) { } constexpr explicit _Val_comp_iter(const _Iter_comp_iter<_Compare>& __comp) : _M_comp(__comp._M_comp) { } constexpr explicit _Val_comp_iter(_Iter_comp_iter<_Compare>&& __comp) : _M_comp(std::move(__comp._M_comp)) { } template constexpr bool operator()(_Value& __val, _Iterator __it) { return bool(_M_comp(__val, *__it)); } }; template constexpr inline _Val_comp_iter<_Compare> __val_comp_iter(_Compare __comp) { return _Val_comp_iter<_Compare>(std::move(__comp)); } template constexpr inline _Val_comp_iter<_Compare> __val_comp_iter(_Iter_comp_iter<_Compare> __comp) { return _Val_comp_iter<_Compare>(std::move(__comp)); } template struct _Iter_equals_val { _Value& _M_value; constexpr explicit _Iter_equals_val(_Value& __value) : _M_value(__value) { } template constexpr bool operator()(_Iterator __it) { return *__it == _M_value; } }; template constexpr inline _Iter_equals_val<_Value> __iter_equals_val(_Value& __val) { return _Iter_equals_val<_Value>(__val); } template struct _Iter_equals_iter { _Iterator1 _M_it1; constexpr explicit _Iter_equals_iter(_Iterator1 __it1) : _M_it1(__it1) { } template constexpr bool operator()(_Iterator2 __it2) { return *__it2 == *_M_it1; } }; template constexpr inline _Iter_equals_iter<_Iterator> __iter_comp_iter(_Iter_equal_to_iter, _Iterator __it) { return _Iter_equals_iter<_Iterator>(__it); } template struct _Iter_pred { _Predicate _M_pred; constexpr explicit _Iter_pred(_Predicate __pred) : _M_pred(std::move(__pred)) { } template constexpr bool operator()(_Iterator __it) { return bool(_M_pred(*__it)); } }; template constexpr inline _Iter_pred<_Predicate> __pred_iter(_Predicate __pred) { return _Iter_pred<_Predicate>(std::move(__pred)); } template struct _Iter_comp_to_val { _Compare _M_comp; _Value& _M_value; constexpr _Iter_comp_to_val(_Compare __comp, _Value& __value) : _M_comp(std::move(__comp)), _M_value(__value) { } template constexpr bool operator()(_Iterator __it) { return bool(_M_comp(*__it, _M_value)); } }; template _Iter_comp_to_val<_Compare, _Value> constexpr __iter_comp_val(_Compare __comp, _Value &__val) { return _Iter_comp_to_val<_Compare, _Value>(std::move(__comp), __val); } template struct _Iter_comp_to_iter { _Compare _M_comp; _Iterator1 _M_it1; constexpr _Iter_comp_to_iter(_Compare __comp, _Iterator1 __it1) : _M_comp(std::move(__comp)), _M_it1(__it1) { } template constexpr bool operator()(_Iterator2 __it2) { return bool(_M_comp(*__it2, *_M_it1)); } }; template constexpr inline _Iter_comp_to_iter<_Compare, _Iterator> __iter_comp_iter(_Iter_comp_iter<_Compare> __comp, _Iterator __it) { return _Iter_comp_to_iter<_Compare, _Iterator>( std::move(__comp._M_comp), __it); } template struct _Iter_negate { _Predicate _M_pred; constexpr explicit _Iter_negate(_Predicate __pred) : _M_pred(std::move(__pred)) { } template constexpr bool operator()(_Iterator __it) { return !bool(_M_pred(*__it)); } }; template constexpr inline _Iter_negate<_Predicate> __negate(_Iter_pred<_Predicate> __pred) { return _Iter_negate<_Predicate>(std::move(__pred._M_pred)); } } } # 72 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_algobase.h" 2 3 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bit" 1 3 # 33 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bit" 3 # 61 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bit" 3 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/version.h" 1 3 # 48 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/version.h" 3 # 62 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bit" 2 3 namespace std __attribute__ ((__visibility__ ("default"))) { # 85 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bit" 3 template [[nodiscard]] constexpr _To bit_cast(const _From& __from) noexcept requires (sizeof(_To) == sizeof(_From)) && is_trivially_copyable_v<_To> && is_trivially_copyable_v<_From> { return __builtin_bit_cast(_To, __from); } # 107 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bit" 3 template [[nodiscard]] constexpr _Tp byteswap(_Tp __value) noexcept { if constexpr (sizeof(_Tp) == 1) return __value; if !consteval { if constexpr (sizeof(_Tp) == 2) return __builtin_bswap16(__value); if constexpr (sizeof(_Tp) == 4) return __builtin_bswap32(__value); if constexpr (sizeof(_Tp) == 8) return __builtin_bswap64(__value); if constexpr (sizeof(_Tp) == 16) return (__builtin_bswap64(__value >> 64) | (static_cast<_Tp>(__builtin_bswap64(__value)) << 64)); } using _Up = typename __make_unsigned<__remove_cv_t<_Tp>>::__type; size_t __diff = 8 * (sizeof(_Tp) - 1); _Up __mask1 = static_cast(~0); _Up __mask2 = __mask1 << __diff; _Up __val = __value; for (size_t __i = 0; __i < sizeof(_Tp) / 2; ++__i) { _Up __byte1 = __val & __mask1; _Up __byte2 = __val & __mask2; __val = (__val ^ __byte1 ^ __byte2 ^ (__byte1 << __diff) ^ (__byte2 >> __diff)); __mask1 <<= 8; __mask2 >>= 8; __diff -= 2 * 8; } return __val; } template constexpr _Tp __rotl(_Tp __x, int __s) noexcept { constexpr auto _Nd = __gnu_cxx::__int_traits<_Tp>::__digits; if constexpr ((_Nd & (_Nd - 1)) == 0) { constexpr unsigned __uNd = _Nd; const unsigned __r = __s; return (__x << (__r % __uNd)) | (__x >> ((-__r) % __uNd)); } const int __r = __s % _Nd; if (__r == 0) return __x; else if (__r > 0) return (__x << __r) | (__x >> ((_Nd - __r) % _Nd)); else return (__x >> -__r) | (__x << ((_Nd + __r) % _Nd)); } template constexpr _Tp __rotr(_Tp __x, int __s) noexcept { constexpr auto _Nd = __gnu_cxx::__int_traits<_Tp>::__digits; if constexpr ((_Nd & (_Nd - 1)) == 0) { constexpr unsigned __uNd = _Nd; const unsigned __r = __s; return (__x >> (__r % __uNd)) | (__x << ((-__r) % __uNd)); } const int __r = __s % _Nd; if (__r == 0) return __x; else if (__r > 0) return (__x >> __r) | (__x << ((_Nd - __r) % _Nd)); else return (__x << -__r) | (__x >> ((_Nd + __r) % _Nd)); } template constexpr int __countl_zero(_Tp __x) noexcept { using __gnu_cxx::__int_traits; constexpr auto _Nd = __int_traits<_Tp>::__digits; if (__x == 0) return _Nd; constexpr auto _Nd_ull = __int_traits::__digits; constexpr auto _Nd_ul = __int_traits::__digits; constexpr auto _Nd_u = __int_traits::__digits; if constexpr (_Nd <= _Nd_u) { constexpr int __diff = _Nd_u - _Nd; return __builtin_clz(__x) - __diff; } else if constexpr (_Nd <= _Nd_ul) { constexpr int __diff = _Nd_ul - _Nd; return __builtin_clzl(__x) - __diff; } else if constexpr (_Nd <= _Nd_ull) { constexpr int __diff = _Nd_ull - _Nd; return __builtin_clzll(__x) - __diff; } else { static_assert(_Nd <= (2 * _Nd_ull), "Maximum supported integer size is 128-bit"); unsigned long long __high = __x >> _Nd_ull; if (__high != 0) { constexpr int __diff = (2 * _Nd_ull) - _Nd; return __builtin_clzll(__high) - __diff; } constexpr auto __max_ull = __int_traits::__max; unsigned long long __low = __x & __max_ull; return (_Nd - _Nd_ull) + __builtin_clzll(__low); } } template constexpr int __countl_one(_Tp __x) noexcept { return std::__countl_zero<_Tp>((_Tp)~__x); } template constexpr int __countr_zero(_Tp __x) noexcept { using __gnu_cxx::__int_traits; constexpr auto _Nd = __int_traits<_Tp>::__digits; if (__x == 0) return _Nd; constexpr auto _Nd_ull = __int_traits::__digits; constexpr auto _Nd_ul = __int_traits::__digits; constexpr auto _Nd_u = __int_traits::__digits; if constexpr (_Nd <= _Nd_u) return __builtin_ctz(__x); else if constexpr (_Nd <= _Nd_ul) return __builtin_ctzl(__x); else if constexpr (_Nd <= _Nd_ull) return __builtin_ctzll(__x); else { static_assert(_Nd <= (2 * _Nd_ull), "Maximum supported integer size is 128-bit"); constexpr auto __max_ull = __int_traits::__max; unsigned long long __low = __x & __max_ull; if (__low != 0) return __builtin_ctzll(__low); unsigned long long __high = __x >> _Nd_ull; return __builtin_ctzll(__high) + _Nd_ull; } } template constexpr int __countr_one(_Tp __x) noexcept { return std::__countr_zero((_Tp)~__x); } template constexpr int __popcount(_Tp __x) noexcept { using __gnu_cxx::__int_traits; constexpr auto _Nd = __int_traits<_Tp>::__digits; constexpr auto _Nd_ull = __int_traits::__digits; constexpr auto _Nd_ul = __int_traits::__digits; constexpr auto _Nd_u = __int_traits::__digits; if constexpr (_Nd <= _Nd_u) return __builtin_popcount(__x); else if constexpr (_Nd <= _Nd_ul) return __builtin_popcountl(__x); else if constexpr (_Nd <= _Nd_ull) return __builtin_popcountll(__x); else { static_assert(_Nd <= (2 * _Nd_ull), "Maximum supported integer size is 128-bit"); constexpr auto __max_ull = __int_traits::__max; unsigned long long __low = __x & __max_ull; unsigned long long __high = __x >> _Nd_ull; return __builtin_popcountll(__low) + __builtin_popcountll(__high); } } template constexpr bool __has_single_bit(_Tp __x) noexcept { return std::__popcount(__x) == 1; } template constexpr _Tp __bit_ceil(_Tp __x) noexcept { using __gnu_cxx::__int_traits; constexpr auto _Nd = __int_traits<_Tp>::__digits; if (__x == 0 || __x == 1) return 1; auto __shift_exponent = _Nd - std::__countl_zero((_Tp)(__x - 1u)); if (!std::__is_constant_evaluated()) { do { if (std::__is_constant_evaluated()) if (__builtin_expect(!bool(__shift_exponent != __int_traits<_Tp>::__digits), false)) std::__glibcxx_assert_fail(); } while (false); } using __promoted_type = decltype(__x << 1); if constexpr (!is_same<__promoted_type, _Tp>::value) { const int __extra_exp = sizeof(__promoted_type) / sizeof(_Tp) / 2; __shift_exponent |= (__shift_exponent & _Nd) << __extra_exp; } return (_Tp)1u << __shift_exponent; } template constexpr _Tp __bit_floor(_Tp __x) noexcept { constexpr auto _Nd = __gnu_cxx::__int_traits<_Tp>::__digits; if (__x == 0) return 0; return (_Tp)1u << (_Nd - std::__countl_zero((_Tp)(__x >> 1))); } template constexpr int __bit_width(_Tp __x) noexcept { constexpr auto _Nd = __gnu_cxx::__int_traits<_Tp>::__digits; return _Nd - std::__countl_zero(__x); } template concept __unsigned_integer = __is_unsigned_integer<_Tp>::value; template<__unsigned_integer _Tp> [[nodiscard]] constexpr _Tp rotl(_Tp __x, int __s) noexcept { return std::__rotl(__x, __s); } template<__unsigned_integer _Tp> [[nodiscard]] constexpr _Tp rotr(_Tp __x, int __s) noexcept { return std::__rotr(__x, __s); } template<__unsigned_integer _Tp> constexpr int countl_zero(_Tp __x) noexcept { return std::__countl_zero(__x); } template<__unsigned_integer _Tp> constexpr int countl_one(_Tp __x) noexcept { return std::__countl_one(__x); } template<__unsigned_integer _Tp> constexpr int countr_zero(_Tp __x) noexcept { return std::__countr_zero(__x); } template<__unsigned_integer _Tp> constexpr int countr_one(_Tp __x) noexcept { return std::__countr_one(__x); } template<__unsigned_integer _Tp> constexpr int popcount(_Tp __x) noexcept { return std::__popcount(__x); } template<__unsigned_integer _Tp> constexpr bool has_single_bit(_Tp __x) noexcept { return std::__has_single_bit(__x); } template<__unsigned_integer _Tp> constexpr _Tp bit_ceil(_Tp __x) noexcept { return std::__bit_ceil(__x); } template<__unsigned_integer _Tp> constexpr _Tp bit_floor(_Tp __x) noexcept { return std::__bit_floor(__x); } template<__unsigned_integer _Tp> constexpr int bit_width(_Tp __x) noexcept { return std::__bit_width(__x); } # 472 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bit" 3 enum class endian { little = 1234, big = 4321, native = 1234 }; } # 77 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_algobase.h" 2 3 namespace std __attribute__ ((__visibility__ ("default"))) { template constexpr inline int __memcmp(const _Tp* __first1, const _Up* __first2, size_t __num) { static_assert(sizeof(_Tp) == sizeof(_Up), "can be compared with memcmp"); if (std::is_constant_evaluated()) { for(; __num > 0; ++__first1, ++__first2, --__num) if (*__first1 != *__first2) return *__first1 < *__first2 ? -1 : 1; return 0; } else return __builtin_memcmp(__first1, __first2, sizeof(_Tp) * __num); } # 152 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_algobase.h" 3 template constexpr inline void iter_swap(_ForwardIterator1 __a, _ForwardIterator2 __b) { # 185 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_algobase.h" 3 swap(*__a, *__b); } # 201 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_algobase.h" 3 template constexpr _ForwardIterator2 swap_ranges(_ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2) { ; for (; __first1 != __last1; ++__first1, (void)++__first2) std::iter_swap(__first1, __first2); return __first2; } # 230 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_algobase.h" 3 template [[__nodiscard__]] constexpr inline const _Tp& min(const _Tp& __a, const _Tp& __b) { if (__b < __a) return __b; return __a; } # 254 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_algobase.h" 3 template [[__nodiscard__]] constexpr inline const _Tp& max(const _Tp& __a, const _Tp& __b) { if (__a < __b) return __b; return __a; } # 278 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_algobase.h" 3 template [[__nodiscard__]] constexpr inline const _Tp& min(const _Tp& __a, const _Tp& __b, _Compare __comp) { if (__comp(__b, __a)) return __b; return __a; } # 300 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_algobase.h" 3 template [[__nodiscard__]] constexpr inline const _Tp& max(const _Tp& __a, const _Tp& __b, _Compare __comp) { if (__comp(__a, __b)) return __b; return __a; } template constexpr inline _Iterator __niter_base(_Iterator __it) noexcept(std::is_nothrow_copy_constructible<_Iterator>::value) { return __it; } # 332 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_algobase.h" 3 template constexpr decltype(std::__niter_base(std::declval<_Ite>())) __niter_base(const ::__gnu_debug::_Safe_iterator<_Ite, _Seq, std::random_access_iterator_tag>&) noexcept(std::is_nothrow_copy_constructible<_Ite>::value); template constexpr inline _From __niter_wrap(_From __from, _To __res) { return __from + (std::__niter_base(__res) - std::__niter_base(__from)); } template constexpr inline _Iterator __niter_wrap(const _Iterator&, _Iterator __res) { return __res; } template struct __copy_move { template constexpr static _OI __copy_m(_II __first, _II __last, _OI __result) { for (; __first != __last; ++__result, (void)++__first) *__result = *__first; return __result; } }; template struct __copy_move { template constexpr static _OI __copy_m(_II __first, _II __last, _OI __result) { for (; __first != __last; ++__result, (void)++__first) *__result = std::move(*__first); return __result; } }; template<> struct __copy_move { template constexpr static _OI __copy_m(_II __first, _II __last, _OI __result) { typedef typename iterator_traits<_II>::difference_type _Distance; for(_Distance __n = __last - __first; __n > 0; --__n) { *__result = *__first; ++__first; ++__result; } return __result; } template static void __assign_one(_Tp* __to, _Up* __from) { *__to = *__from; } }; template<> struct __copy_move { template constexpr static _OI __copy_m(_II __first, _II __last, _OI __result) { typedef typename iterator_traits<_II>::difference_type _Distance; for(_Distance __n = __last - __first; __n > 0; --__n) { *__result = std::move(*__first); ++__first; ++__result; } return __result; } template static void __assign_one(_Tp* __to, _Up* __from) { *__to = std::move(*__from); } }; template struct __copy_move<_IsMove, true, random_access_iterator_tag> { template constexpr static _Up* __copy_m(_Tp* __first, _Tp* __last, _Up* __result) { const ptrdiff_t _Num = __last - __first; if (__builtin_expect(_Num > 1, true)) __builtin_memmove(__result, __first, sizeof(_Tp) * _Num); else if (_Num == 1) std::__copy_move<_IsMove, false, random_access_iterator_tag>:: __assign_one(__result, __first); return __result + _Num; } }; template struct _Deque_iterator; struct _Bit_iterator; template struct char_traits; template class istreambuf_iterator; template class ostreambuf_iterator; template typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, ostreambuf_iterator<_CharT, char_traits<_CharT> > >::__type __copy_move_a2(_CharT*, _CharT*, ostreambuf_iterator<_CharT, char_traits<_CharT> >); template typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, ostreambuf_iterator<_CharT, char_traits<_CharT> > >::__type __copy_move_a2(const _CharT*, const _CharT*, ostreambuf_iterator<_CharT, char_traits<_CharT> >); template typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, _CharT*>::__type __copy_move_a2(istreambuf_iterator<_CharT, char_traits<_CharT> >, istreambuf_iterator<_CharT, char_traits<_CharT> >, _CharT*); template typename __gnu_cxx::__enable_if< __is_char<_CharT>::__value, std::_Deque_iterator<_CharT, _CharT&, _CharT*> >::__type __copy_move_a2( istreambuf_iterator<_CharT, char_traits<_CharT> >, istreambuf_iterator<_CharT, char_traits<_CharT> >, std::_Deque_iterator<_CharT, _CharT&, _CharT*>); template constexpr inline _OI __copy_move_a2(_II __first, _II __last, _OI __result) { typedef typename iterator_traits<_II>::iterator_category _Category; if (std::is_constant_evaluated()) return std::__copy_move<_IsMove, false, _Category>:: __copy_m(__first, __last, __result); return std::__copy_move<_IsMove, __memcpyable<_OI, _II>::__value, _Category>::__copy_m(__first, __last, __result); } template _OI __copy_move_a1(std::_Deque_iterator<_Tp, _Ref, _Ptr>, std::_Deque_iterator<_Tp, _Ref, _Ptr>, _OI); template std::_Deque_iterator<_OTp, _OTp&, _OTp*> __copy_move_a1(std::_Deque_iterator<_ITp, _IRef, _IPtr>, std::_Deque_iterator<_ITp, _IRef, _IPtr>, std::_Deque_iterator<_OTp, _OTp&, _OTp*>); template typename __gnu_cxx::__enable_if< __is_random_access_iter<_II>::__value, std::_Deque_iterator<_Tp, _Tp&, _Tp*> >::__type __copy_move_a1(_II, _II, std::_Deque_iterator<_Tp, _Tp&, _Tp*>); template constexpr inline _OI __copy_move_a1(_II __first, _II __last, _OI __result) { return std::__copy_move_a2<_IsMove>(__first, __last, __result); } template constexpr inline _OI __copy_move_a(_II __first, _II __last, _OI __result) { return std::__niter_wrap(__result, std::__copy_move_a1<_IsMove>(std::__niter_base(__first), std::__niter_base(__last), std::__niter_base(__result))); } template constexpr _OI __copy_move_a(const ::__gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat>&, const ::__gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat>&, _OI); template constexpr __gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat> __copy_move_a(_II, _II, const ::__gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat>&); template constexpr ::__gnu_debug::_Safe_iterator<_OIte, _OSeq, _OCat> __copy_move_a(const ::__gnu_debug::_Safe_iterator<_IIte, _ISeq, _ICat>&, const ::__gnu_debug::_Safe_iterator<_IIte, _ISeq, _ICat>&, const ::__gnu_debug::_Safe_iterator<_OIte, _OSeq, _OCat>&); template constexpr _OutputIterator __copy_n_a(_InputIterator __first, _Size __n, _OutputIterator __result, bool) { if (__n > 0) { while (true) { *__result = *__first; ++__result; if (--__n > 0) ++__first; else break; } } return __result; } template typename __gnu_cxx::__enable_if< __is_char<_CharT>::__value, _CharT*>::__type __copy_n_a(istreambuf_iterator<_CharT, char_traits<_CharT> >, _Size, _CharT*, bool); template typename __gnu_cxx::__enable_if< __is_char<_CharT>::__value, std::_Deque_iterator<_CharT, _CharT&, _CharT*> >::__type __copy_n_a(istreambuf_iterator<_CharT, char_traits<_CharT> >, _Size, std::_Deque_iterator<_CharT, _CharT&, _CharT*>, bool); # 639 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_algobase.h" 3 template constexpr inline _OI copy(_II __first, _II __last, _OI __result) { ; return std::__copy_move_a<__is_move_iterator<_II>::__value> (std::__miter_base(__first), std::__miter_base(__last), __result); } # 672 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_algobase.h" 3 template constexpr inline _OI move(_II __first, _II __last, _OI __result) { ; return std::__copy_move_a(std::__miter_base(__first), std::__miter_base(__last), __result); } template struct __copy_move_backward { template constexpr static _BI2 __copy_move_b(_BI1 __first, _BI1 __last, _BI2 __result) { while (__first != __last) *--__result = *--__last; return __result; } }; template struct __copy_move_backward { template constexpr static _BI2 __copy_move_b(_BI1 __first, _BI1 __last, _BI2 __result) { while (__first != __last) *--__result = std::move(*--__last); return __result; } }; template<> struct __copy_move_backward { template constexpr static _BI2 __copy_move_b(_BI1 __first, _BI1 __last, _BI2 __result) { typename iterator_traits<_BI1>::difference_type __n = __last - __first; for (; __n > 0; --__n) *--__result = *--__last; return __result; } }; template<> struct __copy_move_backward { template constexpr static _BI2 __copy_move_b(_BI1 __first, _BI1 __last, _BI2 __result) { typename iterator_traits<_BI1>::difference_type __n = __last - __first; for (; __n > 0; --__n) *--__result = std::move(*--__last); return __result; } }; template struct __copy_move_backward<_IsMove, true, random_access_iterator_tag> { template constexpr static _Up* __copy_move_b(_Tp* __first, _Tp* __last, _Up* __result) { const ptrdiff_t _Num = __last - __first; if (__builtin_expect(_Num > 1, true)) __builtin_memmove(__result - _Num, __first, sizeof(_Tp) * _Num); else if (_Num == 1) std::__copy_move<_IsMove, false, random_access_iterator_tag>:: __assign_one(__result - 1, __first); return __result - _Num; } }; template constexpr inline _BI2 __copy_move_backward_a2(_BI1 __first, _BI1 __last, _BI2 __result) { typedef typename iterator_traits<_BI1>::iterator_category _Category; if (std::is_constant_evaluated()) return std::__copy_move_backward<_IsMove, false, _Category>:: __copy_move_b(__first, __last, __result); return std::__copy_move_backward<_IsMove, __memcpyable<_BI2, _BI1>::__value, _Category>::__copy_move_b(__first, __last, __result); } template constexpr inline _BI2 __copy_move_backward_a1(_BI1 __first, _BI1 __last, _BI2 __result) { return std::__copy_move_backward_a2<_IsMove>(__first, __last, __result); } template _OI __copy_move_backward_a1(std::_Deque_iterator<_Tp, _Ref, _Ptr>, std::_Deque_iterator<_Tp, _Ref, _Ptr>, _OI); template std::_Deque_iterator<_OTp, _OTp&, _OTp*> __copy_move_backward_a1( std::_Deque_iterator<_ITp, _IRef, _IPtr>, std::_Deque_iterator<_ITp, _IRef, _IPtr>, std::_Deque_iterator<_OTp, _OTp&, _OTp*>); template typename __gnu_cxx::__enable_if< __is_random_access_iter<_II>::__value, std::_Deque_iterator<_Tp, _Tp&, _Tp*> >::__type __copy_move_backward_a1(_II, _II, std::_Deque_iterator<_Tp, _Tp&, _Tp*>); template constexpr inline _OI __copy_move_backward_a(_II __first, _II __last, _OI __result) { return std::__niter_wrap(__result, std::__copy_move_backward_a1<_IsMove> (std::__niter_base(__first), std::__niter_base(__last), std::__niter_base(__result))); } template constexpr _OI __copy_move_backward_a( const ::__gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat>&, const ::__gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat>&, _OI); template constexpr __gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat> __copy_move_backward_a(_II, _II, const ::__gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat>&); template constexpr ::__gnu_debug::_Safe_iterator<_OIte, _OSeq, _OCat> __copy_move_backward_a( const ::__gnu_debug::_Safe_iterator<_IIte, _ISeq, _ICat>&, const ::__gnu_debug::_Safe_iterator<_IIte, _ISeq, _ICat>&, const ::__gnu_debug::_Safe_iterator<_OIte, _OSeq, _OCat>&); # 875 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_algobase.h" 3 template constexpr inline _BI2 copy_backward(_BI1 __first, _BI1 __last, _BI2 __result) { ; return std::__copy_move_backward_a<__is_move_iterator<_BI1>::__value> (std::__miter_base(__first), std::__miter_base(__last), __result); } # 910 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_algobase.h" 3 template constexpr inline _BI2 move_backward(_BI1 __first, _BI1 __last, _BI2 __result) { ; return std::__copy_move_backward_a(std::__miter_base(__first), std::__miter_base(__last), __result); } template constexpr inline typename __gnu_cxx::__enable_if::__value, void>::__type __fill_a1(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __value) { for (; __first != __last; ++__first) *__first = __value; } template constexpr inline typename __gnu_cxx::__enable_if<__is_scalar<_Tp>::__value, void>::__type __fill_a1(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __value) { const _Tp __tmp = __value; for (; __first != __last; ++__first) *__first = __tmp; } template constexpr inline typename __gnu_cxx::__enable_if<__is_byte<_Tp>::__value, void>::__type __fill_a1(_Tp* __first, _Tp* __last, const _Tp& __c) { const _Tp __tmp = __c; if (std::is_constant_evaluated()) { for (; __first != __last; ++__first) *__first = __tmp; return; } if (const size_t __len = __last - __first) __builtin_memset(__first, static_cast(__tmp), __len); } template constexpr inline void __fill_a1(::__gnu_cxx::__normal_iterator<_Ite, _Cont> __first, ::__gnu_cxx::__normal_iterator<_Ite, _Cont> __last, const _Tp& __value) { std::__fill_a1(__first.base(), __last.base(), __value); } template void __fill_a1(const std::_Deque_iterator<_Tp, _Tp&, _Tp*>&, const std::_Deque_iterator<_Tp, _Tp&, _Tp*>&, const _VTp&); constexpr void __fill_a1(std::_Bit_iterator, std::_Bit_iterator, const bool&); template constexpr inline void __fill_a(_FIte __first, _FIte __last, const _Tp& __value) { std::__fill_a1(__first, __last, __value); } template constexpr void __fill_a(const ::__gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat>&, const ::__gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat>&, const _Tp&); # 1019 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_algobase.h" 3 template constexpr inline void fill(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __value) { ; std::__fill_a(__first, __last, __value); } inline constexpr int __size_to_integer(int __n) { return __n; } inline constexpr unsigned __size_to_integer(unsigned __n) { return __n; } inline constexpr long __size_to_integer(long __n) { return __n; } inline constexpr unsigned long __size_to_integer(unsigned long __n) { return __n; } inline constexpr long long __size_to_integer(long long __n) { return __n; } inline constexpr unsigned long long __size_to_integer(unsigned long long __n) { return __n; } __extension__ inline constexpr __int128 __size_to_integer(__int128 __n) { return __n; } __extension__ inline constexpr unsigned __int128 __size_to_integer(unsigned __int128 __n) { return __n; } # 1071 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_algobase.h" 3 inline constexpr long long __size_to_integer(float __n) { return (long long)__n; } inline constexpr long long __size_to_integer(double __n) { return (long long)__n; } inline constexpr long long __size_to_integer(long double __n) { return (long long)__n; } __extension__ inline constexpr long long __size_to_integer(__float128 __n) { return (long long)__n; } template constexpr inline typename __gnu_cxx::__enable_if::__value, _OutputIterator>::__type __fill_n_a1(_OutputIterator __first, _Size __n, const _Tp& __value) { for (; __n > 0; --__n, (void) ++__first) *__first = __value; return __first; } template constexpr inline typename __gnu_cxx::__enable_if<__is_scalar<_Tp>::__value, _OutputIterator>::__type __fill_n_a1(_OutputIterator __first, _Size __n, const _Tp& __value) { const _Tp __tmp = __value; for (; __n > 0; --__n, (void) ++__first) *__first = __tmp; return __first; } template constexpr ::__gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat> __fill_n_a(const ::__gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat>& __first, _Size __n, const _Tp& __value, std::input_iterator_tag); template constexpr inline _OutputIterator __fill_n_a(_OutputIterator __first, _Size __n, const _Tp& __value, std::output_iterator_tag) { static_assert(is_integral<_Size>{}, "fill_n must pass integral size"); return __fill_n_a1(__first, __n, __value); } template constexpr inline _OutputIterator __fill_n_a(_OutputIterator __first, _Size __n, const _Tp& __value, std::input_iterator_tag) { static_assert(is_integral<_Size>{}, "fill_n must pass integral size"); return __fill_n_a1(__first, __n, __value); } template constexpr inline _OutputIterator __fill_n_a(_OutputIterator __first, _Size __n, const _Tp& __value, std::random_access_iterator_tag) { static_assert(is_integral<_Size>{}, "fill_n must pass integral size"); if (__n <= 0) return __first; ; std::__fill_a(__first, __first + __n, __value); return __first + __n; } # 1172 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_algobase.h" 3 template constexpr inline _OI fill_n(_OI __first, _Size __n, const _Tp& __value) { return std::__fill_n_a(__first, std::__size_to_integer(__n), __value, std::__iterator_category(__first)); } template struct __equal { template constexpr static bool equal(_II1 __first1, _II1 __last1, _II2 __first2) { for (; __first1 != __last1; ++__first1, (void) ++__first2) if (!(*__first1 == *__first2)) return false; return true; } }; template<> struct __equal { template constexpr static bool equal(const _Tp* __first1, const _Tp* __last1, const _Tp* __first2) { if (const size_t __len = (__last1 - __first1)) return !std::__memcmp(__first1, __first2, __len); return true; } }; template typename __gnu_cxx::__enable_if< __is_random_access_iter<_II>::__value, bool>::__type __equal_aux1(std::_Deque_iterator<_Tp, _Ref, _Ptr>, std::_Deque_iterator<_Tp, _Ref, _Ptr>, _II); template bool __equal_aux1(std::_Deque_iterator<_Tp1, _Ref1, _Ptr1>, std::_Deque_iterator<_Tp1, _Ref1, _Ptr1>, std::_Deque_iterator<_Tp2, _Ref2, _Ptr2>); template typename __gnu_cxx::__enable_if< __is_random_access_iter<_II>::__value, bool>::__type __equal_aux1(_II, _II, std::_Deque_iterator<_Tp, _Ref, _Ptr>); template constexpr inline bool __equal_aux1(_II1 __first1, _II1 __last1, _II2 __first2) { typedef typename iterator_traits<_II1>::value_type _ValueType1; const bool __simple = ((__is_integer<_ValueType1>::__value || __is_pointer<_ValueType1>::__value) && __memcmpable<_II1, _II2>::__value); return std::__equal<__simple>::equal(__first1, __last1, __first2); } template constexpr inline bool __equal_aux(_II1 __first1, _II1 __last1, _II2 __first2) { return std::__equal_aux1(std::__niter_base(__first1), std::__niter_base(__last1), std::__niter_base(__first2)); } template constexpr bool __equal_aux(const ::__gnu_debug::_Safe_iterator<_II1, _Seq1, _Cat1>&, const ::__gnu_debug::_Safe_iterator<_II1, _Seq1, _Cat1>&, _II2); template constexpr bool __equal_aux(_II1, _II1, const ::__gnu_debug::_Safe_iterator<_II2, _Seq2, _Cat2>&); template constexpr bool __equal_aux(const ::__gnu_debug::_Safe_iterator<_II1, _Seq1, _Cat1>&, const ::__gnu_debug::_Safe_iterator<_II1, _Seq1, _Cat1>&, const ::__gnu_debug::_Safe_iterator<_II2, _Seq2, _Cat2>&); template struct __lc_rai { template constexpr static _II1 __newlast1(_II1, _II1 __last1, _II2, _II2) { return __last1; } template constexpr static bool __cnd2(_II __first, _II __last) { return __first != __last; } }; template<> struct __lc_rai { template constexpr static _RAI1 __newlast1(_RAI1 __first1, _RAI1 __last1, _RAI2 __first2, _RAI2 __last2) { const typename iterator_traits<_RAI1>::difference_type __diff1 = __last1 - __first1; const typename iterator_traits<_RAI2>::difference_type __diff2 = __last2 - __first2; return __diff2 < __diff1 ? __first1 + __diff2 : __last1; } template static constexpr bool __cnd2(_RAI, _RAI) { return true; } }; template constexpr bool __lexicographical_compare_impl(_II1 __first1, _II1 __last1, _II2 __first2, _II2 __last2, _Compare __comp) { typedef typename iterator_traits<_II1>::iterator_category _Category1; typedef typename iterator_traits<_II2>::iterator_category _Category2; typedef std::__lc_rai<_Category1, _Category2> __rai_type; __last1 = __rai_type::__newlast1(__first1, __last1, __first2, __last2); for (; __first1 != __last1 && __rai_type::__cnd2(__first2, __last2); ++__first1, (void)++__first2) { if (__comp(__first1, __first2)) return true; if (__comp(__first2, __first1)) return false; } return __first1 == __last1 && __first2 != __last2; } template struct __lexicographical_compare { template constexpr static bool __lc(_II1 __first1, _II1 __last1, _II2 __first2, _II2 __last2) { using __gnu_cxx::__ops::__iter_less_iter; return std::__lexicographical_compare_impl(__first1, __last1, __first2, __last2, __iter_less_iter()); } template constexpr static int __3way(_II1 __first1, _II1 __last1, _II2 __first2, _II2 __last2) { while (__first1 != __last1) { if (__first2 == __last2) return +1; if (*__first1 < *__first2) return -1; if (*__first2 < *__first1) return +1; ++__first1; ++__first2; } return int(__first2 == __last2) - 1; } }; template<> struct __lexicographical_compare { template constexpr static bool __lc(const _Tp* __first1, const _Tp* __last1, const _Up* __first2, const _Up* __last2) { return __3way(__first1, __last1, __first2, __last2) < 0; } template constexpr static ptrdiff_t __3way(const _Tp* __first1, const _Tp* __last1, const _Up* __first2, const _Up* __last2) { const size_t __len1 = __last1 - __first1; const size_t __len2 = __last2 - __first2; if (const size_t __len = std::min(__len1, __len2)) if (int __result = std::__memcmp(__first1, __first2, __len)) return __result; return ptrdiff_t(__len1 - __len2); } }; template constexpr inline bool __lexicographical_compare_aux1(_II1 __first1, _II1 __last1, _II2 __first2, _II2 __last2) { typedef typename iterator_traits<_II1>::value_type _ValueType1; typedef typename iterator_traits<_II2>::value_type _ValueType2; const bool __simple = (__is_memcmp_ordered_with<_ValueType1, _ValueType2>::__value && __is_pointer<_II1>::__value && __is_pointer<_II2>::__value && !is_volatile_v>> && !is_volatile_v>> ); return std::__lexicographical_compare<__simple>::__lc(__first1, __last1, __first2, __last2); } template bool __lexicographical_compare_aux1( std::_Deque_iterator<_Tp1, _Ref1, _Ptr1>, std::_Deque_iterator<_Tp1, _Ref1, _Ptr1>, _Tp2*, _Tp2*); template bool __lexicographical_compare_aux1(_Tp1*, _Tp1*, std::_Deque_iterator<_Tp2, _Ref2, _Ptr2>, std::_Deque_iterator<_Tp2, _Ref2, _Ptr2>); template bool __lexicographical_compare_aux1( std::_Deque_iterator<_Tp1, _Ref1, _Ptr1>, std::_Deque_iterator<_Tp1, _Ref1, _Ptr1>, std::_Deque_iterator<_Tp2, _Ref2, _Ptr2>, std::_Deque_iterator<_Tp2, _Ref2, _Ptr2>); template constexpr inline bool __lexicographical_compare_aux(_II1 __first1, _II1 __last1, _II2 __first2, _II2 __last2) { return std::__lexicographical_compare_aux1(std::__niter_base(__first1), std::__niter_base(__last1), std::__niter_base(__first2), std::__niter_base(__last2)); } template constexpr bool __lexicographical_compare_aux( const ::__gnu_debug::_Safe_iterator<_Iter1, _Seq1, _Cat1>&, const ::__gnu_debug::_Safe_iterator<_Iter1, _Seq1, _Cat1>&, _II2, _II2); template constexpr bool __lexicographical_compare_aux( _II1, _II1, const ::__gnu_debug::_Safe_iterator<_Iter2, _Seq2, _Cat2>&, const ::__gnu_debug::_Safe_iterator<_Iter2, _Seq2, _Cat2>&); template constexpr bool __lexicographical_compare_aux( const ::__gnu_debug::_Safe_iterator<_Iter1, _Seq1, _Cat1>&, const ::__gnu_debug::_Safe_iterator<_Iter1, _Seq1, _Cat1>&, const ::__gnu_debug::_Safe_iterator<_Iter2, _Seq2, _Cat2>&, const ::__gnu_debug::_Safe_iterator<_Iter2, _Seq2, _Cat2>&); template constexpr _ForwardIterator __lower_bound(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __val, _Compare __comp) { typedef typename iterator_traits<_ForwardIterator>::difference_type _DistanceType; _DistanceType __len = std::distance(__first, __last); while (__len > 0) { _DistanceType __half = __len >> 1; _ForwardIterator __middle = __first; std::advance(__middle, __half); if (__comp(__middle, __val)) { __first = __middle; ++__first; __len = __len - __half - 1; } else __len = __half; } return __first; } # 1524 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_algobase.h" 3 template [[__nodiscard__]] constexpr inline _ForwardIterator lower_bound(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __val) { ; return std::__lower_bound(__first, __last, __val, __gnu_cxx::__ops::__iter_less_val()); } template inline constexpr _Tp __lg(_Tp __n) { return std::__bit_width(make_unsigned_t<_Tp>(__n)) - 1; # 1557 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_algobase.h" 3 } # 1573 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_algobase.h" 3 template [[__nodiscard__]] constexpr inline bool equal(_II1 __first1, _II1 __last1, _II2 __first2) { ; return std::__equal_aux(__first1, __last1, __first2); } # 1604 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_algobase.h" 3 template [[__nodiscard__]] constexpr inline bool equal(_IIter1 __first1, _IIter1 __last1, _IIter2 __first2, _BinaryPredicate __binary_pred) { ; for (; __first1 != __last1; ++__first1, (void)++__first2) if (!bool(__binary_pred(*__first1, *__first2))) return false; return true; } template constexpr inline bool __equal4(_II1 __first1, _II1 __last1, _II2 __first2, _II2 __last2) { using _RATag = random_access_iterator_tag; using _Cat1 = typename iterator_traits<_II1>::iterator_category; using _Cat2 = typename iterator_traits<_II2>::iterator_category; using _RAIters = __and_, is_same<_Cat2, _RATag>>; if (_RAIters()) { auto __d1 = std::distance(__first1, __last1); auto __d2 = std::distance(__first2, __last2); if (__d1 != __d2) return false; return std::equal(__first1, __last1, __first2); } for (; __first1 != __last1 && __first2 != __last2; ++__first1, (void)++__first2) if (!(*__first1 == *__first2)) return false; return __first1 == __last1 && __first2 == __last2; } template constexpr inline bool __equal4(_II1 __first1, _II1 __last1, _II2 __first2, _II2 __last2, _BinaryPredicate __binary_pred) { using _RATag = random_access_iterator_tag; using _Cat1 = typename iterator_traits<_II1>::iterator_category; using _Cat2 = typename iterator_traits<_II2>::iterator_category; using _RAIters = __and_, is_same<_Cat2, _RATag>>; if (_RAIters()) { auto __d1 = std::distance(__first1, __last1); auto __d2 = std::distance(__first2, __last2); if (__d1 != __d2) return false; return std::equal(__first1, __last1, __first2, __binary_pred); } for (; __first1 != __last1 && __first2 != __last2; ++__first1, (void)++__first2) if (!bool(__binary_pred(*__first1, *__first2))) return false; return __first1 == __last1 && __first2 == __last2; } # 1691 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_algobase.h" 3 template [[__nodiscard__]] constexpr inline bool equal(_II1 __first1, _II1 __last1, _II2 __first2, _II2 __last2) { ; ; return std::__equal4(__first1, __last1, __first2, __last2); } # 1724 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_algobase.h" 3 template [[__nodiscard__]] constexpr inline bool equal(_IIter1 __first1, _IIter1 __last1, _IIter2 __first2, _IIter2 __last2, _BinaryPredicate __binary_pred) { ; ; return std::__equal4(__first1, __last1, __first2, __last2, __binary_pred); } # 1756 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_algobase.h" 3 template [[__nodiscard__]] constexpr inline bool lexicographical_compare(_II1 __first1, _II1 __last1, _II2 __first2, _II2 __last2) { # 1771 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_algobase.h" 3 ; ; return std::__lexicographical_compare_aux(__first1, __last1, __first2, __last2); } # 1791 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_algobase.h" 3 template [[__nodiscard__]] constexpr inline bool lexicographical_compare(_II1 __first1, _II1 __last1, _II2 __first2, _II2 __last2, _Compare __comp) { ; ; return std::__lexicographical_compare_impl (__first1, __last1, __first2, __last2, __gnu_cxx::__ops::__iter_comp_iter(__comp)); } template concept __memcmp_ordered_with = (__is_memcmp_ordered_with, iter_value_t<_Iter2>>::__value) && contiguous_iterator<_Iter1> && contiguous_iterator<_Iter2>; template constexpr auto __min_cmp(_Tp __x, _Tp __y) { struct _Res { _Tp _M_min; decltype(__x <=> __y) _M_cmp; }; auto __c = __x <=> __y; if (__c > 0) return _Res{__y, __c}; return _Res{__x, __c}; } # 1845 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_algobase.h" 3 template [[nodiscard]] constexpr auto lexicographical_compare_three_way(_InputIter1 __first1, _InputIter1 __last1, _InputIter2 __first2, _InputIter2 __last2, _Comp __comp) -> decltype(__comp(*__first1, *__first2)) { ; ; using _Cat = decltype(__comp(*__first1, *__first2)); static_assert(same_as, _Cat>); if (!std::__is_constant_evaluated()) if constexpr (same_as<_Comp, __detail::_Synth3way> || same_as<_Comp, compare_three_way>) if constexpr (__memcmp_ordered_with<_InputIter1, _InputIter2>) { const auto [__len, __lencmp] = std:: __min_cmp(__last1 - __first1, __last2 - __first2); if (__len) { const auto __blen = __len * sizeof(*__first1); const auto __c = __builtin_memcmp(&*__first1, &*__first2, __blen) <=> 0; if (__c != 0) return __c; } return __lencmp; } while (__first1 != __last1) { if (__first2 == __last2) return strong_ordering::greater; if (auto __cmp = __comp(*__first1, *__first2); __cmp != 0) return __cmp; ++__first1; ++__first2; } return (__first2 == __last2) <=> true; } template constexpr auto lexicographical_compare_three_way(_InputIter1 __first1, _InputIter1 __last1, _InputIter2 __first2, _InputIter2 __last2) { return std:: lexicographical_compare_three_way(__first1, __last1, __first2, __last2, compare_three_way{}); } template constexpr pair<_InputIterator1, _InputIterator2> __mismatch(_InputIterator1 __first1, _InputIterator1 __last1, _InputIterator2 __first2, _BinaryPredicate __binary_pred) { while (__first1 != __last1 && __binary_pred(__first1, __first2)) { ++__first1; ++__first2; } return pair<_InputIterator1, _InputIterator2>(__first1, __first2); } # 1934 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_algobase.h" 3 template [[__nodiscard__]] constexpr inline pair<_InputIterator1, _InputIterator2> mismatch(_InputIterator1 __first1, _InputIterator1 __last1, _InputIterator2 __first2) { ; return std::__mismatch(__first1, __last1, __first2, __gnu_cxx::__ops::__iter_equal_to_iter()); } # 1968 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_algobase.h" 3 template [[__nodiscard__]] constexpr inline pair<_InputIterator1, _InputIterator2> mismatch(_InputIterator1 __first1, _InputIterator1 __last1, _InputIterator2 __first2, _BinaryPredicate __binary_pred) { ; return std::__mismatch(__first1, __last1, __first2, __gnu_cxx::__ops::__iter_comp_iter(__binary_pred)); } template constexpr pair<_InputIterator1, _InputIterator2> __mismatch(_InputIterator1 __first1, _InputIterator1 __last1, _InputIterator2 __first2, _InputIterator2 __last2, _BinaryPredicate __binary_pred) { while (__first1 != __last1 && __first2 != __last2 && __binary_pred(__first1, __first2)) { ++__first1; ++__first2; } return pair<_InputIterator1, _InputIterator2>(__first1, __first2); } # 2016 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_algobase.h" 3 template [[__nodiscard__]] constexpr inline pair<_InputIterator1, _InputIterator2> mismatch(_InputIterator1 __first1, _InputIterator1 __last1, _InputIterator2 __first2, _InputIterator2 __last2) { ; ; return std::__mismatch(__first1, __last1, __first2, __last2, __gnu_cxx::__ops::__iter_equal_to_iter()); } # 2052 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_algobase.h" 3 template [[__nodiscard__]] constexpr inline pair<_InputIterator1, _InputIterator2> mismatch(_InputIterator1 __first1, _InputIterator1 __last1, _InputIterator2 __first2, _InputIterator2 __last2, _BinaryPredicate __binary_pred) { ; ; return std::__mismatch(__first1, __last1, __first2, __last2, __gnu_cxx::__ops::__iter_comp_iter(__binary_pred)); } template constexpr inline _InputIterator __find_if(_InputIterator __first, _InputIterator __last, _Predicate __pred, input_iterator_tag) { while (__first != __last && !__pred(__first)) ++__first; return __first; } template constexpr _RandomAccessIterator __find_if(_RandomAccessIterator __first, _RandomAccessIterator __last, _Predicate __pred, random_access_iterator_tag) { typename iterator_traits<_RandomAccessIterator>::difference_type __trip_count = (__last - __first) >> 2; for (; __trip_count > 0; --__trip_count) { if (__pred(__first)) return __first; ++__first; if (__pred(__first)) return __first; ++__first; if (__pred(__first)) return __first; ++__first; if (__pred(__first)) return __first; ++__first; } switch (__last - __first) { case 3: if (__pred(__first)) return __first; ++__first; case 2: if (__pred(__first)) return __first; ++__first; case 1: if (__pred(__first)) return __first; ++__first; case 0: default: return __last; } } template constexpr inline _Iterator __find_if(_Iterator __first, _Iterator __last, _Predicate __pred) { return __find_if(__first, __last, __pred, std::__iterator_category(__first)); } template constexpr typename iterator_traits<_InputIterator>::difference_type __count_if(_InputIterator __first, _InputIterator __last, _Predicate __pred) { typename iterator_traits<_InputIterator>::difference_type __n = 0; for (; __first != __last; ++__first) if (__pred(__first)) ++__n; return __n; } template constexpr _ForwardIterator __remove_if(_ForwardIterator __first, _ForwardIterator __last, _Predicate __pred) { __first = std::__find_if(__first, __last, __pred); if (__first == __last) return __first; _ForwardIterator __result = __first; ++__first; for (; __first != __last; ++__first) if (!__pred(__first)) { *__result = std::move(*__first); ++__result; } return __result; } template constexpr _ForwardIterator1 __search(_ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2, _ForwardIterator2 __last2, _BinaryPredicate __predicate) { if (__first1 == __last1 || __first2 == __last2) return __first1; _ForwardIterator2 __p1(__first2); if (++__p1 == __last2) return std::__find_if(__first1, __last1, __gnu_cxx::__ops::__iter_comp_iter(__predicate, __first2)); _ForwardIterator1 __current = __first1; for (;;) { __first1 = std::__find_if(__first1, __last1, __gnu_cxx::__ops::__iter_comp_iter(__predicate, __first2)); if (__first1 == __last1) return __last1; _ForwardIterator2 __p = __p1; __current = __first1; if (++__current == __last1) return __last1; while (__predicate(__current, __p)) { if (++__p == __last2) return __first1; if (++__current == __last1) return __last1; } ++__first1; } return __first1; } template constexpr bool __is_permutation(_ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2, _BinaryPredicate __pred) { for (; __first1 != __last1; ++__first1, (void)++__first2) if (!__pred(__first1, __first2)) break; if (__first1 == __last1) return true; _ForwardIterator2 __last2 = __first2; std::advance(__last2, std::distance(__first1, __last1)); for (_ForwardIterator1 __scan = __first1; __scan != __last1; ++__scan) { if (__scan != std::__find_if(__first1, __scan, __gnu_cxx::__ops::__iter_comp_iter(__pred, __scan))) continue; auto __matches = std::__count_if(__first2, __last2, __gnu_cxx::__ops::__iter_comp_iter(__pred, __scan)); if (0 == __matches || std::__count_if(__scan, __last1, __gnu_cxx::__ops::__iter_comp_iter(__pred, __scan)) != __matches) return false; } return true; } # 2276 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_algobase.h" 3 template constexpr inline bool is_permutation(_ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2) { ; return std::__is_permutation(__first1, __last1, __first2, __gnu_cxx::__ops::__iter_equal_to_iter()); } # 2318 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_algobase.h" 3 template constexpr inline _ForwardIterator1 search(_ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2, _ForwardIterator2 __last2, _BinaryPredicate __predicate) { ; ; return std::__search(__first1, __last1, __first2, __last2, __gnu_cxx::__ops::__iter_comp_iter(__predicate)); } } # 37 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/hashtable_policy.h" 2 3 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/ext/aligned_buffer.h" 1 3 # 33 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/ext/aligned_buffer.h" 3 namespace __gnu_cxx { template struct __aligned_membuf { struct _Tp2 { _Tp _M_t; }; alignas(__alignof__(_Tp2::_M_t)) unsigned char _M_storage[sizeof(_Tp)]; __aligned_membuf() = default; __aligned_membuf(std::nullptr_t) { } void* _M_addr() noexcept { return static_cast(&_M_storage); } const void* _M_addr() const noexcept { return static_cast(&_M_storage); } _Tp* _M_ptr() noexcept { return static_cast<_Tp*>(_M_addr()); } const _Tp* _M_ptr() const noexcept { return static_cast(_M_addr()); } }; #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wdeprecated-declarations" template struct __aligned_buffer : std::aligned_storage { typename std::aligned_storage::type _M_storage; __aligned_buffer() = default; __aligned_buffer(std::nullptr_t) { } void* _M_addr() noexcept { return static_cast(&_M_storage); } const void* _M_addr() const noexcept { return static_cast(&_M_storage); } _Tp* _M_ptr() noexcept { return static_cast<_Tp*>(_M_addr()); } const _Tp* _M_ptr() const noexcept { return static_cast(_M_addr()); } }; #pragma GCC diagnostic pop } # 39 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/hashtable_policy.h" 2 3 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/ext/alloc_traits.h" 1 3 # 33 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/ext/alloc_traits.h" 3 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/alloc_traits.h" 1 3 # 34 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/alloc_traits.h" 3 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/memoryfwd.h" 1 3 # 47 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/memoryfwd.h" 3 namespace std __attribute__ ((__visibility__ ("default"))) { # 64 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/memoryfwd.h" 3 template class allocator; template<> class allocator; template struct uses_allocator; template struct allocator_traits; } # 35 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/alloc_traits.h" 2 3 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/allocator.h" 1 3 # 46 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/allocator.h" 3 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/x86_64-redhat-linux/bits/c++allocator.h" 1 3 # 33 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/x86_64-redhat-linux/bits/c++allocator.h" 3 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/new_allocator.h" 1 3 # 41 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/new_allocator.h" 3 namespace std __attribute__ ((__visibility__ ("default"))) { # 62 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/new_allocator.h" 3 template class __new_allocator { public: typedef _Tp value_type; typedef std::size_t size_type; typedef std::ptrdiff_t difference_type; # 83 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/new_allocator.h" 3 typedef std::true_type propagate_on_container_move_assignment; __attribute__((__always_inline__)) constexpr __new_allocator() noexcept { } __attribute__((__always_inline__)) constexpr __new_allocator(const __new_allocator&) noexcept { } template __attribute__((__always_inline__)) constexpr __new_allocator(const __new_allocator<_Tp1>&) noexcept { } __new_allocator& operator=(const __new_allocator&) = default; # 125 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/new_allocator.h" 3 [[__nodiscard__]] _Tp* allocate(size_type __n, const void* = static_cast(0)) { static_assert(sizeof(_Tp) != 0, "cannot allocate incomplete types"); if (__builtin_expect(__n > this->_M_max_size(), false)) { if (__n > (std::size_t(-1) / sizeof(_Tp))) std::__throw_bad_array_new_length(); std::__throw_bad_alloc(); } if (alignof(_Tp) > 16UL) { std::align_val_t __al = std::align_val_t(alignof(_Tp)); return static_cast<_Tp*>(__builtin_operator_new(__n * sizeof(_Tp), __al)); } return static_cast<_Tp*>(__builtin_operator_new(__n * sizeof(_Tp))); } void deallocate(_Tp* __p, size_type __n __attribute__ ((__unused__))) { if (alignof(_Tp) > 16UL) { __builtin_operator_delete((__p), std::align_val_t(alignof(_Tp))); return; } __builtin_operator_delete((__p)); } # 213 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/new_allocator.h" 3 template friend __attribute__((__always_inline__)) constexpr bool operator==(const __new_allocator&, const __new_allocator<_Up>&) noexcept { return true; } # 227 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/new_allocator.h" 3 private: __attribute__((__always_inline__)) constexpr size_type _M_max_size() const noexcept { return std::size_t(9223372036854775807L) / sizeof(_Tp); } }; } # 34 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/x86_64-redhat-linux/bits/c++allocator.h" 2 3 namespace std { # 46 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/x86_64-redhat-linux/bits/c++allocator.h" 3 template using __allocator_base = __new_allocator<_Tp>; } # 47 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/allocator.h" 2 3 namespace std __attribute__ ((__visibility__ ("default"))) { # 72 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/allocator.h" 3 template<> class allocator { public: typedef void value_type; typedef size_t size_type; typedef ptrdiff_t difference_type; # 93 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/allocator.h" 3 using propagate_on_container_move_assignment = true_type; using is_always_equal __attribute__ ((__deprecated__ ("use '" "std::allocator_traits::is_always_equal" "' instead"))) = true_type; allocator() = default; ~allocator() = default; template __attribute__((__always_inline__)) constexpr allocator(const allocator<_Up>&) noexcept { } }; # 127 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/allocator.h" 3 template class allocator : public __allocator_base<_Tp> { public: typedef _Tp value_type; typedef size_t size_type; typedef ptrdiff_t difference_type; # 150 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/allocator.h" 3 using propagate_on_container_move_assignment = true_type; using is_always_equal __attribute__ ((__deprecated__ ("use '" "std::allocator_traits::is_always_equal" "' instead"))) = true_type; __attribute__((__always_inline__)) constexpr allocator() noexcept { } __attribute__((__always_inline__)) constexpr allocator(const allocator& __a) noexcept : __allocator_base<_Tp>(__a) { } allocator& operator=(const allocator&) = default; template __attribute__((__always_inline__)) constexpr allocator(const allocator<_Tp1>&) noexcept { } __attribute__((__always_inline__)) constexpr ~allocator() noexcept { } [[nodiscard,__gnu__::__always_inline__]] constexpr _Tp* allocate(size_t __n) { if (std::__is_constant_evaluated()) { if (__builtin_mul_overflow(__n, sizeof(_Tp), &__n)) std::__throw_bad_array_new_length(); return static_cast<_Tp*>(::operator new(__n)); } return __allocator_base<_Tp>::allocate(__n, 0); } [[__gnu__::__always_inline__]] constexpr void deallocate(_Tp* __p, size_t __n) { if (std::__is_constant_evaluated()) { ::operator delete(__p); return; } __allocator_base<_Tp>::deallocate(__p, __n); } friend __attribute__((__always_inline__)) constexpr bool operator==(const allocator&, const allocator&) noexcept { return true; } # 225 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/allocator.h" 3 }; template __attribute__((__always_inline__)) inline constexpr bool operator==(const allocator<_T1>&, const allocator<_T2>&) noexcept { return true; } # 252 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/allocator.h" 3 template class allocator { public: typedef _Tp value_type; allocator() { } template allocator(const allocator<_Up>&) { } }; template class allocator { public: typedef _Tp value_type; allocator() { } template allocator(const allocator<_Up>&) { } }; template class allocator { public: typedef _Tp value_type; allocator() { } template allocator(const allocator<_Up>&) { } }; extern template class allocator; extern template class allocator; } # 40 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/alloc_traits.h" 2 3 namespace std __attribute__ ((__visibility__ ("default"))) { struct __allocator_traits_base { template struct __rebind : __replace_first_arg<_Tp, _Up> { static_assert(is_same< typename __replace_first_arg<_Tp, typename _Tp::value_type>::type, _Tp>::value, "allocator_traits::rebind_alloc must be A"); }; template struct __rebind<_Tp, _Up, __void_t::other>> { using type = typename _Tp::template rebind<_Up>::other; static_assert(is_same< typename _Tp::template rebind::other, _Tp>::value, "allocator_traits::rebind_alloc must be A"); }; protected: template using __pointer = typename _Tp::pointer; template using __c_pointer = typename _Tp::const_pointer; template using __v_pointer = typename _Tp::void_pointer; template using __cv_pointer = typename _Tp::const_void_pointer; template using __pocca = typename _Tp::propagate_on_container_copy_assignment; template using __pocma = typename _Tp::propagate_on_container_move_assignment; template using __pocs = typename _Tp::propagate_on_container_swap; template using __equal = __type_identity; }; template using __alloc_rebind = typename __allocator_traits_base::template __rebind<_Alloc, _Up>::type; # 105 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/alloc_traits.h" 3 template struct allocator_traits : __allocator_traits_base { typedef _Alloc allocator_type; typedef typename _Alloc::value_type value_type; using pointer = __detected_or_t; private: template class _Func, typename _Tp, typename = void> struct _Ptr { using type = typename pointer_traits::template rebind<_Tp>; }; template class _Func, typename _Tp> struct _Ptr<_Func, _Tp, __void_t<_Func<_Alloc>>> { using type = _Func<_Alloc>; }; template struct _Diff { using type = typename pointer_traits<_PtrT>::difference_type; }; template struct _Diff<_A2, _PtrT, __void_t> { using type = typename _A2::difference_type; }; template struct _Size : make_unsigned<_DiffT> { }; template struct _Size<_A2, _DiffT, __void_t> { using type = typename _A2::size_type; }; public: using const_pointer = typename _Ptr<__c_pointer, const value_type>::type; using void_pointer = typename _Ptr<__v_pointer, void>::type; using const_void_pointer = typename _Ptr<__cv_pointer, const void>::type; using difference_type = typename _Diff<_Alloc, pointer>::type; using size_type = typename _Size<_Alloc, difference_type>::type; using propagate_on_container_copy_assignment = __detected_or_t; using propagate_on_container_move_assignment = __detected_or_t; using propagate_on_container_swap = __detected_or_t; using is_always_equal = typename __detected_or_t, __equal, _Alloc>::type; template using rebind_alloc = __alloc_rebind<_Alloc, _Tp>; template using rebind_traits = allocator_traits>; private: template static constexpr auto _S_allocate(_Alloc2& __a, size_type __n, const_void_pointer __hint, int) -> decltype(__a.allocate(__n, __hint)) { return __a.allocate(__n, __hint); } template static constexpr pointer _S_allocate(_Alloc2& __a, size_type __n, const_void_pointer, ...) { return __a.allocate(__n); } template struct __construct_helper { template()->construct( std::declval<_Tp*>(), std::declval<_Args>()...))> static true_type __test(int); template static false_type __test(...); using type = decltype(__test<_Alloc>(0)); }; template using __has_construct = typename __construct_helper<_Tp, _Args...>::type; template static constexpr _Require<__has_construct<_Tp, _Args...>> _S_construct(_Alloc& __a, _Tp* __p, _Args&&... __args) noexcept(noexcept(__a.construct(__p, std::forward<_Args>(__args)...))) { __a.construct(__p, std::forward<_Args>(__args)...); } template static constexpr _Require<__and_<__not_<__has_construct<_Tp, _Args...>>, is_constructible<_Tp, _Args...>>> _S_construct(_Alloc&, _Tp* __p, _Args&&... __args) noexcept(std::is_nothrow_constructible<_Tp, _Args...>::value) { std::construct_at(__p, std::forward<_Args>(__args)...); } template static constexpr auto _S_destroy(_Alloc2& __a, _Tp* __p, int) noexcept(noexcept(__a.destroy(__p))) -> decltype(__a.destroy(__p)) { __a.destroy(__p); } template static constexpr void _S_destroy(_Alloc2&, _Tp* __p, ...) noexcept(std::is_nothrow_destructible<_Tp>::value) { std::_Destroy(__p); } template static constexpr auto _S_max_size(_Alloc2& __a, int) -> decltype(__a.max_size()) { return __a.max_size(); } template static constexpr size_type _S_max_size(_Alloc2&, ...) { return __gnu_cxx::__numeric_traits::__max / sizeof(value_type); } template static constexpr auto _S_select(_Alloc2& __a, int) -> decltype(__a.select_on_container_copy_construction()) { return __a.select_on_container_copy_construction(); } template static constexpr _Alloc2 _S_select(_Alloc2& __a, ...) { return __a; } public: # 332 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/alloc_traits.h" 3 [[__nodiscard__]] static constexpr pointer allocate(_Alloc& __a, size_type __n) { return __a.allocate(__n); } # 347 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/alloc_traits.h" 3 [[__nodiscard__]] static constexpr pointer allocate(_Alloc& __a, size_type __n, const_void_pointer __hint) { return _S_allocate(__a, __n, __hint, 0); } # 359 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/alloc_traits.h" 3 static constexpr void deallocate(_Alloc& __a, pointer __p, size_type __n) { __a.deallocate(__p, __n); } # 374 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/alloc_traits.h" 3 template static constexpr auto construct(_Alloc& __a, _Tp* __p, _Args&&... __args) noexcept(noexcept(_S_construct(__a, __p, std::forward<_Args>(__args)...))) -> decltype(_S_construct(__a, __p, std::forward<_Args>(__args)...)) { _S_construct(__a, __p, std::forward<_Args>(__args)...); } # 390 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/alloc_traits.h" 3 template static constexpr void destroy(_Alloc& __a, _Tp* __p) noexcept(noexcept(_S_destroy(__a, __p, 0))) { _S_destroy(__a, __p, 0); } # 404 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/alloc_traits.h" 3 static constexpr size_type max_size(const _Alloc& __a) noexcept { return _S_max_size(__a, 0); } # 416 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/alloc_traits.h" 3 static constexpr _Alloc select_on_container_copy_construction(const _Alloc& __rhs) { return _S_select(__rhs, 0); } }; template struct allocator_traits> { using allocator_type = allocator<_Tp>; using value_type = _Tp; using pointer = _Tp*; using const_pointer = const _Tp*; using void_pointer = void*; using const_void_pointer = const void*; using difference_type = std::ptrdiff_t; using size_type = std::size_t; using propagate_on_container_copy_assignment = false_type; using propagate_on_container_move_assignment = true_type; using propagate_on_container_swap = false_type; using is_always_equal = true_type; template using rebind_alloc = allocator<_Up>; template using rebind_traits = allocator_traits>; # 475 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/alloc_traits.h" 3 [[__nodiscard__,__gnu__::__always_inline__]] static constexpr pointer allocate(allocator_type& __a, size_type __n) { return __a.allocate(__n); } # 490 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/alloc_traits.h" 3 [[__nodiscard__,__gnu__::__always_inline__]] static constexpr pointer allocate(allocator_type& __a, size_type __n, [[maybe_unused]] const_void_pointer __hint) { return __a.allocate(__n); } # 510 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/alloc_traits.h" 3 [[__gnu__::__always_inline__]] static constexpr void deallocate(allocator_type& __a, pointer __p, size_type __n) { __a.deallocate(__p, __n); } # 526 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/alloc_traits.h" 3 template [[__gnu__::__always_inline__]] static constexpr void construct(allocator_type& __a __attribute__((__unused__)), _Up* __p, _Args&&... __args) noexcept(std::is_nothrow_constructible<_Up, _Args...>::value) { std::construct_at(__p, std::forward<_Args>(__args)...); } # 547 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/alloc_traits.h" 3 template [[__gnu__::__always_inline__]] static constexpr void destroy(allocator_type& __a __attribute__((__unused__)), _Up* __p) noexcept(is_nothrow_destructible<_Up>::value) { std::destroy_at(__p); } [[__gnu__::__always_inline__]] static constexpr size_type max_size(const allocator_type& __a __attribute__((__unused__))) noexcept { return size_t(-1) / sizeof(value_type); } [[__gnu__::__always_inline__]] static constexpr allocator_type select_on_container_copy_construction(const allocator_type& __rhs) { return __rhs; } }; template<> struct allocator_traits> { using allocator_type = allocator; using value_type = void; using pointer = void*; using const_pointer = const void*; using void_pointer = void*; using const_void_pointer = const void*; using difference_type = std::ptrdiff_t; using size_type = std::size_t; using propagate_on_container_copy_assignment = false_type; using propagate_on_container_move_assignment = true_type; using propagate_on_container_swap = false_type; using is_always_equal = true_type; template using rebind_alloc = allocator<_Up>; template using rebind_traits = allocator_traits>; static void* allocate(allocator_type&, size_type, const void* = nullptr) = delete; static void deallocate(allocator_type&, void*, size_type) = delete; # 652 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/alloc_traits.h" 3 template [[__gnu__::__always_inline__]] static constexpr void construct(allocator_type&, _Up* __p, _Args&&... __args) noexcept(std::is_nothrow_constructible<_Up, _Args...>::value) { std::_Construct(__p, std::forward<_Args>(__args)...); } # 666 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/alloc_traits.h" 3 template [[__gnu__::__always_inline__]] static constexpr void destroy(allocator_type&, _Up* __p) noexcept(is_nothrow_destructible<_Up>::value) { std::_Destroy(__p); } static size_type max_size(const allocator_type&) = delete; [[__gnu__::__always_inline__]] static constexpr allocator_type select_on_container_copy_construction(const allocator_type& __rhs) { return __rhs; } }; # 704 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/alloc_traits.h" 3 template [[__gnu__::__always_inline__]] constexpr inline void __alloc_on_copy(_Alloc& __one, const _Alloc& __two) { using __traits = allocator_traits<_Alloc>; using __pocca = typename __traits::propagate_on_container_copy_assignment::type; if constexpr (__pocca::value) __one = __two; } template [[__gnu__::__always_inline__]] constexpr _Alloc __alloc_on_copy(const _Alloc& __a) { typedef allocator_traits<_Alloc> __traits; return __traits::select_on_container_copy_construction(__a); } # 741 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/alloc_traits.h" 3 template [[__gnu__::__always_inline__]] constexpr inline void __alloc_on_move(_Alloc& __one, _Alloc& __two) { using __traits = allocator_traits<_Alloc>; using __pocma = typename __traits::propagate_on_container_move_assignment::type; if constexpr (__pocma::value) __one = std::move(__two); } # 772 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/alloc_traits.h" 3 template [[__gnu__::__always_inline__]] constexpr inline void __alloc_on_swap(_Alloc& __one, _Alloc& __two) { using __traits = allocator_traits<_Alloc>; using __pocs = typename __traits::propagate_on_container_swap::type; if constexpr (__pocs::value) { using std::swap; swap(__one, __two); } } template, typename = void> struct __is_alloc_insertable_impl : false_type { }; template struct __is_alloc_insertable_impl<_Alloc, _Tp, _ValueT, __void_t::construct( std::declval<_Alloc&>(), std::declval<_ValueT*>(), std::declval<_Tp>()))>> : true_type { }; template struct __is_copy_insertable : __is_alloc_insertable_impl<_Alloc, typename _Alloc::value_type const&>::type { }; template struct __is_copy_insertable> : is_copy_constructible<_Tp> { }; template struct __is_move_insertable : __is_alloc_insertable_impl<_Alloc, typename _Alloc::value_type>::type { }; template struct __is_move_insertable> : is_move_constructible<_Tp> { }; template struct __is_allocator : false_type { }; template struct __is_allocator<_Alloc, __void_t().allocate(size_t{}))>> : true_type { }; template using _RequireAllocator = typename enable_if<__is_allocator<_Alloc>::value, _Alloc>::type; template using _RequireNotAllocator = typename enable_if::value, _Alloc>::type; template concept __allocator_like = requires (_Alloc& __a) { typename _Alloc::value_type; __a.deallocate(__a.allocate(1u), 1u); }; template struct __alloc_swap { static void _S_do_it(_Alloc&, _Alloc&) noexcept { } }; template struct __alloc_swap<_Alloc, false> { static void _S_do_it(_Alloc& __one, _Alloc& __two) noexcept { if (__one != __two) swap(__one, __two); } }; template, is_nothrow_move_constructible>::value> struct __shrink_to_fit_aux { static bool _S_do_it(_Tp&) noexcept { return false; } }; template struct __shrink_to_fit_aux<_Tp, true> { constexpr static bool _S_do_it(_Tp& __c) noexcept { try { _Tp(__make_move_if_noexcept_iterator(__c.begin()), __make_move_if_noexcept_iterator(__c.end()), __c.get_allocator()).swap(__c); return true; } catch(...) { return false; } } }; # 922 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/alloc_traits.h" 3 template constexpr void _Destroy(_ForwardIterator __first, _ForwardIterator __last, _Allocator& __alloc) { for (; __first != __last; ++__first) allocator_traits<_Allocator>::destroy(__alloc, std::__addressof(*__first)); } template __attribute__((__always_inline__)) constexpr inline void _Destroy(_ForwardIterator __first, _ForwardIterator __last, allocator<_Tp>&) { std::_Destroy(__first, __last); } } # 35 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/ext/alloc_traits.h" 2 3 namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) { template struct __alloc_traits : std::allocator_traits<_Alloc> { typedef _Alloc allocator_type; typedef std::allocator_traits<_Alloc> _Base_type; typedef typename _Base_type::value_type value_type; typedef typename _Base_type::pointer pointer; typedef typename _Base_type::const_pointer const_pointer; typedef typename _Base_type::size_type size_type; typedef typename _Base_type::difference_type difference_type; typedef value_type& reference; typedef const value_type& const_reference; using _Base_type::allocate; using _Base_type::deallocate; using _Base_type::construct; using _Base_type::destroy; using _Base_type::max_size; private: template using __is_custom_pointer = std::__and_, std::__not_>>; public: template [[__gnu__::__always_inline__]] static constexpr std::__enable_if_t<__is_custom_pointer<_Ptr>::value> construct(_Alloc& __a, _Ptr __p, _Args&&... __args) noexcept(noexcept(_Base_type::construct(__a, std::__to_address(__p), std::forward<_Args>(__args)...))) { _Base_type::construct(__a, std::__to_address(__p), std::forward<_Args>(__args)...); } template [[__gnu__::__always_inline__]] static constexpr std::__enable_if_t<__is_custom_pointer<_Ptr>::value> destroy(_Alloc& __a, _Ptr __p) noexcept(noexcept(_Base_type::destroy(__a, std::__to_address(__p)))) { _Base_type::destroy(__a, std::__to_address(__p)); } [[__gnu__::__always_inline__]] static constexpr _Alloc _S_select_on_copy(const _Alloc& __a) { return _Base_type::select_on_container_copy_construction(__a); } [[__gnu__::__always_inline__]] static constexpr void _S_on_swap(_Alloc& __a, _Alloc& __b) { std::__alloc_on_swap(__a, __b); } [[__gnu__::__always_inline__]] static constexpr bool _S_propagate_on_copy_assign() { return _Base_type::propagate_on_container_copy_assignment::value; } [[__gnu__::__always_inline__]] static constexpr bool _S_propagate_on_move_assign() { return _Base_type::propagate_on_container_move_assignment::value; } [[__gnu__::__always_inline__]] static constexpr bool _S_propagate_on_swap() { return _Base_type::propagate_on_container_swap::value; } [[__gnu__::__always_inline__]] static constexpr bool _S_always_equal() { return _Base_type::is_always_equal::value; } __attribute__((__always_inline__)) static constexpr bool _S_nothrow_move() { return _S_propagate_on_move_assign() || _S_always_equal(); } template struct rebind { typedef typename _Base_type::template rebind_alloc<_Tp> other; }; # 180 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/ext/alloc_traits.h" 3 }; } # 40 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/hashtable_policy.h" 2 3 namespace std __attribute__ ((__visibility__ ("default"))) { template class _Hashtable; namespace __detail { template struct _Hashtable_base; template inline typename std::iterator_traits<_Iterator>::difference_type __distance_fw(_Iterator __first, _Iterator __last, std::input_iterator_tag) { return __first != __last ? 1 : 0; } template inline typename std::iterator_traits<_Iterator>::difference_type __distance_fw(_Iterator __first, _Iterator __last, std::forward_iterator_tag) { return std::distance(__first, __last); } template inline typename std::iterator_traits<_Iterator>::difference_type __distance_fw(_Iterator __first, _Iterator __last) { return __distance_fw(__first, __last, std::__iterator_category(__first)); } struct _Identity { template _Tp&& operator()(_Tp&& __x) const noexcept { return std::forward<_Tp>(__x); } }; struct _Select1st { template struct __1st_type; template struct __1st_type> { using type = _Tp; }; template struct __1st_type> { using type = const _Tp; }; template struct __1st_type<_Pair&> { using type = typename __1st_type<_Pair>::type&; }; template typename __1st_type<_Tp>::type&& operator()(_Tp&& __x) const noexcept { return std::forward<_Tp>(__x).first; } }; template struct _ConvertToValueType; template struct _ConvertToValueType<_Identity, _Value> { template constexpr _Kt&& operator()(_Kt&& __k) const noexcept { return std::forward<_Kt>(__k); } }; template struct _ConvertToValueType<_Select1st, _Value> { constexpr _Value&& operator()(_Value&& __x) const noexcept { return std::move(__x); } constexpr const _Value& operator()(const _Value& __x) const noexcept { return __x; } template constexpr std::pair<_Kt, _Val>&& operator()(std::pair<_Kt, _Val>&& __x) const noexcept { return std::move(__x); } template constexpr const std::pair<_Kt, _Val>& operator()(const std::pair<_Kt, _Val>& __x) const noexcept { return __x; } }; template struct _NodeBuilder; template<> struct _NodeBuilder<_Select1st> { template static auto _S_build(_Kt&& __k, _Arg&& __arg, const _NodeGenerator& __node_gen) -> typename _NodeGenerator::__node_ptr { return __node_gen(std::forward<_Kt>(__k), std::forward<_Arg>(__arg).second); } }; template<> struct _NodeBuilder<_Identity> { template static auto _S_build(_Kt&& __k, _Arg&&, const _NodeGenerator& __node_gen) -> typename _NodeGenerator::__node_ptr { return __node_gen(std::forward<_Kt>(__k)); } }; template struct _NodePtrGuard { _HashtableAlloc& _M_h; _NodePtr _M_ptr; ~_NodePtrGuard() { if (_M_ptr) _M_h._M_deallocate_node_ptr(_M_ptr); } }; template struct _Hashtable_alloc; template struct _ReuseOrAllocNode { private: using __node_alloc_type = _NodeAlloc; using __hashtable_alloc = _Hashtable_alloc<__node_alloc_type>; using __node_alloc_traits = typename __hashtable_alloc::__node_alloc_traits; public: using __node_ptr = typename __hashtable_alloc::__node_ptr; _ReuseOrAllocNode(__node_ptr __nodes, __hashtable_alloc& __h) : _M_nodes(__nodes), _M_h(__h) { } _ReuseOrAllocNode(const _ReuseOrAllocNode&) = delete; ~_ReuseOrAllocNode() { _M_h._M_deallocate_nodes(_M_nodes); } template __node_ptr operator()(_Args&&... __args) const { if (!_M_nodes) return _M_h._M_allocate_node(std::forward<_Args>(__args)...); __node_ptr __node = _M_nodes; _M_nodes = _M_nodes->_M_next(); __node->_M_nxt = nullptr; auto& __a = _M_h._M_node_allocator(); __node_alloc_traits::destroy(__a, __node->_M_valptr()); _NodePtrGuard<__hashtable_alloc, __node_ptr> __guard { _M_h, __node }; __node_alloc_traits::construct(__a, __node->_M_valptr(), std::forward<_Args>(__args)...); __guard._M_ptr = nullptr; return __node; } private: mutable __node_ptr _M_nodes; __hashtable_alloc& _M_h; }; template struct _AllocNode { private: using __hashtable_alloc = _Hashtable_alloc<_NodeAlloc>; public: using __node_ptr = typename __hashtable_alloc::__node_ptr; _AllocNode(__hashtable_alloc& __h) : _M_h(__h) { } template __node_ptr operator()(_Args&&... __args) const { return _M_h._M_allocate_node(std::forward<_Args>(__args)...); } private: __hashtable_alloc& _M_h; }; # 285 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/hashtable_policy.h" 3 template struct _Hashtable_traits { using __hash_cached = __bool_constant<_Cache_hash_code>; using __constant_iterators = __bool_constant<_Constant_iterators>; using __unique_keys = __bool_constant<_Unique_keys>; }; template struct _Hashtable_hash_traits { static constexpr std::size_t __small_size_threshold() noexcept { return std::__is_fast_hash<_Hash>::value ? 0 : 20; } }; # 315 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/hashtable_policy.h" 3 struct _Hash_node_base { _Hash_node_base* _M_nxt; _Hash_node_base() noexcept : _M_nxt() { } _Hash_node_base(_Hash_node_base* __next) noexcept : _M_nxt(__next) { } }; template struct _Hash_node_value_base { typedef _Value value_type; __gnu_cxx::__aligned_buffer<_Value> _M_storage; [[__gnu__::__always_inline__]] _Value* _M_valptr() noexcept { return _M_storage._M_ptr(); } [[__gnu__::__always_inline__]] const _Value* _M_valptr() const noexcept { return _M_storage._M_ptr(); } [[__gnu__::__always_inline__]] _Value& _M_v() noexcept { return *_M_valptr(); } [[__gnu__::__always_inline__]] const _Value& _M_v() const noexcept { return *_M_valptr(); } }; template struct _Hash_node_code_cache { }; template<> struct _Hash_node_code_cache { std::size_t _M_hash_code; }; template struct _Hash_node_value : _Hash_node_value_base<_Value> , _Hash_node_code_cache<_Cache_hash_code> { }; template struct _Hash_node : _Hash_node_base , _Hash_node_value<_Value, _Cache_hash_code> { _Hash_node* _M_next() const noexcept { return static_cast<_Hash_node*>(this->_M_nxt); } }; template struct _Node_iterator_base { using __node_type = _Hash_node<_Value, _Cache_hash_code>; __node_type* _M_cur; _Node_iterator_base() : _M_cur(nullptr) { } _Node_iterator_base(__node_type* __p) noexcept : _M_cur(__p) { } void _M_incr() noexcept { _M_cur = _M_cur->_M_next(); } friend bool operator==(const _Node_iterator_base& __x, const _Node_iterator_base& __y) noexcept { return __x._M_cur == __y._M_cur; } }; template struct _Node_iterator : public _Node_iterator_base<_Value, __cache> { private: using __base_type = _Node_iterator_base<_Value, __cache>; using __node_type = typename __base_type::__node_type; public: using value_type = _Value; using difference_type = std::ptrdiff_t; using iterator_category = std::forward_iterator_tag; using pointer = __conditional_t<__constant_iterators, const value_type*, value_type*>; using reference = __conditional_t<__constant_iterators, const value_type&, value_type&>; _Node_iterator() = default; explicit _Node_iterator(__node_type* __p) noexcept : __base_type(__p) { } reference operator*() const noexcept { return this->_M_cur->_M_v(); } pointer operator->() const noexcept { return this->_M_cur->_M_valptr(); } _Node_iterator& operator++() noexcept { this->_M_incr(); return *this; } _Node_iterator operator++(int) noexcept { _Node_iterator __tmp(*this); this->_M_incr(); return __tmp; } }; template struct _Node_const_iterator : public _Node_iterator_base<_Value, __cache> { private: using __base_type = _Node_iterator_base<_Value, __cache>; using __node_type = typename __base_type::__node_type; public: typedef _Value value_type; typedef std::ptrdiff_t difference_type; typedef std::forward_iterator_tag iterator_category; typedef const value_type* pointer; typedef const value_type& reference; _Node_const_iterator() = default; explicit _Node_const_iterator(__node_type* __p) noexcept : __base_type(__p) { } _Node_const_iterator(const _Node_iterator<_Value, __constant_iterators, __cache>& __x) noexcept : __base_type(__x._M_cur) { } reference operator*() const noexcept { return this->_M_cur->_M_v(); } pointer operator->() const noexcept { return this->_M_cur->_M_valptr(); } _Node_const_iterator& operator++() noexcept { this->_M_incr(); return *this; } _Node_const_iterator operator++(int) noexcept { _Node_const_iterator __tmp(*this); this->_M_incr(); return __tmp; } }; struct _Mod_range_hashing { typedef std::size_t first_argument_type; typedef std::size_t second_argument_type; typedef std::size_t result_type; result_type operator()(first_argument_type __num, second_argument_type __den) const noexcept { return __num % __den; } }; struct _Default_ranged_hash { }; struct _Prime_rehash_policy { using __has_load_factor = true_type; _Prime_rehash_policy(float __z = 1.0) noexcept : _M_max_load_factor(__z), _M_next_resize(0) { } float max_load_factor() const noexcept { return _M_max_load_factor; } std::size_t _M_next_bkt(std::size_t __n) const; std::size_t _M_bkt_for_elements(std::size_t __n) const { return __builtin_ceil(__n / (double)_M_max_load_factor); } std::pair _M_need_rehash(std::size_t __n_bkt, std::size_t __n_elt, std::size_t __n_ins) const; typedef std::size_t _State; _State _M_state() const { return _M_next_resize; } void _M_reset() noexcept { _M_next_resize = 0; } void _M_reset(_State __state) { _M_next_resize = __state; } static const std::size_t _S_growth_factor = 2; float _M_max_load_factor; mutable std::size_t _M_next_resize; }; struct _Mask_range_hashing { typedef std::size_t first_argument_type; typedef std::size_t second_argument_type; typedef std::size_t result_type; result_type operator()(first_argument_type __num, second_argument_type __den) const noexcept { return __num & (__den - 1); } }; inline std::size_t __clp2(std::size_t __n) noexcept { using __gnu_cxx::__int_traits; if (__n < 2) return __n; const unsigned __lz = sizeof(size_t) > sizeof(long) ? __builtin_clzll(__n - 1ull) : __builtin_clzl(__n - 1ul); return (size_t(1) << (__int_traits::__digits - __lz - 1)) << 1; } struct _Power2_rehash_policy { using __has_load_factor = true_type; _Power2_rehash_policy(float __z = 1.0) noexcept : _M_max_load_factor(__z), _M_next_resize(0) { } float max_load_factor() const noexcept { return _M_max_load_factor; } std::size_t _M_next_bkt(std::size_t __n) noexcept { if (__n == 0) return 1; const auto __max_width = std::min(sizeof(size_t), 8); const auto __max_bkt = size_t(1) << (__max_width * 8 - 1); std::size_t __res = __clp2(__n); if (__res == 0) __res = __max_bkt; else if (__res == 1) __res = 2; if (__res == __max_bkt) _M_next_resize = size_t(-1); else _M_next_resize = __builtin_floor(__res * (double)_M_max_load_factor); return __res; } std::size_t _M_bkt_for_elements(std::size_t __n) const noexcept { return __builtin_ceil(__n / (double)_M_max_load_factor); } std::pair _M_need_rehash(std::size_t __n_bkt, std::size_t __n_elt, std::size_t __n_ins) noexcept { if (__n_elt + __n_ins > _M_next_resize) { double __min_bkts = std::max(__n_elt + __n_ins, _M_next_resize ? 0 : 11) / (double)_M_max_load_factor; if (__min_bkts >= __n_bkt) return { true, _M_next_bkt(std::max(__builtin_floor(__min_bkts) + 1, __n_bkt * _S_growth_factor)) }; _M_next_resize = __builtin_floor(__n_bkt * (double)_M_max_load_factor); return { false, 0 }; } else return { false, 0 }; } typedef std::size_t _State; _State _M_state() const noexcept { return _M_next_resize; } void _M_reset() noexcept { _M_next_resize = 0; } void _M_reset(_State __state) noexcept { _M_next_resize = __state; } static const std::size_t _S_growth_factor = 2; float _M_max_load_factor; std::size_t _M_next_resize; }; template struct _RehashStateGuard { _RehashPolicy* _M_guarded_obj; typename _RehashPolicy::_State _M_prev_state; _RehashStateGuard(_RehashPolicy& __policy) : _M_guarded_obj(std::__addressof(__policy)) , _M_prev_state(__policy._M_state()) { } _RehashStateGuard(const _RehashStateGuard&) = delete; ~_RehashStateGuard() { if (_M_guarded_obj) _M_guarded_obj->_M_reset(_M_prev_state); } }; # 761 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/hashtable_policy.h" 3 template struct _Map_base { }; template struct _Map_base<_Key, pair, _Alloc, _Select1st, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits, false> { using mapped_type = _Val; }; template struct _Map_base<_Key, pair, _Alloc, _Select1st, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits, true> { private: using __hashtable_base = _Hashtable_base<_Key, pair, _Select1st, _Equal, _Hash, _RangeHash, _Unused, _Traits>; using __hashtable = _Hashtable<_Key, pair, _Alloc, _Select1st, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>; using __hash_code = typename __hashtable_base::__hash_code; public: using key_type = typename __hashtable_base::key_type; using mapped_type = _Val; mapped_type& operator[](const key_type& __k); mapped_type& operator[](key_type&& __k); mapped_type& at(const key_type& __k) { auto __ite = static_cast<__hashtable*>(this)->find(__k); if (!__ite._M_cur) __throw_out_of_range(("unordered_map::at")); return __ite->second; } const mapped_type& at(const key_type& __k) const { auto __ite = static_cast(this)->find(__k); if (!__ite._M_cur) __throw_out_of_range(("unordered_map::at")); return __ite->second; } }; template auto _Map_base<_Key, pair, _Alloc, _Select1st, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits, true>:: operator[](const key_type& __k) -> mapped_type& { __hashtable* __h = static_cast<__hashtable*>(this); __hash_code __code = __h->_M_hash_code(__k); std::size_t __bkt = __h->_M_bucket_index(__code); if (auto __node = __h->_M_find_node(__bkt, __k, __code)) return __node->_M_v().second; typename __hashtable::_Scoped_node __node { __h, std::piecewise_construct, std::tuple(__k), std::tuple<>() }; auto __pos = __h->_M_insert_unique_node(__bkt, __code, __node._M_node); __node._M_node = nullptr; return __pos->second; } template auto _Map_base<_Key, pair, _Alloc, _Select1st, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits, true>:: operator[](key_type&& __k) -> mapped_type& { __hashtable* __h = static_cast<__hashtable*>(this); __hash_code __code = __h->_M_hash_code(__k); std::size_t __bkt = __h->_M_bucket_index(__code); if (auto __node = __h->_M_find_node(__bkt, __k, __code)) return __node->_M_v().second; typename __hashtable::_Scoped_node __node { __h, std::piecewise_construct, std::forward_as_tuple(std::move(__k)), std::tuple<>() }; auto __pos = __h->_M_insert_unique_node(__bkt, __code, __node._M_node); __node._M_node = nullptr; return __pos->second; } template struct _Map_base, _Alloc, _Select1st, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits, __uniq> : _Map_base<_Key, pair, _Alloc, _Select1st, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits, __uniq> { }; template struct _Insert_base { protected: using __hashtable_base = _Hashtable_base<_Key, _Value, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _Traits>; using __hashtable = _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>; using __hash_cached = typename _Traits::__hash_cached; using __constant_iterators = typename _Traits::__constant_iterators; using __hashtable_alloc = _Hashtable_alloc< __alloc_rebind<_Alloc, _Hash_node<_Value, __hash_cached::value>>>; using value_type = typename __hashtable_base::value_type; using size_type = typename __hashtable_base::size_type; using __unique_keys = typename _Traits::__unique_keys; using __node_alloc_type = typename __hashtable_alloc::__node_alloc_type; using __node_gen_type = _AllocNode<__node_alloc_type>; __hashtable& _M_conjure_hashtable() { return *(static_cast<__hashtable*>(this)); } template void _M_insert_range(_InputIterator __first, _InputIterator __last, const _NodeGetter&, true_type __uks); template void _M_insert_range(_InputIterator __first, _InputIterator __last, const _NodeGetter&, false_type __uks); public: using iterator = _Node_iterator<_Value, __constant_iterators::value, __hash_cached::value>; using const_iterator = _Node_const_iterator<_Value, __constant_iterators::value, __hash_cached::value>; using __ireturn_type = __conditional_t<__unique_keys::value, std::pair, iterator>; __ireturn_type insert(const value_type& __v) { __hashtable& __h = _M_conjure_hashtable(); __node_gen_type __node_gen(__h); return __h._M_insert(__v, __node_gen, __unique_keys{}); } iterator insert(const_iterator __hint, const value_type& __v) { __hashtable& __h = _M_conjure_hashtable(); __node_gen_type __node_gen(__h); return __h._M_insert(__hint, __v, __node_gen, __unique_keys{}); } template std::pair try_emplace(const_iterator, _KType&& __k, _Args&&... __args) { __hashtable& __h = _M_conjure_hashtable(); auto __code = __h._M_hash_code(__k); std::size_t __bkt = __h._M_bucket_index(__code); if (auto __node = __h._M_find_node(__bkt, __k, __code)) return { iterator(__node), false }; typename __hashtable::_Scoped_node __node { &__h, std::piecewise_construct, std::forward_as_tuple(std::forward<_KType>(__k)), std::forward_as_tuple(std::forward<_Args>(__args)...) }; auto __it = __h._M_insert_unique_node(__bkt, __code, __node._M_node); __node._M_node = nullptr; return { __it, true }; } void insert(initializer_list __l) { this->insert(__l.begin(), __l.end()); } template void insert(_InputIterator __first, _InputIterator __last) { __hashtable& __h = _M_conjure_hashtable(); __node_gen_type __node_gen(__h); return _M_insert_range(__first, __last, __node_gen, __unique_keys{}); } }; template template void _Insert_base<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: _M_insert_range(_InputIterator __first, _InputIterator __last, const _NodeGetter& __node_gen, true_type __uks) { __hashtable& __h = _M_conjure_hashtable(); for (; __first != __last; ++__first) __h._M_insert(*__first, __node_gen, __uks); } template template void _Insert_base<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: _M_insert_range(_InputIterator __first, _InputIterator __last, const _NodeGetter& __node_gen, false_type __uks) { using __rehash_guard_t = typename __hashtable::__rehash_guard_t; using __pair_type = std::pair; size_type __n_elt = __detail::__distance_fw(__first, __last); if (__n_elt == 0) return; __hashtable& __h = _M_conjure_hashtable(); __rehash_guard_t __rehash_guard(__h._M_rehash_policy); __pair_type __do_rehash = __h._M_rehash_policy._M_need_rehash(__h._M_bucket_count, __h._M_element_count, __n_elt); if (__do_rehash.first) __h._M_rehash(__do_rehash.second, __uks); __rehash_guard._M_guarded_obj = nullptr; for (; __first != __last; ++__first) __h._M_insert(*__first, __node_gen, __uks); } template struct _Insert; template struct _Insert<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits, true> : public _Insert_base<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits> { using __base_type = _Insert_base<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>; using value_type = typename __base_type::value_type; using iterator = typename __base_type::iterator; using const_iterator = typename __base_type::const_iterator; using __ireturn_type = typename __base_type::__ireturn_type; using __unique_keys = typename __base_type::__unique_keys; using __hashtable = typename __base_type::__hashtable; using __node_gen_type = typename __base_type::__node_gen_type; using __base_type::insert; __ireturn_type insert(value_type&& __v) { __hashtable& __h = this->_M_conjure_hashtable(); __node_gen_type __node_gen(__h); return __h._M_insert(std::move(__v), __node_gen, __unique_keys{}); } iterator insert(const_iterator __hint, value_type&& __v) { __hashtable& __h = this->_M_conjure_hashtable(); __node_gen_type __node_gen(__h); return __h._M_insert(__hint, std::move(__v), __node_gen, __unique_keys{}); } }; template struct _Insert<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits, false> : public _Insert_base<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits> { using __base_type = _Insert_base<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>; using value_type = typename __base_type::value_type; using iterator = typename __base_type::iterator; using const_iterator = typename __base_type::const_iterator; using __unique_keys = typename __base_type::__unique_keys; using __hashtable = typename __base_type::__hashtable; using __ireturn_type = typename __base_type::__ireturn_type; using __base_type::insert; template using __is_cons = std::is_constructible; template using _IFcons = std::enable_if<__is_cons<_Pair>::value>; template using _IFconsp = typename _IFcons<_Pair>::type; template> __ireturn_type insert(_Pair&& __v) { __hashtable& __h = this->_M_conjure_hashtable(); return __h._M_emplace(__unique_keys{}, std::forward<_Pair>(__v)); } template> iterator insert(const_iterator __hint, _Pair&& __v) { __hashtable& __h = this->_M_conjure_hashtable(); return __h._M_emplace(__hint, __unique_keys{}, std::forward<_Pair>(__v)); } }; template using __has_load_factor = typename _Policy::__has_load_factor; template> struct _Rehash_base; template struct _Rehash_base<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits, false_type > { }; template struct _Rehash_base<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits, true_type > { private: using __hashtable = _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>; public: float max_load_factor() const noexcept { const __hashtable* __this = static_cast(this); return __this->__rehash_policy().max_load_factor(); } void max_load_factor(float __z) { __hashtable* __this = static_cast<__hashtable*>(this); __this->__rehash_policy(_RehashPolicy(__z)); } void reserve(std::size_t __n) { __hashtable* __this = static_cast<__hashtable*>(this); __this->rehash(__this->__rehash_policy()._M_bkt_for_elements(__n)); } }; template struct _Hashtable_ebo_helper; template struct _Hashtable_ebo_helper<_Nm, _Tp, true> : private _Tp { _Hashtable_ebo_helper() noexcept(noexcept(_Tp())) : _Tp() { } template _Hashtable_ebo_helper(_OtherTp&& __tp) : _Tp(std::forward<_OtherTp>(__tp)) { } const _Tp& _M_cget() const { return static_cast(*this); } _Tp& _M_get() { return static_cast<_Tp&>(*this); } }; template struct _Hashtable_ebo_helper<_Nm, _Tp, false> { _Hashtable_ebo_helper() = default; template _Hashtable_ebo_helper(_OtherTp&& __tp) : _M_tp(std::forward<_OtherTp>(__tp)) { } const _Tp& _M_cget() const { return _M_tp; } _Tp& _M_get() { return _M_tp; } private: _Tp _M_tp{}; }; template struct _Local_iterator_base; # 1301 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/hashtable_policy.h" 3 template struct _Hash_code_base : private _Hashtable_ebo_helper<1, _Hash> { private: using __ebo_hash = _Hashtable_ebo_helper<1, _Hash>; friend struct _Local_iterator_base<_Key, _Value, _ExtractKey, _Hash, _RangeHash, _Unused, false>; public: typedef _Hash hasher; hasher hash_function() const { return _M_hash(); } protected: typedef std::size_t __hash_code; _Hash_code_base() = default; _Hash_code_base(const _Hash& __hash) : __ebo_hash(__hash) { } __hash_code _M_hash_code(const _Key& __k) const { static_assert(__is_invocable{}, "hash function must be invocable with an argument of key type"); return _M_hash()(__k); } template __hash_code _M_hash_code_tr(const _Kt& __k) const { static_assert(__is_invocable{}, "hash function must be invocable with an argument of key type"); return _M_hash()(__k); } __hash_code _M_hash_code(const _Hash_node_value<_Value, false>& __n) const { return _M_hash_code(_ExtractKey{}(__n._M_v())); } __hash_code _M_hash_code(const _Hash_node_value<_Value, true>& __n) const { return __n._M_hash_code; } std::size_t _M_bucket_index(__hash_code __c, std::size_t __bkt_count) const { return _RangeHash{}(__c, __bkt_count); } std::size_t _M_bucket_index(const _Hash_node_value<_Value, false>& __n, std::size_t __bkt_count) const noexcept( noexcept(declval()(declval())) && noexcept(declval()((__hash_code)0, (std::size_t)0)) ) { return _RangeHash{}(_M_hash_code(_ExtractKey{}(__n._M_v())), __bkt_count); } std::size_t _M_bucket_index(const _Hash_node_value<_Value, true>& __n, std::size_t __bkt_count) const noexcept( noexcept(declval()((__hash_code)0, (std::size_t)0)) ) { return _RangeHash{}(__n._M_hash_code, __bkt_count); } void _M_store_code(_Hash_node_code_cache&, __hash_code) const { } void _M_copy_code(_Hash_node_code_cache&, const _Hash_node_code_cache&) const { } void _M_store_code(_Hash_node_code_cache& __n, __hash_code __c) const { __n._M_hash_code = __c; } void _M_copy_code(_Hash_node_code_cache& __to, const _Hash_node_code_cache& __from) const { __to._M_hash_code = __from._M_hash_code; } void _M_swap(_Hash_code_base& __x) { std::swap(__ebo_hash::_M_get(), __x.__ebo_hash::_M_get()); } const _Hash& _M_hash() const { return __ebo_hash::_M_cget(); } }; template struct _Local_iterator_base<_Key, _Value, _ExtractKey, _Hash, _RangeHash, _Unused, true> : public _Node_iterator_base<_Value, true> { protected: using __base_node_iter = _Node_iterator_base<_Value, true>; using __hash_code_base = _Hash_code_base<_Key, _Value, _ExtractKey, _Hash, _RangeHash, _Unused, true>; _Local_iterator_base() = default; _Local_iterator_base(const __hash_code_base&, _Hash_node<_Value, true>* __p, std::size_t __bkt, std::size_t __bkt_count) : __base_node_iter(__p), _M_bucket(__bkt), _M_bucket_count(__bkt_count) { } void _M_incr() { __base_node_iter::_M_incr(); if (this->_M_cur) { std::size_t __bkt = _RangeHash{}(this->_M_cur->_M_hash_code, _M_bucket_count); if (__bkt != _M_bucket) this->_M_cur = nullptr; } } std::size_t _M_bucket; std::size_t _M_bucket_count; public: std::size_t _M_get_bucket() const { return _M_bucket; } }; template::value> struct _Hash_code_storage { __gnu_cxx::__aligned_buffer<_Tp> _M_storage; _Tp* _M_h() { return _M_storage._M_ptr(); } const _Tp* _M_h() const { return _M_storage._M_ptr(); } }; template struct _Hash_code_storage<_Tp, true> { static_assert( std::is_empty<_Tp>::value, "Type must be empty" ); _Tp* _M_h() { return reinterpret_cast<_Tp*>(this); } const _Tp* _M_h() const { return reinterpret_cast(this); } }; template using __hash_code_for_local_iter = _Hash_code_storage<_Hash_code_base<_Key, _Value, _ExtractKey, _Hash, _RangeHash, _Unused, false>>; template struct _Local_iterator_base<_Key, _Value, _ExtractKey, _Hash, _RangeHash, _Unused, false> : __hash_code_for_local_iter<_Key, _Value, _ExtractKey, _Hash, _RangeHash, _Unused> , _Node_iterator_base<_Value, false> { protected: using __hash_code_base = _Hash_code_base<_Key, _Value, _ExtractKey, _Hash, _RangeHash, _Unused, false>; using __node_iter_base = _Node_iterator_base<_Value, false>; _Local_iterator_base() : _M_bucket_count(-1) { } _Local_iterator_base(const __hash_code_base& __base, _Hash_node<_Value, false>* __p, std::size_t __bkt, std::size_t __bkt_count) : __node_iter_base(__p), _M_bucket(__bkt), _M_bucket_count(__bkt_count) { _M_init(__base); } ~_Local_iterator_base() { if (_M_bucket_count != size_t(-1)) _M_destroy(); } _Local_iterator_base(const _Local_iterator_base& __iter) : __node_iter_base(__iter._M_cur), _M_bucket(__iter._M_bucket) , _M_bucket_count(__iter._M_bucket_count) { if (_M_bucket_count != size_t(-1)) _M_init(*__iter._M_h()); } _Local_iterator_base& operator=(const _Local_iterator_base& __iter) { if (_M_bucket_count != -1) _M_destroy(); this->_M_cur = __iter._M_cur; _M_bucket = __iter._M_bucket; _M_bucket_count = __iter._M_bucket_count; if (_M_bucket_count != -1) _M_init(*__iter._M_h()); return *this; } void _M_incr() { __node_iter_base::_M_incr(); if (this->_M_cur) { std::size_t __bkt = this->_M_h()->_M_bucket_index(*this->_M_cur, _M_bucket_count); if (__bkt != _M_bucket) this->_M_cur = nullptr; } } std::size_t _M_bucket; std::size_t _M_bucket_count; void _M_init(const __hash_code_base& __base) { ::new(this->_M_h()) __hash_code_base(__base); } void _M_destroy() { this->_M_h()->~__hash_code_base(); } public: std::size_t _M_get_bucket() const { return _M_bucket; } }; template struct _Local_iterator : public _Local_iterator_base<_Key, _Value, _ExtractKey, _Hash, _RangeHash, _Unused, __cache> { private: using __base_type = _Local_iterator_base<_Key, _Value, _ExtractKey, _Hash, _RangeHash, _Unused, __cache>; using __hash_code_base = typename __base_type::__hash_code_base; public: using value_type = _Value; using pointer = __conditional_t<__constant_iterators, const value_type*, value_type*>; using reference = __conditional_t<__constant_iterators, const value_type&, value_type&>; using difference_type = ptrdiff_t; using iterator_category = forward_iterator_tag; _Local_iterator() = default; _Local_iterator(const __hash_code_base& __base, _Hash_node<_Value, __cache>* __n, std::size_t __bkt, std::size_t __bkt_count) : __base_type(__base, __n, __bkt, __bkt_count) { } reference operator*() const { return this->_M_cur->_M_v(); } pointer operator->() const { return this->_M_cur->_M_valptr(); } _Local_iterator& operator++() { this->_M_incr(); return *this; } _Local_iterator operator++(int) { _Local_iterator __tmp(*this); this->_M_incr(); return __tmp; } }; template struct _Local_const_iterator : public _Local_iterator_base<_Key, _Value, _ExtractKey, _Hash, _RangeHash, _Unused, __cache> { private: using __base_type = _Local_iterator_base<_Key, _Value, _ExtractKey, _Hash, _RangeHash, _Unused, __cache>; using __hash_code_base = typename __base_type::__hash_code_base; public: typedef _Value value_type; typedef const value_type* pointer; typedef const value_type& reference; typedef std::ptrdiff_t difference_type; typedef std::forward_iterator_tag iterator_category; _Local_const_iterator() = default; _Local_const_iterator(const __hash_code_base& __base, _Hash_node<_Value, __cache>* __n, std::size_t __bkt, std::size_t __bkt_count) : __base_type(__base, __n, __bkt, __bkt_count) { } _Local_const_iterator(const _Local_iterator<_Key, _Value, _ExtractKey, _Hash, _RangeHash, _Unused, __constant_iterators, __cache>& __x) : __base_type(__x) { } reference operator*() const { return this->_M_cur->_M_v(); } pointer operator->() const { return this->_M_cur->_M_valptr(); } _Local_const_iterator& operator++() { this->_M_incr(); return *this; } _Local_const_iterator operator++(int) { _Local_const_iterator __tmp(*this); this->_M_incr(); return __tmp; } }; # 1680 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/hashtable_policy.h" 3 template struct _Hashtable_base : public _Hash_code_base<_Key, _Value, _ExtractKey, _Hash, _RangeHash, _Unused, _Traits::__hash_cached::value>, private _Hashtable_ebo_helper<0, _Equal> { public: typedef _Key key_type; typedef _Value value_type; typedef _Equal key_equal; typedef std::size_t size_type; typedef std::ptrdiff_t difference_type; using __traits_type = _Traits; using __hash_cached = typename __traits_type::__hash_cached; using __hash_code_base = _Hash_code_base<_Key, _Value, _ExtractKey, _Hash, _RangeHash, _Unused, __hash_cached::value>; using __hash_code = typename __hash_code_base::__hash_code; private: using _EqualEBO = _Hashtable_ebo_helper<0, _Equal>; static bool _S_equals(__hash_code, const _Hash_node_code_cache&) { return true; } static bool _S_node_equals(const _Hash_node_code_cache&, const _Hash_node_code_cache&) { return true; } static bool _S_equals(__hash_code __c, const _Hash_node_code_cache& __n) { return __c == __n._M_hash_code; } static bool _S_node_equals(const _Hash_node_code_cache& __lhn, const _Hash_node_code_cache& __rhn) { return __lhn._M_hash_code == __rhn._M_hash_code; } protected: _Hashtable_base() = default; _Hashtable_base(const _Hash& __hash, const _Equal& __eq) : __hash_code_base(__hash), _EqualEBO(__eq) { } bool _M_key_equals(const _Key& __k, const _Hash_node_value<_Value, __hash_cached::value>& __n) const { static_assert(__is_invocable{}, "key equality predicate must be invocable with two arguments of " "key type"); return _M_eq()(__k, _ExtractKey{}(__n._M_v())); } template bool _M_key_equals_tr(const _Kt& __k, const _Hash_node_value<_Value, __hash_cached::value>& __n) const { static_assert( __is_invocable{}, "key equality predicate must be invocable with two arguments of " "key type"); return _M_eq()(__k, _ExtractKey{}(__n._M_v())); } bool _M_equals(const _Key& __k, __hash_code __c, const _Hash_node_value<_Value, __hash_cached::value>& __n) const { return _S_equals(__c, __n) && _M_key_equals(__k, __n); } template bool _M_equals_tr(const _Kt& __k, __hash_code __c, const _Hash_node_value<_Value, __hash_cached::value>& __n) const { return _S_equals(__c, __n) && _M_key_equals_tr(__k, __n); } bool _M_node_equals( const _Hash_node_value<_Value, __hash_cached::value>& __lhn, const _Hash_node_value<_Value, __hash_cached::value>& __rhn) const { return _S_node_equals(__lhn, __rhn) && _M_key_equals(_ExtractKey{}(__lhn._M_v()), __rhn); } void _M_swap(_Hashtable_base& __x) { __hash_code_base::_M_swap(__x); std::swap(_EqualEBO::_M_get(), __x._EqualEBO::_M_get()); } const _Equal& _M_eq() const { return _EqualEBO::_M_cget(); } }; # 1796 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/hashtable_policy.h" 3 template struct _Equality; template struct _Equality<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits, true> { using __hashtable = _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>; bool _M_equal(const __hashtable&) const; }; template bool _Equality<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits, true>:: _M_equal(const __hashtable& __other) const { using __node_ptr = typename __hashtable::__node_ptr; const __hashtable* __this = static_cast(this); if (__this->size() != __other.size()) return false; for (auto __x_n = __this->_M_begin(); __x_n; __x_n = __x_n->_M_next()) { std::size_t __ybkt = __other._M_bucket_index(*__x_n); auto __prev_n = __other._M_buckets[__ybkt]; if (!__prev_n) return false; for (__node_ptr __n = static_cast<__node_ptr>(__prev_n->_M_nxt);; __n = __n->_M_next()) { if (__n->_M_v() == __x_n->_M_v()) break; if (!__n->_M_nxt || __other._M_bucket_index(*__n->_M_next()) != __ybkt) return false; } } return true; } template struct _Equality<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits, false> { using __hashtable = _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>; bool _M_equal(const __hashtable&) const; }; template bool _Equality<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits, false>:: _M_equal(const __hashtable& __other) const { using __node_ptr = typename __hashtable::__node_ptr; using const_iterator = typename __hashtable::const_iterator; const __hashtable* __this = static_cast(this); if (__this->size() != __other.size()) return false; for (auto __x_n = __this->_M_begin(); __x_n;) { std::size_t __x_count = 1; auto __x_n_end = __x_n->_M_next(); for (; __x_n_end && __this->key_eq()(_ExtractKey{}(__x_n->_M_v()), _ExtractKey{}(__x_n_end->_M_v())); __x_n_end = __x_n_end->_M_next()) ++__x_count; std::size_t __ybkt = __other._M_bucket_index(*__x_n); auto __y_prev_n = __other._M_buckets[__ybkt]; if (!__y_prev_n) return false; __node_ptr __y_n = static_cast<__node_ptr>(__y_prev_n->_M_nxt); for (;;) { if (__this->key_eq()(_ExtractKey{}(__y_n->_M_v()), _ExtractKey{}(__x_n->_M_v()))) break; auto __y_ref_n = __y_n; for (__y_n = __y_n->_M_next(); __y_n; __y_n = __y_n->_M_next()) if (!__other._M_node_equals(*__y_ref_n, *__y_n)) break; if (!__y_n || __other._M_bucket_index(*__y_n) != __ybkt) return false; } auto __y_n_end = __y_n; for (; __y_n_end; __y_n_end = __y_n_end->_M_next()) if (--__x_count == 0) break; if (__x_count != 0) return false; const_iterator __itx(__x_n), __itx_end(__x_n_end); const_iterator __ity(__y_n); if (!std::is_permutation(__itx, __itx_end, __ity)) return false; __x_n = __x_n_end; } return true; } template struct _Hashtable_alloc : private _Hashtable_ebo_helper<0, _NodeAlloc> { private: using __ebo_node_alloc = _Hashtable_ebo_helper<0, _NodeAlloc>; template struct __get_value_type; template struct __get_value_type<_Hash_node<_Val, _Cache_hash_code>> { using type = _Val; }; public: using __node_type = typename _NodeAlloc::value_type; using __node_alloc_type = _NodeAlloc; using __node_alloc_traits = __gnu_cxx::__alloc_traits<__node_alloc_type>; using __value_alloc_traits = typename __node_alloc_traits::template rebind_traits::type>; using __node_ptr = __node_type*; using __node_base = _Hash_node_base; using __node_base_ptr = __node_base*; using __buckets_alloc_type = __alloc_rebind<__node_alloc_type, __node_base_ptr>; using __buckets_alloc_traits = std::allocator_traits<__buckets_alloc_type>; using __buckets_ptr = __node_base_ptr*; _Hashtable_alloc() = default; _Hashtable_alloc(const _Hashtable_alloc&) = default; _Hashtable_alloc(_Hashtable_alloc&&) = default; template _Hashtable_alloc(_Alloc&& __a) : __ebo_node_alloc(std::forward<_Alloc>(__a)) { } __node_alloc_type& _M_node_allocator() { return __ebo_node_alloc::_M_get(); } const __node_alloc_type& _M_node_allocator() const { return __ebo_node_alloc::_M_cget(); } template __node_ptr _M_allocate_node(_Args&&... __args); void _M_deallocate_node(__node_ptr __n); void _M_deallocate_node_ptr(__node_ptr __n); void _M_deallocate_nodes(__node_ptr __n); __buckets_ptr _M_allocate_buckets(std::size_t __bkt_count); void _M_deallocate_buckets(__buckets_ptr, std::size_t __bkt_count); }; template template auto _Hashtable_alloc<_NodeAlloc>::_M_allocate_node(_Args&&... __args) -> __node_ptr { auto& __alloc = _M_node_allocator(); auto __nptr = __node_alloc_traits::allocate(__alloc, 1); __node_ptr __n = std::__to_address(__nptr); try { ::new ((void*)__n) __node_type; __node_alloc_traits::construct(__alloc, __n->_M_valptr(), std::forward<_Args>(__args)...); return __n; } catch(...) { __n->~__node_type(); __node_alloc_traits::deallocate(__alloc, __nptr, 1); throw; } } template void _Hashtable_alloc<_NodeAlloc>::_M_deallocate_node(__node_ptr __n) { __node_alloc_traits::destroy(_M_node_allocator(), __n->_M_valptr()); _M_deallocate_node_ptr(__n); } template void _Hashtable_alloc<_NodeAlloc>::_M_deallocate_node_ptr(__node_ptr __n) { typedef typename __node_alloc_traits::pointer _Ptr; auto __ptr = std::pointer_traits<_Ptr>::pointer_to(*__n); __n->~__node_type(); __node_alloc_traits::deallocate(_M_node_allocator(), __ptr, 1); } template void _Hashtable_alloc<_NodeAlloc>::_M_deallocate_nodes(__node_ptr __n) { while (__n) { __node_ptr __tmp = __n; __n = __n->_M_next(); _M_deallocate_node(__tmp); } } template auto _Hashtable_alloc<_NodeAlloc>::_M_allocate_buckets(std::size_t __bkt_count) -> __buckets_ptr { __buckets_alloc_type __alloc(_M_node_allocator()); auto __ptr = __buckets_alloc_traits::allocate(__alloc, __bkt_count); __buckets_ptr __p = std::__to_address(__ptr); __builtin_memset(__p, 0, __bkt_count * sizeof(__node_base_ptr)); return __p; } template void _Hashtable_alloc<_NodeAlloc>:: _M_deallocate_buckets(__buckets_ptr __bkts, std::size_t __bkt_count) { typedef typename __buckets_alloc_traits::pointer _Ptr; auto __ptr = std::pointer_traits<_Ptr>::pointer_to(*__bkts); __buckets_alloc_type __alloc(_M_node_allocator()); __buckets_alloc_traits::deallocate(__alloc, __ptr, __bkt_count); } } } # 36 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/hashtable.h" 2 3 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/enable_special_members.h" 1 3 # 34 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/enable_special_members.h" 3 namespace std __attribute__ ((__visibility__ ("default"))) { struct _Enable_default_constructor_tag { explicit constexpr _Enable_default_constructor_tag() = default; }; template struct _Enable_default_constructor { constexpr _Enable_default_constructor() noexcept = default; constexpr _Enable_default_constructor(_Enable_default_constructor const&) noexcept = default; constexpr _Enable_default_constructor(_Enable_default_constructor&&) noexcept = default; _Enable_default_constructor& operator=(_Enable_default_constructor const&) noexcept = default; _Enable_default_constructor& operator=(_Enable_default_constructor&&) noexcept = default; constexpr explicit _Enable_default_constructor(_Enable_default_constructor_tag) { } }; template struct _Enable_destructor { }; template struct _Enable_copy_move { }; # 96 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/enable_special_members.h" 3 template struct _Enable_special_members : private _Enable_default_constructor<_Default, _Tag>, private _Enable_destructor<_Destructor, _Tag>, private _Enable_copy_move<_Copy, _CopyAssignment, _Move, _MoveAssignment, _Tag> { }; template struct _Enable_default_constructor { constexpr _Enable_default_constructor() noexcept = delete; constexpr _Enable_default_constructor(_Enable_default_constructor const&) noexcept = default; constexpr _Enable_default_constructor(_Enable_default_constructor&&) noexcept = default; _Enable_default_constructor& operator=(_Enable_default_constructor const&) noexcept = default; _Enable_default_constructor& operator=(_Enable_default_constructor&&) noexcept = default; constexpr explicit _Enable_default_constructor(_Enable_default_constructor_tag) { } }; template struct _Enable_destructor { ~_Enable_destructor() noexcept = delete; }; template struct _Enable_copy_move { constexpr _Enable_copy_move() noexcept = default; constexpr _Enable_copy_move(_Enable_copy_move const&) noexcept = delete; constexpr _Enable_copy_move(_Enable_copy_move&&) noexcept = default; _Enable_copy_move& operator=(_Enable_copy_move const&) noexcept = default; _Enable_copy_move& operator=(_Enable_copy_move&&) noexcept = default; }; template struct _Enable_copy_move { constexpr _Enable_copy_move() noexcept = default; constexpr _Enable_copy_move(_Enable_copy_move const&) noexcept = default; constexpr _Enable_copy_move(_Enable_copy_move&&) noexcept = default; _Enable_copy_move& operator=(_Enable_copy_move const&) noexcept = delete; _Enable_copy_move& operator=(_Enable_copy_move&&) noexcept = default; }; template struct _Enable_copy_move { constexpr _Enable_copy_move() noexcept = default; constexpr _Enable_copy_move(_Enable_copy_move const&) noexcept = delete; constexpr _Enable_copy_move(_Enable_copy_move&&) noexcept = default; _Enable_copy_move& operator=(_Enable_copy_move const&) noexcept = delete; _Enable_copy_move& operator=(_Enable_copy_move&&) noexcept = default; }; template struct _Enable_copy_move { constexpr _Enable_copy_move() noexcept = default; constexpr _Enable_copy_move(_Enable_copy_move const&) noexcept = default; constexpr _Enable_copy_move(_Enable_copy_move&&) noexcept = delete; _Enable_copy_move& operator=(_Enable_copy_move const&) noexcept = default; _Enable_copy_move& operator=(_Enable_copy_move&&) noexcept = default; }; template struct _Enable_copy_move { constexpr _Enable_copy_move() noexcept = default; constexpr _Enable_copy_move(_Enable_copy_move const&) noexcept = delete; constexpr _Enable_copy_move(_Enable_copy_move&&) noexcept = delete; _Enable_copy_move& operator=(_Enable_copy_move const&) noexcept = default; _Enable_copy_move& operator=(_Enable_copy_move&&) noexcept = default; }; template struct _Enable_copy_move { constexpr _Enable_copy_move() noexcept = default; constexpr _Enable_copy_move(_Enable_copy_move const&) noexcept = default; constexpr _Enable_copy_move(_Enable_copy_move&&) noexcept = delete; _Enable_copy_move& operator=(_Enable_copy_move const&) noexcept = delete; _Enable_copy_move& operator=(_Enable_copy_move&&) noexcept = default; }; template struct _Enable_copy_move { constexpr _Enable_copy_move() noexcept = default; constexpr _Enable_copy_move(_Enable_copy_move const&) noexcept = delete; constexpr _Enable_copy_move(_Enable_copy_move&&) noexcept = delete; _Enable_copy_move& operator=(_Enable_copy_move const&) noexcept = delete; _Enable_copy_move& operator=(_Enable_copy_move&&) noexcept = default; }; template struct _Enable_copy_move { constexpr _Enable_copy_move() noexcept = default; constexpr _Enable_copy_move(_Enable_copy_move const&) noexcept = default; constexpr _Enable_copy_move(_Enable_copy_move&&) noexcept = default; _Enable_copy_move& operator=(_Enable_copy_move const&) noexcept = default; _Enable_copy_move& operator=(_Enable_copy_move&&) noexcept = delete; }; template struct _Enable_copy_move { constexpr _Enable_copy_move() noexcept = default; constexpr _Enable_copy_move(_Enable_copy_move const&) noexcept = delete; constexpr _Enable_copy_move(_Enable_copy_move&&) noexcept = default; _Enable_copy_move& operator=(_Enable_copy_move const&) noexcept = default; _Enable_copy_move& operator=(_Enable_copy_move&&) noexcept = delete; }; template struct _Enable_copy_move { constexpr _Enable_copy_move() noexcept = default; constexpr _Enable_copy_move(_Enable_copy_move const&) noexcept = default; constexpr _Enable_copy_move(_Enable_copy_move&&) noexcept = default; _Enable_copy_move& operator=(_Enable_copy_move const&) noexcept = delete; _Enable_copy_move& operator=(_Enable_copy_move&&) noexcept = delete; }; template struct _Enable_copy_move { constexpr _Enable_copy_move() noexcept = default; constexpr _Enable_copy_move(_Enable_copy_move const&) noexcept = delete; constexpr _Enable_copy_move(_Enable_copy_move&&) noexcept = default; _Enable_copy_move& operator=(_Enable_copy_move const&) noexcept = delete; _Enable_copy_move& operator=(_Enable_copy_move&&) noexcept = delete; }; template struct _Enable_copy_move { constexpr _Enable_copy_move() noexcept = default; constexpr _Enable_copy_move(_Enable_copy_move const&) noexcept = default; constexpr _Enable_copy_move(_Enable_copy_move&&) noexcept = delete; _Enable_copy_move& operator=(_Enable_copy_move const&) noexcept = default; _Enable_copy_move& operator=(_Enable_copy_move&&) noexcept = delete; }; template struct _Enable_copy_move { constexpr _Enable_copy_move() noexcept = default; constexpr _Enable_copy_move(_Enable_copy_move const&) noexcept = delete; constexpr _Enable_copy_move(_Enable_copy_move&&) noexcept = delete; _Enable_copy_move& operator=(_Enable_copy_move const&) noexcept = default; _Enable_copy_move& operator=(_Enable_copy_move&&) noexcept = delete; }; template struct _Enable_copy_move { constexpr _Enable_copy_move() noexcept = default; constexpr _Enable_copy_move(_Enable_copy_move const&) noexcept = default; constexpr _Enable_copy_move(_Enable_copy_move&&) noexcept = delete; _Enable_copy_move& operator=(_Enable_copy_move const&) noexcept = delete; _Enable_copy_move& operator=(_Enable_copy_move&&) noexcept = delete; }; template struct _Enable_copy_move { constexpr _Enable_copy_move() noexcept = default; constexpr _Enable_copy_move(_Enable_copy_move const&) noexcept = delete; constexpr _Enable_copy_move(_Enable_copy_move&&) noexcept = delete; _Enable_copy_move& operator=(_Enable_copy_move const&) noexcept = delete; _Enable_copy_move& operator=(_Enable_copy_move&&) noexcept = delete; }; } # 37 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/hashtable.h" 2 3 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_function.h" 1 3 # 63 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_function.h" 3 namespace std __attribute__ ((__visibility__ ("default"))) { # 116 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_function.h" 3 template struct unary_function { typedef _Arg argument_type; typedef _Result result_type; } __attribute__ ((__deprecated__)); template struct binary_function { typedef _Arg1 first_argument_type; typedef _Arg2 second_argument_type; typedef _Result result_type; } __attribute__ ((__deprecated__)); # 157 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_function.h" 3 struct __is_transparent; template struct plus; template struct minus; template struct multiplies; template struct divides; template struct modulus; template struct negate; #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wdeprecated-declarations" template struct plus : public binary_function<_Tp, _Tp, _Tp> { constexpr _Tp operator()(const _Tp& __x, const _Tp& __y) const { return __x + __y; } }; template struct minus : public binary_function<_Tp, _Tp, _Tp> { constexpr _Tp operator()(const _Tp& __x, const _Tp& __y) const { return __x - __y; } }; template struct multiplies : public binary_function<_Tp, _Tp, _Tp> { constexpr _Tp operator()(const _Tp& __x, const _Tp& __y) const { return __x * __y; } }; template struct divides : public binary_function<_Tp, _Tp, _Tp> { constexpr _Tp operator()(const _Tp& __x, const _Tp& __y) const { return __x / __y; } }; template struct modulus : public binary_function<_Tp, _Tp, _Tp> { constexpr _Tp operator()(const _Tp& __x, const _Tp& __y) const { return __x % __y; } }; template struct negate : public unary_function<_Tp, _Tp> { constexpr _Tp operator()(const _Tp& __x) const { return -__x; } }; #pragma GCC diagnostic pop template<> struct plus { template constexpr auto operator()(_Tp&& __t, _Up&& __u) const noexcept(noexcept(std::forward<_Tp>(__t) + std::forward<_Up>(__u))) -> decltype(std::forward<_Tp>(__t) + std::forward<_Up>(__u)) { return std::forward<_Tp>(__t) + std::forward<_Up>(__u); } typedef __is_transparent is_transparent; }; template<> struct minus { template constexpr auto operator()(_Tp&& __t, _Up&& __u) const noexcept(noexcept(std::forward<_Tp>(__t) - std::forward<_Up>(__u))) -> decltype(std::forward<_Tp>(__t) - std::forward<_Up>(__u)) { return std::forward<_Tp>(__t) - std::forward<_Up>(__u); } typedef __is_transparent is_transparent; }; template<> struct multiplies { template constexpr auto operator()(_Tp&& __t, _Up&& __u) const noexcept(noexcept(std::forward<_Tp>(__t) * std::forward<_Up>(__u))) -> decltype(std::forward<_Tp>(__t) * std::forward<_Up>(__u)) { return std::forward<_Tp>(__t) * std::forward<_Up>(__u); } typedef __is_transparent is_transparent; }; template<> struct divides { template constexpr auto operator()(_Tp&& __t, _Up&& __u) const noexcept(noexcept(std::forward<_Tp>(__t) / std::forward<_Up>(__u))) -> decltype(std::forward<_Tp>(__t) / std::forward<_Up>(__u)) { return std::forward<_Tp>(__t) / std::forward<_Up>(__u); } typedef __is_transparent is_transparent; }; template<> struct modulus { template constexpr auto operator()(_Tp&& __t, _Up&& __u) const noexcept(noexcept(std::forward<_Tp>(__t) % std::forward<_Up>(__u))) -> decltype(std::forward<_Tp>(__t) % std::forward<_Up>(__u)) { return std::forward<_Tp>(__t) % std::forward<_Up>(__u); } typedef __is_transparent is_transparent; }; template<> struct negate { template constexpr auto operator()(_Tp&& __t) const noexcept(noexcept(-std::forward<_Tp>(__t))) -> decltype(-std::forward<_Tp>(__t)) { return -std::forward<_Tp>(__t); } typedef __is_transparent is_transparent; }; # 346 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_function.h" 3 template struct equal_to; template struct not_equal_to; template struct greater; template struct less; template struct greater_equal; template struct less_equal; #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wdeprecated-declarations" template struct equal_to : public binary_function<_Tp, _Tp, bool> { constexpr bool operator()(const _Tp& __x, const _Tp& __y) const { return __x == __y; } }; template struct not_equal_to : public binary_function<_Tp, _Tp, bool> { constexpr bool operator()(const _Tp& __x, const _Tp& __y) const { return __x != __y; } }; template struct greater : public binary_function<_Tp, _Tp, bool> { constexpr bool operator()(const _Tp& __x, const _Tp& __y) const { return __x > __y; } }; template struct less : public binary_function<_Tp, _Tp, bool> { constexpr bool operator()(const _Tp& __x, const _Tp& __y) const { return __x < __y; } }; template struct greater_equal : public binary_function<_Tp, _Tp, bool> { constexpr bool operator()(const _Tp& __x, const _Tp& __y) const { return __x >= __y; } }; template struct less_equal : public binary_function<_Tp, _Tp, bool> { constexpr bool operator()(const _Tp& __x, const _Tp& __y) const { return __x <= __y; } }; template struct greater<_Tp*> : public binary_function<_Tp*, _Tp*, bool> { constexpr bool operator()(_Tp* __x, _Tp* __y) const noexcept { if (std::__is_constant_evaluated()) return __x > __y; return (long unsigned int)__x > (long unsigned int)__y; } }; template struct less<_Tp*> : public binary_function<_Tp*, _Tp*, bool> { constexpr bool operator()(_Tp* __x, _Tp* __y) const noexcept { if (std::__is_constant_evaluated()) return __x < __y; return (long unsigned int)__x < (long unsigned int)__y; } }; template struct greater_equal<_Tp*> : public binary_function<_Tp*, _Tp*, bool> { constexpr bool operator()(_Tp* __x, _Tp* __y) const noexcept { if (std::__is_constant_evaluated()) return __x >= __y; return (long unsigned int)__x >= (long unsigned int)__y; } }; template struct less_equal<_Tp*> : public binary_function<_Tp*, _Tp*, bool> { constexpr bool operator()(_Tp* __x, _Tp* __y) const noexcept { if (std::__is_constant_evaluated()) return __x <= __y; return (long unsigned int)__x <= (long unsigned int)__y; } }; #pragma GCC diagnostic pop template<> struct equal_to { template constexpr auto operator()(_Tp&& __t, _Up&& __u) const noexcept(noexcept(std::forward<_Tp>(__t) == std::forward<_Up>(__u))) -> decltype(std::forward<_Tp>(__t) == std::forward<_Up>(__u)) { return std::forward<_Tp>(__t) == std::forward<_Up>(__u); } typedef __is_transparent is_transparent; }; template<> struct not_equal_to { template constexpr auto operator()(_Tp&& __t, _Up&& __u) const noexcept(noexcept(std::forward<_Tp>(__t) != std::forward<_Up>(__u))) -> decltype(std::forward<_Tp>(__t) != std::forward<_Up>(__u)) { return std::forward<_Tp>(__t) != std::forward<_Up>(__u); } typedef __is_transparent is_transparent; }; template<> struct greater { template constexpr auto operator()(_Tp&& __t, _Up&& __u) const noexcept(noexcept(std::forward<_Tp>(__t) > std::forward<_Up>(__u))) -> decltype(std::forward<_Tp>(__t) > std::forward<_Up>(__u)) { return _S_cmp(std::forward<_Tp>(__t), std::forward<_Up>(__u), __ptr_cmp<_Tp, _Up>{}); } template constexpr bool operator()(_Tp* __t, _Up* __u) const noexcept { return greater>{}(__t, __u); } typedef __is_transparent is_transparent; private: template static constexpr decltype(auto) _S_cmp(_Tp&& __t, _Up&& __u, false_type) { return std::forward<_Tp>(__t) > std::forward<_Up>(__u); } template static constexpr bool _S_cmp(_Tp&& __t, _Up&& __u, true_type) noexcept { return greater{}( static_cast(std::forward<_Tp>(__t)), static_cast(std::forward<_Up>(__u))); } template struct __not_overloaded2 : true_type { }; template struct __not_overloaded2<_Tp, _Up, __void_t< decltype(std::declval<_Tp>().operator>(std::declval<_Up>()))>> : false_type { }; template struct __not_overloaded : __not_overloaded2<_Tp, _Up> { }; template struct __not_overloaded<_Tp, _Up, __void_t< decltype(operator>(std::declval<_Tp>(), std::declval<_Up>()))>> : false_type { }; template using __ptr_cmp = __and_<__not_overloaded<_Tp, _Up>, is_convertible<_Tp, const volatile void*>, is_convertible<_Up, const volatile void*>>; }; template<> struct less { template constexpr auto operator()(_Tp&& __t, _Up&& __u) const noexcept(noexcept(std::forward<_Tp>(__t) < std::forward<_Up>(__u))) -> decltype(std::forward<_Tp>(__t) < std::forward<_Up>(__u)) { return _S_cmp(std::forward<_Tp>(__t), std::forward<_Up>(__u), __ptr_cmp<_Tp, _Up>{}); } template constexpr bool operator()(_Tp* __t, _Up* __u) const noexcept { return less>{}(__t, __u); } typedef __is_transparent is_transparent; private: template static constexpr decltype(auto) _S_cmp(_Tp&& __t, _Up&& __u, false_type) { return std::forward<_Tp>(__t) < std::forward<_Up>(__u); } template static constexpr bool _S_cmp(_Tp&& __t, _Up&& __u, true_type) noexcept { return less{}( static_cast(std::forward<_Tp>(__t)), static_cast(std::forward<_Up>(__u))); } template struct __not_overloaded2 : true_type { }; template struct __not_overloaded2<_Tp, _Up, __void_t< decltype(std::declval<_Tp>().operator<(std::declval<_Up>()))>> : false_type { }; template struct __not_overloaded : __not_overloaded2<_Tp, _Up> { }; template struct __not_overloaded<_Tp, _Up, __void_t< decltype(operator<(std::declval<_Tp>(), std::declval<_Up>()))>> : false_type { }; template using __ptr_cmp = __and_<__not_overloaded<_Tp, _Up>, is_convertible<_Tp, const volatile void*>, is_convertible<_Up, const volatile void*>>; }; template<> struct greater_equal { template constexpr auto operator()(_Tp&& __t, _Up&& __u) const noexcept(noexcept(std::forward<_Tp>(__t) >= std::forward<_Up>(__u))) -> decltype(std::forward<_Tp>(__t) >= std::forward<_Up>(__u)) { return _S_cmp(std::forward<_Tp>(__t), std::forward<_Up>(__u), __ptr_cmp<_Tp, _Up>{}); } template constexpr bool operator()(_Tp* __t, _Up* __u) const noexcept { return greater_equal>{}(__t, __u); } typedef __is_transparent is_transparent; private: template static constexpr decltype(auto) _S_cmp(_Tp&& __t, _Up&& __u, false_type) { return std::forward<_Tp>(__t) >= std::forward<_Up>(__u); } template static constexpr bool _S_cmp(_Tp&& __t, _Up&& __u, true_type) noexcept { return greater_equal{}( static_cast(std::forward<_Tp>(__t)), static_cast(std::forward<_Up>(__u))); } template struct __not_overloaded2 : true_type { }; template struct __not_overloaded2<_Tp, _Up, __void_t< decltype(std::declval<_Tp>().operator>=(std::declval<_Up>()))>> : false_type { }; template struct __not_overloaded : __not_overloaded2<_Tp, _Up> { }; template struct __not_overloaded<_Tp, _Up, __void_t< decltype(operator>=(std::declval<_Tp>(), std::declval<_Up>()))>> : false_type { }; template using __ptr_cmp = __and_<__not_overloaded<_Tp, _Up>, is_convertible<_Tp, const volatile void*>, is_convertible<_Up, const volatile void*>>; }; template<> struct less_equal { template constexpr auto operator()(_Tp&& __t, _Up&& __u) const noexcept(noexcept(std::forward<_Tp>(__t) <= std::forward<_Up>(__u))) -> decltype(std::forward<_Tp>(__t) <= std::forward<_Up>(__u)) { return _S_cmp(std::forward<_Tp>(__t), std::forward<_Up>(__u), __ptr_cmp<_Tp, _Up>{}); } template constexpr bool operator()(_Tp* __t, _Up* __u) const noexcept { return less_equal>{}(__t, __u); } typedef __is_transparent is_transparent; private: template static constexpr decltype(auto) _S_cmp(_Tp&& __t, _Up&& __u, false_type) { return std::forward<_Tp>(__t) <= std::forward<_Up>(__u); } template static constexpr bool _S_cmp(_Tp&& __t, _Up&& __u, true_type) noexcept { return less_equal{}( static_cast(std::forward<_Tp>(__t)), static_cast(std::forward<_Up>(__u))); } template struct __not_overloaded2 : true_type { }; template struct __not_overloaded2<_Tp, _Up, __void_t< decltype(std::declval<_Tp>().operator<=(std::declval<_Up>()))>> : false_type { }; template struct __not_overloaded : __not_overloaded2<_Tp, _Up> { }; template struct __not_overloaded<_Tp, _Up, __void_t< decltype(operator<=(std::declval<_Tp>(), std::declval<_Up>()))>> : false_type { }; template using __ptr_cmp = __and_<__not_overloaded<_Tp, _Up>, is_convertible<_Tp, const volatile void*>, is_convertible<_Up, const volatile void*>>; }; # 778 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_function.h" 3 template struct logical_and; template struct logical_or; template struct logical_not; #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wdeprecated-declarations" template struct logical_and : public binary_function<_Tp, _Tp, bool> { constexpr bool operator()(const _Tp& __x, const _Tp& __y) const { return __x && __y; } }; template struct logical_or : public binary_function<_Tp, _Tp, bool> { constexpr bool operator()(const _Tp& __x, const _Tp& __y) const { return __x || __y; } }; template struct logical_not : public unary_function<_Tp, bool> { constexpr bool operator()(const _Tp& __x) const { return !__x; } }; #pragma GCC diagnostic pop template<> struct logical_and { template constexpr auto operator()(_Tp&& __t, _Up&& __u) const noexcept(noexcept(std::forward<_Tp>(__t) && std::forward<_Up>(__u))) -> decltype(std::forward<_Tp>(__t) && std::forward<_Up>(__u)) { return std::forward<_Tp>(__t) && std::forward<_Up>(__u); } typedef __is_transparent is_transparent; }; template<> struct logical_or { template constexpr auto operator()(_Tp&& __t, _Up&& __u) const noexcept(noexcept(std::forward<_Tp>(__t) || std::forward<_Up>(__u))) -> decltype(std::forward<_Tp>(__t) || std::forward<_Up>(__u)) { return std::forward<_Tp>(__t) || std::forward<_Up>(__u); } typedef __is_transparent is_transparent; }; template<> struct logical_not { template constexpr auto operator()(_Tp&& __t) const noexcept(noexcept(!std::forward<_Tp>(__t))) -> decltype(!std::forward<_Tp>(__t)) { return !std::forward<_Tp>(__t); } typedef __is_transparent is_transparent; }; template struct bit_and; template struct bit_or; template struct bit_xor; template struct bit_not; #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wdeprecated-declarations" template struct bit_and : public binary_function<_Tp, _Tp, _Tp> { constexpr _Tp operator()(const _Tp& __x, const _Tp& __y) const { return __x & __y; } }; template struct bit_or : public binary_function<_Tp, _Tp, _Tp> { constexpr _Tp operator()(const _Tp& __x, const _Tp& __y) const { return __x | __y; } }; template struct bit_xor : public binary_function<_Tp, _Tp, _Tp> { constexpr _Tp operator()(const _Tp& __x, const _Tp& __y) const { return __x ^ __y; } }; template struct bit_not : public unary_function<_Tp, _Tp> { constexpr _Tp operator()(const _Tp& __x) const { return ~__x; } }; #pragma GCC diagnostic pop template <> struct bit_and { template constexpr auto operator()(_Tp&& __t, _Up&& __u) const noexcept(noexcept(std::forward<_Tp>(__t) & std::forward<_Up>(__u))) -> decltype(std::forward<_Tp>(__t) & std::forward<_Up>(__u)) { return std::forward<_Tp>(__t) & std::forward<_Up>(__u); } typedef __is_transparent is_transparent; }; template <> struct bit_or { template constexpr auto operator()(_Tp&& __t, _Up&& __u) const noexcept(noexcept(std::forward<_Tp>(__t) | std::forward<_Up>(__u))) -> decltype(std::forward<_Tp>(__t) | std::forward<_Up>(__u)) { return std::forward<_Tp>(__t) | std::forward<_Up>(__u); } typedef __is_transparent is_transparent; }; template <> struct bit_xor { template constexpr auto operator()(_Tp&& __t, _Up&& __u) const noexcept(noexcept(std::forward<_Tp>(__t) ^ std::forward<_Up>(__u))) -> decltype(std::forward<_Tp>(__t) ^ std::forward<_Up>(__u)) { return std::forward<_Tp>(__t) ^ std::forward<_Up>(__u); } typedef __is_transparent is_transparent; }; template <> struct bit_not { template constexpr auto operator()(_Tp&& __t) const noexcept(noexcept(~std::forward<_Tp>(__t))) -> decltype(~std::forward<_Tp>(__t)) { return ~std::forward<_Tp>(__t); } typedef __is_transparent is_transparent; }; #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wdeprecated-declarations" # 1020 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_function.h" 3 template class [[__deprecated__]] unary_negate : public unary_function { protected: _Predicate _M_pred; public: constexpr explicit unary_negate(const _Predicate& __x) : _M_pred(__x) { } constexpr bool operator()(const typename _Predicate::argument_type& __x) const { return !_M_pred(__x); } }; template __attribute__ ((__deprecated__ ("use '" "std::not_fn" "' instead"))) constexpr inline unary_negate<_Predicate> not1(const _Predicate& __pred) { return unary_negate<_Predicate>(__pred); } template class [[__deprecated__]] binary_negate : public binary_function { protected: _Predicate _M_pred; public: constexpr explicit binary_negate(const _Predicate& __x) : _M_pred(__x) { } constexpr bool operator()(const typename _Predicate::first_argument_type& __x, const typename _Predicate::second_argument_type& __y) const { return !_M_pred(__x, __y); } }; template __attribute__ ((__deprecated__ ("use '" "std::not_fn" "' instead"))) constexpr inline binary_negate<_Predicate> not2(const _Predicate& __pred) { return binary_negate<_Predicate>(__pred); } # 1101 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_function.h" 3 template class pointer_to_unary_function : public unary_function<_Arg, _Result> { protected: _Result (*_M_ptr)(_Arg); public: pointer_to_unary_function() { } explicit pointer_to_unary_function(_Result (*__x)(_Arg)) : _M_ptr(__x) { } _Result operator()(_Arg __x) const { return _M_ptr(__x); } } __attribute__ ((__deprecated__)); template __attribute__ ((__deprecated__ ("use '" "std::function" "' instead"))) inline pointer_to_unary_function<_Arg, _Result> ptr_fun(_Result (*__x)(_Arg)) { return pointer_to_unary_function<_Arg, _Result>(__x); } template class pointer_to_binary_function : public binary_function<_Arg1, _Arg2, _Result> { protected: _Result (*_M_ptr)(_Arg1, _Arg2); public: pointer_to_binary_function() { } explicit pointer_to_binary_function(_Result (*__x)(_Arg1, _Arg2)) : _M_ptr(__x) { } _Result operator()(_Arg1 __x, _Arg2 __y) const { return _M_ptr(__x, __y); } } __attribute__ ((__deprecated__)); template __attribute__ ((__deprecated__ ("use '" "std::function" "' instead"))) inline pointer_to_binary_function<_Arg1, _Arg2, _Result> ptr_fun(_Result (*__x)(_Arg1, _Arg2)) { return pointer_to_binary_function<_Arg1, _Arg2, _Result>(__x); } template struct _Identity : public unary_function<_Tp, _Tp> { _Tp& operator()(_Tp& __x) const { return __x; } const _Tp& operator()(const _Tp& __x) const { return __x; } }; template struct _Identity : _Identity<_Tp> { }; template struct _Select1st : public unary_function<_Pair, typename _Pair::first_type> { typename _Pair::first_type& operator()(_Pair& __x) const { return __x.first; } const typename _Pair::first_type& operator()(const _Pair& __x) const { return __x.first; } template typename _Pair2::first_type& operator()(_Pair2& __x) const { return __x.first; } template const typename _Pair2::first_type& operator()(const _Pair2& __x) const { return __x.first; } }; template struct _Select2nd : public unary_function<_Pair, typename _Pair::second_type> { typename _Pair::second_type& operator()(_Pair& __x) const { return __x.second; } const typename _Pair::second_type& operator()(const _Pair& __x) const { return __x.second; } }; # 1228 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_function.h" 3 template class mem_fun_t : public unary_function<_Tp*, _Ret> { public: explicit mem_fun_t(_Ret (_Tp::*__pf)()) : _M_f(__pf) { } _Ret operator()(_Tp* __p) const { return (__p->*_M_f)(); } private: _Ret (_Tp::*_M_f)(); } __attribute__ ((__deprecated__)); template class const_mem_fun_t : public unary_function { public: explicit const_mem_fun_t(_Ret (_Tp::*__pf)() const) : _M_f(__pf) { } _Ret operator()(const _Tp* __p) const { return (__p->*_M_f)(); } private: _Ret (_Tp::*_M_f)() const; } __attribute__ ((__deprecated__)); template class mem_fun_ref_t : public unary_function<_Tp, _Ret> { public: explicit mem_fun_ref_t(_Ret (_Tp::*__pf)()) : _M_f(__pf) { } _Ret operator()(_Tp& __r) const { return (__r.*_M_f)(); } private: _Ret (_Tp::*_M_f)(); } __attribute__ ((__deprecated__)); template class const_mem_fun_ref_t : public unary_function<_Tp, _Ret> { public: explicit const_mem_fun_ref_t(_Ret (_Tp::*__pf)() const) : _M_f(__pf) { } _Ret operator()(const _Tp& __r) const { return (__r.*_M_f)(); } private: _Ret (_Tp::*_M_f)() const; } __attribute__ ((__deprecated__)); template class mem_fun1_t : public binary_function<_Tp*, _Arg, _Ret> { public: explicit mem_fun1_t(_Ret (_Tp::*__pf)(_Arg)) : _M_f(__pf) { } _Ret operator()(_Tp* __p, _Arg __x) const { return (__p->*_M_f)(__x); } private: _Ret (_Tp::*_M_f)(_Arg); } __attribute__ ((__deprecated__)); template class const_mem_fun1_t : public binary_function { public: explicit const_mem_fun1_t(_Ret (_Tp::*__pf)(_Arg) const) : _M_f(__pf) { } _Ret operator()(const _Tp* __p, _Arg __x) const { return (__p->*_M_f)(__x); } private: _Ret (_Tp::*_M_f)(_Arg) const; } __attribute__ ((__deprecated__)); template class mem_fun1_ref_t : public binary_function<_Tp, _Arg, _Ret> { public: explicit mem_fun1_ref_t(_Ret (_Tp::*__pf)(_Arg)) : _M_f(__pf) { } _Ret operator()(_Tp& __r, _Arg __x) const { return (__r.*_M_f)(__x); } private: _Ret (_Tp::*_M_f)(_Arg); } __attribute__ ((__deprecated__)); template class const_mem_fun1_ref_t : public binary_function<_Tp, _Arg, _Ret> { public: explicit const_mem_fun1_ref_t(_Ret (_Tp::*__pf)(_Arg) const) : _M_f(__pf) { } _Ret operator()(const _Tp& __r, _Arg __x) const { return (__r.*_M_f)(__x); } private: _Ret (_Tp::*_M_f)(_Arg) const; } __attribute__ ((__deprecated__)); template __attribute__ ((__deprecated__ ("use '" "std::mem_fn" "' instead"))) inline mem_fun_t<_Ret, _Tp> mem_fun(_Ret (_Tp::*__f)()) { return mem_fun_t<_Ret, _Tp>(__f); } template __attribute__ ((__deprecated__ ("use '" "std::mem_fn" "' instead"))) inline const_mem_fun_t<_Ret, _Tp> mem_fun(_Ret (_Tp::*__f)() const) { return const_mem_fun_t<_Ret, _Tp>(__f); } template __attribute__ ((__deprecated__ ("use '" "std::mem_fn" "' instead"))) inline mem_fun_ref_t<_Ret, _Tp> mem_fun_ref(_Ret (_Tp::*__f)()) { return mem_fun_ref_t<_Ret, _Tp>(__f); } template __attribute__ ((__deprecated__ ("use '" "std::mem_fn" "' instead"))) inline const_mem_fun_ref_t<_Ret, _Tp> mem_fun_ref(_Ret (_Tp::*__f)() const) { return const_mem_fun_ref_t<_Ret, _Tp>(__f); } template __attribute__ ((__deprecated__ ("use '" "std::mem_fn" "' instead"))) inline mem_fun1_t<_Ret, _Tp, _Arg> mem_fun(_Ret (_Tp::*__f)(_Arg)) { return mem_fun1_t<_Ret, _Tp, _Arg>(__f); } template __attribute__ ((__deprecated__ ("use '" "std::mem_fn" "' instead"))) inline const_mem_fun1_t<_Ret, _Tp, _Arg> mem_fun(_Ret (_Tp::*__f)(_Arg) const) { return const_mem_fun1_t<_Ret, _Tp, _Arg>(__f); } template __attribute__ ((__deprecated__ ("use '" "std::mem_fn" "' instead"))) inline mem_fun1_ref_t<_Ret, _Tp, _Arg> mem_fun_ref(_Ret (_Tp::*__f)(_Arg)) { return mem_fun1_ref_t<_Ret, _Tp, _Arg>(__f); } template __attribute__ ((__deprecated__ ("use '" "std::mem_fn" "' instead"))) inline const_mem_fun1_ref_t<_Ret, _Tp, _Arg> mem_fun_ref(_Ret (_Tp::*__f)(_Arg) const) { return const_mem_fun1_ref_t<_Ret, _Tp, _Arg>(__f); } #pragma GCC diagnostic pop template> struct __has_is_transparent { }; template struct __has_is_transparent<_Func, _SfinaeType, __void_t> { typedef void type; }; template using __has_is_transparent_t = typename __has_is_transparent<_Func, _SfinaeType>::type; } # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/backward/binders.h" 1 3 # 60 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/backward/binders.h" 3 #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wdeprecated-declarations" namespace std __attribute__ ((__visibility__ ("default"))) { # 107 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/backward/binders.h" 3 template class binder1st : public unary_function { protected: _Operation op; typename _Operation::first_argument_type value; public: binder1st(const _Operation& __x, const typename _Operation::first_argument_type& __y) : op(__x), value(__y) { } typename _Operation::result_type operator()(const typename _Operation::second_argument_type& __x) const { return op(value, __x); } typename _Operation::result_type operator()(typename _Operation::second_argument_type& __x) const { return op(value, __x); } } __attribute__ ((__deprecated__ ("use '" "std::bind" "' instead"))); template __attribute__ ((__deprecated__ ("use '" "std::bind" "' instead"))) inline binder1st<_Operation> bind1st(const _Operation& __fn, const _Tp& __x) { typedef typename _Operation::first_argument_type _Arg1_type; return binder1st<_Operation>(__fn, _Arg1_type(__x)); } template class binder2nd : public unary_function { protected: _Operation op; typename _Operation::second_argument_type value; public: binder2nd(const _Operation& __x, const typename _Operation::second_argument_type& __y) : op(__x), value(__y) { } typename _Operation::result_type operator()(const typename _Operation::first_argument_type& __x) const { return op(__x, value); } typename _Operation::result_type operator()(typename _Operation::first_argument_type& __x) const { return op(__x, value); } } __attribute__ ((__deprecated__ ("use '" "std::bind" "' instead"))); template __attribute__ ((__deprecated__ ("use '" "std::bind" "' instead"))) inline binder2nd<_Operation> bind2nd(const _Operation& __fn, const _Tp& __x) { typedef typename _Operation::second_argument_type _Arg2_type; return binder2nd<_Operation>(__fn, _Arg2_type(__x)); } } #pragma GCC diagnostic pop # 1436 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_function.h" 2 3 # 38 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/hashtable.h" 2 3 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/node_handle.h" 1 3 # 35 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/node_handle.h" 3 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/version.h" 1 3 # 48 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/version.h" 3 # 37 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/node_handle.h" 2 3 namespace std __attribute__ ((__visibility__ ("default"))) { # 64 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/node_handle.h" 3 template class _Node_handle_common { using _AllocTraits = allocator_traits<_NodeAlloc>; public: using allocator_type = __alloc_rebind<_NodeAlloc, _Val>; allocator_type get_allocator() const noexcept { do { if (std::__is_constant_evaluated()) if (__builtin_expect(!bool(!this->empty()), false)) std::__glibcxx_assert_fail(); } while (false); return allocator_type(_M_alloc._M_alloc); } explicit operator bool() const noexcept { return _M_ptr != nullptr; } [[nodiscard]] bool empty() const noexcept { return _M_ptr == nullptr; } protected: constexpr _Node_handle_common() noexcept : _M_ptr() { } ~_Node_handle_common() { if (!empty()) _M_reset(); } _Node_handle_common(_Node_handle_common&& __nh) noexcept : _M_ptr(__nh._M_ptr) { if (_M_ptr) _M_move(std::move(__nh)); } _Node_handle_common& operator=(_Node_handle_common&& __nh) noexcept { if (empty()) { if (!__nh.empty()) _M_move(std::move(__nh)); } else if (__nh.empty()) _M_reset(); else { _AllocTraits::destroy(*_M_alloc, _M_ptr->_M_valptr()); _AllocTraits::deallocate(*_M_alloc, _M_ptr, 1); _M_alloc = __nh._M_alloc.release(); _M_ptr = __nh._M_ptr; __nh._M_ptr = nullptr; } return *this; } _Node_handle_common(typename _AllocTraits::pointer __ptr, const _NodeAlloc& __alloc) : _M_ptr(__ptr), _M_alloc(__alloc) { do { if (std::__is_constant_evaluated()) if (__builtin_expect(!bool(__ptr != nullptr), false)) std::__glibcxx_assert_fail(); } while (false); } void _M_swap(_Node_handle_common& __nh) noexcept { if (empty()) { if (!__nh.empty()) _M_move(std::move(__nh)); } else if (__nh.empty()) __nh._M_move(std::move(*this)); else { using std::swap; swap(_M_ptr, __nh._M_ptr); _M_alloc.swap(__nh._M_alloc); } } private: void _M_move(_Node_handle_common&& __nh) noexcept { ::new (std::__addressof(_M_alloc)) _NodeAlloc(__nh._M_alloc.release()); _M_ptr = __nh._M_ptr; __nh._M_ptr = nullptr; } void _M_reset() noexcept { _NodeAlloc __alloc = _M_alloc.release(); _AllocTraits::destroy(__alloc, _M_ptr->_M_valptr()); _AllocTraits::deallocate(__alloc, _M_ptr, 1); _M_ptr = nullptr; } void release() noexcept { _M_alloc.release(); _M_ptr = nullptr; } protected: typename _AllocTraits::pointer _M_ptr; private: union _Optional_alloc { _Optional_alloc() { } ~_Optional_alloc() { } _Optional_alloc(_Optional_alloc&&) = delete; _Optional_alloc& operator=(_Optional_alloc&&) = delete; _Optional_alloc(const _NodeAlloc& __alloc) noexcept : _M_alloc(__alloc) { } void operator=(_NodeAlloc&& __alloc) noexcept { using _ATr = _AllocTraits; if constexpr (_ATr::propagate_on_container_move_assignment::value) _M_alloc = std::move(__alloc); else if constexpr (!_AllocTraits::is_always_equal::value) do { if (std::__is_constant_evaluated()) if (__builtin_expect(!bool(_M_alloc == __alloc), false)) std::__glibcxx_assert_fail(); } while (false); } void swap(_Optional_alloc& __other) noexcept { using std::swap; if constexpr (_AllocTraits::propagate_on_container_swap::value) swap(_M_alloc, __other._M_alloc); else if constexpr (!_AllocTraits::is_always_equal::value) do { if (std::__is_constant_evaluated()) if (__builtin_expect(!bool(_M_alloc == __other._M_alloc), false)) std::__glibcxx_assert_fail(); } while (false); } _NodeAlloc& operator*() noexcept { return _M_alloc; } _NodeAlloc release() noexcept { _NodeAlloc __tmp = std::move(_M_alloc); _M_alloc.~_NodeAlloc(); return __tmp; } [[__no_unique_address__]] _NodeAlloc _M_alloc; }; [[__no_unique_address__]] _Optional_alloc _M_alloc; template friend class _Rb_tree; template friend class _Hashtable; }; template class _Node_handle : public _Node_handle_common<_Value, _NodeAlloc> { public: constexpr _Node_handle() noexcept = default; ~_Node_handle() = default; _Node_handle(_Node_handle&&) noexcept = default; _Node_handle& operator=(_Node_handle&&) noexcept = default; using key_type = _Key; using mapped_type = typename _Value::second_type; key_type& key() const noexcept { do { if (std::__is_constant_evaluated()) if (__builtin_expect(!bool(!this->empty()), false)) std::__glibcxx_assert_fail(); } while (false); return *_M_pkey; } mapped_type& mapped() const noexcept { do { if (std::__is_constant_evaluated()) if (__builtin_expect(!bool(!this->empty()), false)) std::__glibcxx_assert_fail(); } while (false); return *_M_pmapped; } void swap(_Node_handle& __nh) noexcept { this->_M_swap(__nh); using std::swap; swap(_M_pkey, __nh._M_pkey); swap(_M_pmapped, __nh._M_pmapped); } friend void swap(_Node_handle& __x, _Node_handle& __y) noexcept(noexcept(__x.swap(__y))) { __x.swap(__y); } private: using _AllocTraits = allocator_traits<_NodeAlloc>; _Node_handle(typename _AllocTraits::pointer __ptr, const _NodeAlloc& __alloc) : _Node_handle_common<_Value, _NodeAlloc>(__ptr, __alloc) { if (__ptr) { auto& __key = const_cast<_Key&>(__ptr->_M_valptr()->first); _M_pkey = _S_pointer_to(__key); _M_pmapped = _S_pointer_to(__ptr->_M_valptr()->second); } else { _M_pkey = nullptr; _M_pmapped = nullptr; } } template using __pointer = __ptr_rebind>; __pointer<_Key> _M_pkey = nullptr; __pointer _M_pmapped = nullptr; template __pointer<_Tp> _S_pointer_to(_Tp& __obj) { return pointer_traits<__pointer<_Tp>>::pointer_to(__obj); } const key_type& _M_key() const noexcept { return key(); } template friend class _Rb_tree; template friend class _Hashtable; }; template class _Node_handle<_Value, _Value, _NodeAlloc> : public _Node_handle_common<_Value, _NodeAlloc> { public: constexpr _Node_handle() noexcept = default; ~_Node_handle() = default; _Node_handle(_Node_handle&&) noexcept = default; _Node_handle& operator=(_Node_handle&&) noexcept = default; using value_type = _Value; value_type& value() const noexcept { do { if (std::__is_constant_evaluated()) if (__builtin_expect(!bool(!this->empty()), false)) std::__glibcxx_assert_fail(); } while (false); return *this->_M_ptr->_M_valptr(); } void swap(_Node_handle& __nh) noexcept { this->_M_swap(__nh); } friend void swap(_Node_handle& __x, _Node_handle& __y) noexcept(noexcept(__x.swap(__y))) { __x.swap(__y); } private: using _AllocTraits = allocator_traits<_NodeAlloc>; _Node_handle(typename _AllocTraits::pointer __ptr, const _NodeAlloc& __alloc) : _Node_handle_common<_Value, _NodeAlloc>(__ptr, __alloc) { } const value_type& _M_key() const noexcept { return value(); } template friend class _Rb_tree; template friend class _Hashtable; }; template struct _Node_insert_return { _Iterator position = _Iterator(); bool inserted = false; _NodeHandle node; }; } # 40 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/hashtable.h" 2 3 namespace std __attribute__ ((__visibility__ ("default"))) { template using __cache_default = __not_<__and_< __is_fast_hash<_Hash>, __is_nothrow_invocable>>; template using _Hashtable_enable_default_ctor = _Enable_default_constructor<__and_, is_default_constructible<_Hash>, is_default_constructible<_Allocator>>{}, __detail::_Hash_node_base>; # 181 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/hashtable.h" 3 template class _Hashtable : public __detail::_Hashtable_base<_Key, _Value, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _Traits>, public __detail::_Map_base<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>, public __detail::_Insert<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>, public __detail::_Rehash_base<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>, public __detail::_Equality<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>, private __detail::_Hashtable_alloc< __alloc_rebind<_Alloc, __detail::_Hash_node<_Value, _Traits::__hash_cached::value>>>, private _Hashtable_enable_default_ctor<_Equal, _Hash, _Alloc> { static_assert(is_same::type, _Value>::value, "unordered container must have a non-const, non-volatile value_type"); static_assert(is_same{}, "unordered container must have the same value_type as its allocator"); using __traits_type = _Traits; using __hash_cached = typename __traits_type::__hash_cached; using __constant_iterators = typename __traits_type::__constant_iterators; using __node_type = __detail::_Hash_node<_Value, __hash_cached::value>; using __node_alloc_type = __alloc_rebind<_Alloc, __node_type>; using __hashtable_alloc = __detail::_Hashtable_alloc<__node_alloc_type>; using __node_value_type = __detail::_Hash_node_value<_Value, __hash_cached::value>; using __node_ptr = typename __hashtable_alloc::__node_ptr; using __value_alloc_traits = typename __hashtable_alloc::__value_alloc_traits; using __node_alloc_traits = typename __hashtable_alloc::__node_alloc_traits; using __node_base = typename __hashtable_alloc::__node_base; using __node_base_ptr = typename __hashtable_alloc::__node_base_ptr; using __buckets_ptr = typename __hashtable_alloc::__buckets_ptr; using __insert_base = __detail::_Insert<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>; using __enable_default_ctor = _Hashtable_enable_default_ctor<_Equal, _Hash, _Alloc>; using __rehash_guard_t = __detail::_RehashStateGuard<_RehashPolicy>; public: typedef _Key key_type; typedef _Value value_type; typedef _Alloc allocator_type; typedef _Equal key_equal; typedef typename __value_alloc_traits::pointer pointer; typedef typename __value_alloc_traits::const_pointer const_pointer; typedef value_type& reference; typedef const value_type& const_reference; using iterator = typename __insert_base::iterator; using const_iterator = typename __insert_base::const_iterator; using local_iterator = __detail::_Local_iterator; using const_local_iterator = __detail::_Local_const_iterator< key_type, _Value, _ExtractKey, _Hash, _RangeHash, _Unused, __constant_iterators::value, __hash_cached::value>; private: using __rehash_type = _RehashPolicy; using __unique_keys = typename __traits_type::__unique_keys; using __hashtable_base = __detail:: _Hashtable_base<_Key, _Value, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _Traits>; using __hash_code_base = typename __hashtable_base::__hash_code_base; using __hash_code = typename __hashtable_base::__hash_code; using __ireturn_type = typename __insert_base::__ireturn_type; using __map_base = __detail::_Map_base<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>; using __rehash_base = __detail::_Rehash_base<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>; using __eq_base = __detail::_Equality<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>; using __reuse_or_alloc_node_gen_t = __detail::_ReuseOrAllocNode<__node_alloc_type>; using __alloc_node_gen_t = __detail::_AllocNode<__node_alloc_type>; using __node_builder_t = __detail::_NodeBuilder<_ExtractKey>; struct _Scoped_node { _Scoped_node(__node_ptr __n, __hashtable_alloc* __h) : _M_h(__h), _M_node(__n) { } template _Scoped_node(__hashtable_alloc* __h, _Args&&... __args) : _M_h(__h), _M_node(__h->_M_allocate_node(std::forward<_Args>(__args)...)) { } ~_Scoped_node() { if (_M_node) _M_h->_M_deallocate_node(_M_node); }; _Scoped_node(const _Scoped_node&) = delete; _Scoped_node& operator=(const _Scoped_node&) = delete; __hashtable_alloc* _M_h; __node_ptr _M_node; }; template static constexpr __conditional_t::value, const value_type&, value_type&&> __fwd_value_for(value_type& __val) noexcept { return std::move(__val); } struct __hash_code_base_access : __hash_code_base { using __hash_code_base::_M_bucket_index; }; static_assert(is_nothrow_default_constructible<_RangeHash>::value, "Functor used to map hash code to bucket index" " must be nothrow default constructible"); static_assert(noexcept( std::declval()((std::size_t)0, (std::size_t)0)), "Functor used to map hash code to bucket index must be" " noexcept"); static_assert(is_nothrow_default_constructible<_ExtractKey>::value, "_ExtractKey must be nothrow default constructible"); static_assert(noexcept( std::declval()(std::declval<_Value>())), "_ExtractKey functor must be noexcept invocable"); template friend struct __detail::_Map_base; template friend struct __detail::_Insert_base; template friend struct __detail::_Insert; template friend struct __detail::_Equality; public: using size_type = typename __hashtable_base::size_type; using difference_type = typename __hashtable_base::difference_type; using node_type = _Node_handle<_Key, _Value, __node_alloc_type>; using insert_return_type = _Node_insert_return; private: __buckets_ptr _M_buckets = &_M_single_bucket; size_type _M_bucket_count = 1; __node_base _M_before_begin; size_type _M_element_count = 0; _RehashPolicy _M_rehash_policy; __node_base_ptr _M_single_bucket = nullptr; void _M_update_bbegin() { if (auto __begin = _M_begin()) _M_buckets[_M_bucket_index(*__begin)] = &_M_before_begin; } void _M_update_bbegin(__node_ptr __n) { _M_before_begin._M_nxt = __n; _M_update_bbegin(); } bool _M_uses_single_bucket(__buckets_ptr __bkts) const { return __builtin_expect(__bkts == &_M_single_bucket, false); } bool _M_uses_single_bucket() const { return _M_uses_single_bucket(_M_buckets); } static constexpr size_t __small_size_threshold() noexcept { return __detail::_Hashtable_hash_traits<_Hash>::__small_size_threshold(); } __hashtable_alloc& _M_base_alloc() { return *this; } __buckets_ptr _M_allocate_buckets(size_type __bkt_count) { if (__builtin_expect(__bkt_count == 1, false)) { _M_single_bucket = nullptr; return &_M_single_bucket; } return __hashtable_alloc::_M_allocate_buckets(__bkt_count); } void _M_deallocate_buckets(__buckets_ptr __bkts, size_type __bkt_count) { if (_M_uses_single_bucket(__bkts)) return; __hashtable_alloc::_M_deallocate_buckets(__bkts, __bkt_count); } void _M_deallocate_buckets() { _M_deallocate_buckets(_M_buckets, _M_bucket_count); } __node_ptr _M_bucket_begin(size_type __bkt) const { __node_base_ptr __n = _M_buckets[__bkt]; return __n ? static_cast<__node_ptr>(__n->_M_nxt) : nullptr; } __node_ptr _M_begin() const { return static_cast<__node_ptr>(_M_before_begin._M_nxt); } template void _M_assign_elements(_Ht&&); template void _M_assign(_Ht&&, const _NodeGenerator&); void _M_move_assign(_Hashtable&&, true_type); void _M_move_assign(_Hashtable&&, false_type); void _M_reset() noexcept; _Hashtable(const _Hash& __h, const _Equal& __eq, const allocator_type& __a) : __hashtable_base(__h, __eq), __hashtable_alloc(__node_alloc_type(__a)), __enable_default_ctor(_Enable_default_constructor_tag{}) { } template static constexpr bool _S_nothrow_move() { if constexpr (_No_realloc) if constexpr (is_nothrow_copy_constructible<_Hash>()) return is_nothrow_copy_constructible<_Equal>(); return false; } _Hashtable(_Hashtable&& __ht, __node_alloc_type&& __a, true_type ) noexcept(_S_nothrow_move()); _Hashtable(_Hashtable&&, __node_alloc_type&&, false_type ); template _Hashtable(_InputIterator __first, _InputIterator __last, size_type __bkt_count_hint, const _Hash&, const _Equal&, const allocator_type&, true_type __uks); template _Hashtable(_InputIterator __first, _InputIterator __last, size_type __bkt_count_hint, const _Hash&, const _Equal&, const allocator_type&, false_type __uks); public: _Hashtable() = default; _Hashtable(const _Hashtable&); _Hashtable(const _Hashtable&, const allocator_type&); explicit _Hashtable(size_type __bkt_count_hint, const _Hash& __hf = _Hash(), const key_equal& __eql = key_equal(), const allocator_type& __a = allocator_type()); _Hashtable(_Hashtable&& __ht) noexcept(_S_nothrow_move()) : _Hashtable(std::move(__ht), std::move(__ht._M_node_allocator()), true_type{}) { } _Hashtable(_Hashtable&& __ht, const allocator_type& __a) noexcept(_S_nothrow_move<__node_alloc_traits::_S_always_equal()>()) : _Hashtable(std::move(__ht), __node_alloc_type(__a), typename __node_alloc_traits::is_always_equal{}) { } explicit _Hashtable(const allocator_type& __a) : __hashtable_alloc(__node_alloc_type(__a)), __enable_default_ctor(_Enable_default_constructor_tag{}) { } template _Hashtable(_InputIterator __f, _InputIterator __l, size_type __bkt_count_hint = 0, const _Hash& __hf = _Hash(), const key_equal& __eql = key_equal(), const allocator_type& __a = allocator_type()) : _Hashtable(__f, __l, __bkt_count_hint, __hf, __eql, __a, __unique_keys{}) { } _Hashtable(initializer_list __l, size_type __bkt_count_hint = 0, const _Hash& __hf = _Hash(), const key_equal& __eql = key_equal(), const allocator_type& __a = allocator_type()) : _Hashtable(__l.begin(), __l.end(), __bkt_count_hint, __hf, __eql, __a, __unique_keys{}) { } _Hashtable& operator=(const _Hashtable& __ht); _Hashtable& operator=(_Hashtable&& __ht) noexcept(__node_alloc_traits::_S_nothrow_move() && is_nothrow_move_assignable<_Hash>::value && is_nothrow_move_assignable<_Equal>::value) { constexpr bool __move_storage = __node_alloc_traits::_S_propagate_on_move_assign() || __node_alloc_traits::_S_always_equal(); _M_move_assign(std::move(__ht), __bool_constant<__move_storage>()); return *this; } _Hashtable& operator=(initializer_list __l) { __reuse_or_alloc_node_gen_t __roan(_M_begin(), *this); _M_before_begin._M_nxt = nullptr; clear(); auto __l_bkt_count = _M_rehash_policy._M_bkt_for_elements(__l.size()); if (_M_bucket_count < __l_bkt_count) rehash(__l_bkt_count); this->_M_insert_range(__l.begin(), __l.end(), __roan, __unique_keys{}); return *this; } ~_Hashtable() noexcept; void swap(_Hashtable&) noexcept(__and_<__is_nothrow_swappable<_Hash>, __is_nothrow_swappable<_Equal>>::value); iterator begin() noexcept { return iterator(_M_begin()); } const_iterator begin() const noexcept { return const_iterator(_M_begin()); } iterator end() noexcept { return iterator(nullptr); } const_iterator end() const noexcept { return const_iterator(nullptr); } const_iterator cbegin() const noexcept { return const_iterator(_M_begin()); } const_iterator cend() const noexcept { return const_iterator(nullptr); } size_type size() const noexcept { return _M_element_count; } [[__nodiscard__]] bool empty() const noexcept { return size() == 0; } allocator_type get_allocator() const noexcept { return allocator_type(this->_M_node_allocator()); } size_type max_size() const noexcept { return __node_alloc_traits::max_size(this->_M_node_allocator()); } key_equal key_eq() const { return this->_M_eq(); } size_type bucket_count() const noexcept { return _M_bucket_count; } size_type max_bucket_count() const noexcept { return max_size(); } size_type bucket_size(size_type __bkt) const { return std::distance(begin(__bkt), end(__bkt)); } size_type bucket(const key_type& __k) const { return _M_bucket_index(this->_M_hash_code(__k)); } local_iterator begin(size_type __bkt) { return local_iterator(*this, _M_bucket_begin(__bkt), __bkt, _M_bucket_count); } local_iterator end(size_type __bkt) { return local_iterator(*this, nullptr, __bkt, _M_bucket_count); } const_local_iterator begin(size_type __bkt) const { return const_local_iterator(*this, _M_bucket_begin(__bkt), __bkt, _M_bucket_count); } const_local_iterator end(size_type __bkt) const { return const_local_iterator(*this, nullptr, __bkt, _M_bucket_count); } const_local_iterator cbegin(size_type __bkt) const { return const_local_iterator(*this, _M_bucket_begin(__bkt), __bkt, _M_bucket_count); } const_local_iterator cend(size_type __bkt) const { return const_local_iterator(*this, nullptr, __bkt, _M_bucket_count); } float load_factor() const noexcept { return static_cast(size()) / static_cast(bucket_count()); } const _RehashPolicy& __rehash_policy() const { return _M_rehash_policy; } void __rehash_policy(const _RehashPolicy& __pol) { _M_rehash_policy = __pol; } iterator find(const key_type& __k); const_iterator find(const key_type& __k) const; size_type count(const key_type& __k) const; std::pair equal_range(const key_type& __k); std::pair equal_range(const key_type& __k) const; template, typename = __has_is_transparent_t<_Equal, _Kt>> iterator _M_find_tr(const _Kt& __k); template, typename = __has_is_transparent_t<_Equal, _Kt>> const_iterator _M_find_tr(const _Kt& __k) const; template, typename = __has_is_transparent_t<_Equal, _Kt>> size_type _M_count_tr(const _Kt& __k) const; template, typename = __has_is_transparent_t<_Equal, _Kt>> pair _M_equal_range_tr(const _Kt& __k); template, typename = __has_is_transparent_t<_Equal, _Kt>> pair _M_equal_range_tr(const _Kt& __k) const; private: size_type _M_bucket_index(const __node_value_type& __n) const noexcept { return __hash_code_base::_M_bucket_index(__n, _M_bucket_count); } size_type _M_bucket_index(__hash_code __c) const { return __hash_code_base::_M_bucket_index(__c, _M_bucket_count); } __node_base_ptr _M_find_before_node(const key_type&); __node_base_ptr _M_find_before_node(size_type, const key_type&, __hash_code) const; template __node_base_ptr _M_find_before_node_tr(size_type, const _Kt&, __hash_code) const; __node_ptr _M_find_node(size_type __bkt, const key_type& __key, __hash_code __c) const { __node_base_ptr __before_n = _M_find_before_node(__bkt, __key, __c); if (__before_n) return static_cast<__node_ptr>(__before_n->_M_nxt); return nullptr; } template __node_ptr _M_find_node_tr(size_type __bkt, const _Kt& __key, __hash_code __c) const { auto __before_n = _M_find_before_node_tr(__bkt, __key, __c); if (__before_n) return static_cast<__node_ptr>(__before_n->_M_nxt); return nullptr; } void _M_insert_bucket_begin(size_type __bkt, __node_ptr __node) { if (_M_buckets[__bkt]) { __node->_M_nxt = _M_buckets[__bkt]->_M_nxt; _M_buckets[__bkt]->_M_nxt = __node; } else { __node->_M_nxt = _M_before_begin._M_nxt; _M_before_begin._M_nxt = __node; if (__node->_M_nxt) _M_buckets[_M_bucket_index(*__node->_M_next())] = __node; _M_buckets[__bkt] = &_M_before_begin; } } void _M_remove_bucket_begin(size_type __bkt, __node_ptr __next_n, size_type __next_bkt) { if (!__next_n) _M_buckets[__bkt] = nullptr; else if (__next_bkt != __bkt) { _M_buckets[__next_bkt] = _M_buckets[__bkt]; _M_buckets[__bkt] = nullptr; } } __node_base_ptr _M_get_previous_node(size_type __bkt, __node_ptr __n); pair<__node_ptr, __hash_code> _M_compute_hash_code(__node_ptr __hint, const key_type& __k) const; iterator _M_insert_unique_node(size_type __bkt, __hash_code, __node_ptr __n, size_type __n_elt = 1); iterator _M_insert_multi_node(__node_ptr __hint, __hash_code __code, __node_ptr __n); template std::pair _M_emplace(true_type __uks, _Args&&... __args); template iterator _M_emplace(false_type __uks, _Args&&... __args) { return _M_emplace(cend(), __uks, std::forward<_Args>(__args)...); } template iterator _M_emplace(const_iterator, true_type __uks, _Args&&... __args) { return _M_emplace(__uks, std::forward<_Args>(__args)...).first; } template iterator _M_emplace(const_iterator, false_type __uks, _Args&&... __args); template std::pair _M_insert_unique(_Kt&&, _Arg&&, const _NodeGenerator&); template static __conditional_t< __and_<__is_nothrow_invocable<_Hash&, const key_type&>, __not_<__is_nothrow_invocable<_Hash&, _Kt>>>::value, key_type, _Kt&&> _S_forward_key(_Kt&& __k) { return std::forward<_Kt>(__k); } static const key_type& _S_forward_key(const key_type& __k) { return __k; } static key_type&& _S_forward_key(key_type&& __k) { return std::move(__k); } template std::pair _M_insert_unique_aux(_Arg&& __arg, const _NodeGenerator& __node_gen) { return _M_insert_unique( _S_forward_key(_ExtractKey{}(std::forward<_Arg>(__arg))), std::forward<_Arg>(__arg), __node_gen); } template std::pair _M_insert(_Arg&& __arg, const _NodeGenerator& __node_gen, true_type ) { using __to_value = __detail::_ConvertToValueType<_ExtractKey, value_type>; return _M_insert_unique_aux( __to_value{}(std::forward<_Arg>(__arg)), __node_gen); } template iterator _M_insert(_Arg&& __arg, const _NodeGenerator& __node_gen, false_type __uks) { using __to_value = __detail::_ConvertToValueType<_ExtractKey, value_type>; return _M_insert(cend(), __to_value{}(std::forward<_Arg>(__arg)), __node_gen, __uks); } template iterator _M_insert(const_iterator, _Arg&& __arg, const _NodeGenerator& __node_gen, true_type __uks) { return _M_insert(std::forward<_Arg>(__arg), __node_gen, __uks).first; } template iterator _M_insert(const_iterator, _Arg&&, const _NodeGenerator&, false_type __uks); size_type _M_erase(true_type __uks, const key_type&); size_type _M_erase(false_type __uks, const key_type&); iterator _M_erase(size_type __bkt, __node_base_ptr __prev_n, __node_ptr __n); public: template __ireturn_type emplace(_Args&&... __args) { return _M_emplace(__unique_keys{}, std::forward<_Args>(__args)...); } template iterator emplace_hint(const_iterator __hint, _Args&&... __args) { return _M_emplace(__hint, __unique_keys{}, std::forward<_Args>(__args)...); } iterator erase(const_iterator); iterator erase(iterator __it) { return erase(const_iterator(__it)); } size_type erase(const key_type& __k) { return _M_erase(__unique_keys{}, __k); } iterator erase(const_iterator, const_iterator); void clear() noexcept; void rehash(size_type __bkt_count); insert_return_type _M_reinsert_node(node_type&& __nh) { insert_return_type __ret; if (__nh.empty()) __ret.position = end(); else { do { if (std::__is_constant_evaluated()) if (__builtin_expect(!bool(get_allocator() == __nh.get_allocator()), false)) std::__glibcxx_assert_fail(); } while (false); __node_ptr __n = nullptr; const key_type& __k = __nh._M_key(); const size_type __size = size(); if (__size <= __small_size_threshold()) { for (__n = _M_begin(); __n; __n = __n->_M_next()) if (this->_M_key_equals(__k, *__n)) break; } __hash_code __code; size_type __bkt; if (!__n) { __code = this->_M_hash_code(__k); __bkt = _M_bucket_index(__code); if (__size > __small_size_threshold()) __n = _M_find_node(__bkt, __k, __code); } if (__n) { __ret.node = std::move(__nh); __ret.position = iterator(__n); __ret.inserted = false; } else { __ret.position = _M_insert_unique_node(__bkt, __code, __nh._M_ptr); __nh.release(); __ret.inserted = true; } } return __ret; } iterator _M_reinsert_node_multi(const_iterator __hint, node_type&& __nh) { if (__nh.empty()) return end(); do { if (std::__is_constant_evaluated()) if (__builtin_expect(!bool(get_allocator() == __nh.get_allocator()), false)) std::__glibcxx_assert_fail(); } while (false); const key_type& __k = __nh._M_key(); auto __code = this->_M_hash_code(__k); auto __ret = _M_insert_multi_node(__hint._M_cur, __code, __nh._M_ptr); __nh.release(); return __ret; } private: node_type _M_extract_node(size_t __bkt, __node_base_ptr __prev_n) { __node_ptr __n = static_cast<__node_ptr>(__prev_n->_M_nxt); if (__prev_n == _M_buckets[__bkt]) _M_remove_bucket_begin(__bkt, __n->_M_next(), __n->_M_nxt ? _M_bucket_index(*__n->_M_next()) : 0); else if (__n->_M_nxt) { size_type __next_bkt = _M_bucket_index(*__n->_M_next()); if (__next_bkt != __bkt) _M_buckets[__next_bkt] = __prev_n; } __prev_n->_M_nxt = __n->_M_nxt; __n->_M_nxt = nullptr; --_M_element_count; return { __n, this->_M_node_allocator() }; } template __hash_code _M_src_hash_code(const _H2&, const key_type& __k, const __node_value_type& __src_n) const { if constexpr (std::is_same_v<_H2, _Hash>) if constexpr (std::is_empty_v<_Hash>) return this->_M_hash_code(__src_n); return this->_M_hash_code(__k); } public: node_type extract(const_iterator __pos) { size_t __bkt = _M_bucket_index(*__pos._M_cur); return _M_extract_node(__bkt, _M_get_previous_node(__bkt, __pos._M_cur)); } node_type extract(const _Key& __k) { node_type __nh; __hash_code __code = this->_M_hash_code(__k); std::size_t __bkt = _M_bucket_index(__code); if (__node_base_ptr __prev_node = _M_find_before_node(__bkt, __k, __code)) __nh = _M_extract_node(__bkt, __prev_node); return __nh; } template void _M_merge_unique(_Compatible_Hashtable& __src) { static_assert(is_same_v, "Node types are compatible"); do { if (std::__is_constant_evaluated()) if (__builtin_expect(!bool(get_allocator() == __src.get_allocator()), false)) std::__glibcxx_assert_fail(); } while (false); auto __n_elt = __src.size(); for (auto __i = __src.cbegin(), __end = __src.cend(); __i != __end;) { auto __pos = __i++; const size_type __size = size(); const key_type& __k = _ExtractKey{}(*__pos); if (__size <= __small_size_threshold()) { bool __found = false; for (auto __n = _M_begin(); __n; __n = __n->_M_next()) if (this->_M_key_equals(__k, *__n)) { __found = true; break; } if (__found) { if (__n_elt != 1) --__n_elt; continue; } } __hash_code __code = _M_src_hash_code(__src.hash_function(), __k, *__pos._M_cur); size_type __bkt = _M_bucket_index(__code); if (__size <= __small_size_threshold() || _M_find_node(__bkt, __k, __code) == nullptr) { auto __nh = __src.extract(__pos); _M_insert_unique_node(__bkt, __code, __nh._M_ptr, __n_elt); __nh.release(); __n_elt = 1; } else if (__n_elt != 1) --__n_elt; } } template void _M_merge_multi(_Compatible_Hashtable& __src) { static_assert(is_same_v, "Node types are compatible"); do { if (std::__is_constant_evaluated()) if (__builtin_expect(!bool(get_allocator() == __src.get_allocator()), false)) std::__glibcxx_assert_fail(); } while (false); __node_ptr __hint = nullptr; this->reserve(size() + __src.size()); for (auto __i = __src.cbegin(), __end = __src.cend(); __i != __end;) { auto __pos = __i++; const key_type& __k = _ExtractKey{}(*__pos); __hash_code __code = _M_src_hash_code(__src.hash_function(), __k, *__pos._M_cur); auto __nh = __src.extract(__pos); __hint = _M_insert_multi_node(__hint, __code, __nh._M_ptr)._M_cur; __nh.release(); } } private: void _M_rehash(size_type __bkt_count, true_type __uks); void _M_rehash(size_type __bkt_count, false_type __uks); }; template _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: _Hashtable(size_type __bkt_count_hint, const _Hash& __h, const _Equal& __eq, const allocator_type& __a) : _Hashtable(__h, __eq, __a) { auto __bkt_count = _M_rehash_policy._M_next_bkt(__bkt_count_hint); if (__bkt_count > _M_bucket_count) { _M_buckets = _M_allocate_buckets(__bkt_count); _M_bucket_count = __bkt_count; } } template template _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: _Hashtable(_InputIterator __f, _InputIterator __l, size_type __bkt_count_hint, const _Hash& __h, const _Equal& __eq, const allocator_type& __a, true_type ) : _Hashtable(__bkt_count_hint, __h, __eq, __a) { this->insert(__f, __l); } template template _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: _Hashtable(_InputIterator __f, _InputIterator __l, size_type __bkt_count_hint, const _Hash& __h, const _Equal& __eq, const allocator_type& __a, false_type __uks) : _Hashtable(__h, __eq, __a) { auto __nb_elems = __detail::__distance_fw(__f, __l); auto __bkt_count = _M_rehash_policy._M_next_bkt( std::max(_M_rehash_policy._M_bkt_for_elements(__nb_elems), __bkt_count_hint)); if (__bkt_count > _M_bucket_count) { _M_buckets = _M_allocate_buckets(__bkt_count); _M_bucket_count = __bkt_count; } __alloc_node_gen_t __node_gen(*this); for (; __f != __l; ++__f) _M_insert(*__f, __node_gen, __uks); } template auto _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: operator=(const _Hashtable& __ht) -> _Hashtable& { if (&__ht == this) return *this; if (__node_alloc_traits::_S_propagate_on_copy_assign()) { auto& __this_alloc = this->_M_node_allocator(); auto& __that_alloc = __ht._M_node_allocator(); if (!__node_alloc_traits::_S_always_equal() && __this_alloc != __that_alloc) { this->_M_deallocate_nodes(_M_begin()); _M_before_begin._M_nxt = nullptr; _M_deallocate_buckets(); _M_buckets = nullptr; std::__alloc_on_copy(__this_alloc, __that_alloc); __hashtable_base::operator=(__ht); _M_bucket_count = __ht._M_bucket_count; _M_element_count = __ht._M_element_count; _M_rehash_policy = __ht._M_rehash_policy; __alloc_node_gen_t __alloc_node_gen(*this); try { _M_assign(__ht, __alloc_node_gen); } catch(...) { _M_reset(); throw; } return *this; } std::__alloc_on_copy(__this_alloc, __that_alloc); } _M_assign_elements(__ht); return *this; } template template void _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: _M_assign_elements(_Ht&& __ht) { __buckets_ptr __former_buckets = nullptr; std::size_t __former_bucket_count = _M_bucket_count; __rehash_guard_t __rehash_guard(_M_rehash_policy); if (_M_bucket_count != __ht._M_bucket_count) { __former_buckets = _M_buckets; _M_buckets = _M_allocate_buckets(__ht._M_bucket_count); _M_bucket_count = __ht._M_bucket_count; } else __builtin_memset(_M_buckets, 0, _M_bucket_count * sizeof(__node_base_ptr)); try { __hashtable_base::operator=(std::forward<_Ht>(__ht)); _M_element_count = __ht._M_element_count; _M_rehash_policy = __ht._M_rehash_policy; __reuse_or_alloc_node_gen_t __roan(_M_begin(), *this); _M_before_begin._M_nxt = nullptr; _M_assign(std::forward<_Ht>(__ht), __roan); if (__former_buckets) _M_deallocate_buckets(__former_buckets, __former_bucket_count); __rehash_guard._M_guarded_obj = nullptr; } catch(...) { if (__former_buckets) { _M_deallocate_buckets(); _M_buckets = __former_buckets; _M_bucket_count = __former_bucket_count; } __builtin_memset(_M_buckets, 0, _M_bucket_count * sizeof(__node_base_ptr)); throw; } } template template void _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: _M_assign(_Ht&& __ht, const _NodeGenerator& __node_gen) { __buckets_ptr __buckets = nullptr; if (!_M_buckets) _M_buckets = __buckets = _M_allocate_buckets(_M_bucket_count); try { if (!__ht._M_before_begin._M_nxt) return; __node_ptr __ht_n = __ht._M_begin(); __node_ptr __this_n = __node_gen(__fwd_value_for<_Ht>(__ht_n->_M_v())); this->_M_copy_code(*__this_n, *__ht_n); _M_update_bbegin(__this_n); __node_ptr __prev_n = __this_n; for (__ht_n = __ht_n->_M_next(); __ht_n; __ht_n = __ht_n->_M_next()) { __this_n = __node_gen(__fwd_value_for<_Ht>(__ht_n->_M_v())); __prev_n->_M_nxt = __this_n; this->_M_copy_code(*__this_n, *__ht_n); size_type __bkt = _M_bucket_index(*__this_n); if (!_M_buckets[__bkt]) _M_buckets[__bkt] = __prev_n; __prev_n = __this_n; } } catch(...) { clear(); if (__buckets) _M_deallocate_buckets(); throw; } } template void _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: _M_reset() noexcept { _M_rehash_policy._M_reset(); _M_bucket_count = 1; _M_single_bucket = nullptr; _M_buckets = &_M_single_bucket; _M_before_begin._M_nxt = nullptr; _M_element_count = 0; } template void _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: _M_move_assign(_Hashtable&& __ht, true_type) { if (__builtin_expect(std::__addressof(__ht) == this, false)) return; this->_M_deallocate_nodes(_M_begin()); _M_deallocate_buckets(); __hashtable_base::operator=(std::move(__ht)); _M_rehash_policy = __ht._M_rehash_policy; if (!__ht._M_uses_single_bucket()) _M_buckets = __ht._M_buckets; else { _M_buckets = &_M_single_bucket; _M_single_bucket = __ht._M_single_bucket; } _M_bucket_count = __ht._M_bucket_count; _M_before_begin._M_nxt = __ht._M_before_begin._M_nxt; _M_element_count = __ht._M_element_count; std::__alloc_on_move(this->_M_node_allocator(), __ht._M_node_allocator()); _M_update_bbegin(); __ht._M_reset(); } template void _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: _M_move_assign(_Hashtable&& __ht, false_type) { if (__ht._M_node_allocator() == this->_M_node_allocator()) _M_move_assign(std::move(__ht), true_type{}); else { _M_assign_elements(std::move(__ht)); __ht.clear(); } } template _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: _Hashtable(const _Hashtable& __ht) : __hashtable_base(__ht), __map_base(__ht), __rehash_base(__ht), __hashtable_alloc( __node_alloc_traits::_S_select_on_copy(__ht._M_node_allocator())), __enable_default_ctor(__ht), _M_buckets(nullptr), _M_bucket_count(__ht._M_bucket_count), _M_element_count(__ht._M_element_count), _M_rehash_policy(__ht._M_rehash_policy) { __alloc_node_gen_t __alloc_node_gen(*this); _M_assign(__ht, __alloc_node_gen); } template _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: _Hashtable(_Hashtable&& __ht, __node_alloc_type&& __a, true_type ) noexcept(_S_nothrow_move()) : __hashtable_base(__ht), __map_base(__ht), __rehash_base(__ht), __hashtable_alloc(std::move(__a)), __enable_default_ctor(__ht), _M_buckets(__ht._M_buckets), _M_bucket_count(__ht._M_bucket_count), _M_before_begin(__ht._M_before_begin._M_nxt), _M_element_count(__ht._M_element_count), _M_rehash_policy(__ht._M_rehash_policy) { if (__ht._M_uses_single_bucket()) { _M_buckets = &_M_single_bucket; _M_single_bucket = __ht._M_single_bucket; } _M_update_bbegin(); __ht._M_reset(); } template _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: _Hashtable(const _Hashtable& __ht, const allocator_type& __a) : __hashtable_base(__ht), __map_base(__ht), __rehash_base(__ht), __hashtable_alloc(__node_alloc_type(__a)), __enable_default_ctor(__ht), _M_buckets(), _M_bucket_count(__ht._M_bucket_count), _M_element_count(__ht._M_element_count), _M_rehash_policy(__ht._M_rehash_policy) { __alloc_node_gen_t __alloc_node_gen(*this); _M_assign(__ht, __alloc_node_gen); } template _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: _Hashtable(_Hashtable&& __ht, __node_alloc_type&& __a, false_type ) : __hashtable_base(__ht), __map_base(__ht), __rehash_base(__ht), __hashtable_alloc(std::move(__a)), __enable_default_ctor(__ht), _M_buckets(nullptr), _M_bucket_count(__ht._M_bucket_count), _M_element_count(__ht._M_element_count), _M_rehash_policy(__ht._M_rehash_policy) { if (__ht._M_node_allocator() == this->_M_node_allocator()) { if (__ht._M_uses_single_bucket()) { _M_buckets = &_M_single_bucket; _M_single_bucket = __ht._M_single_bucket; } else _M_buckets = __ht._M_buckets; _M_update_bbegin(__ht._M_begin()); __ht._M_reset(); } else { __alloc_node_gen_t __alloc_gen(*this); using _Fwd_Ht = __conditional_t< __move_if_noexcept_cond::value, const _Hashtable&, _Hashtable&&>; _M_assign(std::forward<_Fwd_Ht>(__ht), __alloc_gen); __ht.clear(); } } template _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: ~_Hashtable() noexcept { static_assert(noexcept(declval() ._M_bucket_index(declval(), (std::size_t)0)), "Cache the hash code or qualify your functors involved" " in hash code and bucket index computation with noexcept"); clear(); _M_deallocate_buckets(); } template void _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: swap(_Hashtable& __x) noexcept(__and_<__is_nothrow_swappable<_Hash>, __is_nothrow_swappable<_Equal>>::value) { this->_M_swap(__x); std::__alloc_on_swap(this->_M_node_allocator(), __x._M_node_allocator()); std::swap(_M_rehash_policy, __x._M_rehash_policy); if (this->_M_uses_single_bucket()) { if (!__x._M_uses_single_bucket()) { _M_buckets = __x._M_buckets; __x._M_buckets = &__x._M_single_bucket; } } else if (__x._M_uses_single_bucket()) { __x._M_buckets = _M_buckets; _M_buckets = &_M_single_bucket; } else std::swap(_M_buckets, __x._M_buckets); std::swap(_M_bucket_count, __x._M_bucket_count); std::swap(_M_before_begin._M_nxt, __x._M_before_begin._M_nxt); std::swap(_M_element_count, __x._M_element_count); std::swap(_M_single_bucket, __x._M_single_bucket); _M_update_bbegin(); __x._M_update_bbegin(); } template auto _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: find(const key_type& __k) -> iterator { if (size() <= __small_size_threshold()) { for (auto __it = _M_begin(); __it; __it = __it->_M_next()) if (this->_M_key_equals(__k, *__it)) return iterator(__it); return end(); } __hash_code __code = this->_M_hash_code(__k); std::size_t __bkt = _M_bucket_index(__code); return iterator(_M_find_node(__bkt, __k, __code)); } template auto _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: find(const key_type& __k) const -> const_iterator { if (size() <= __small_size_threshold()) { for (auto __it = _M_begin(); __it; __it = __it->_M_next()) if (this->_M_key_equals(__k, *__it)) return const_iterator(__it); return end(); } __hash_code __code = this->_M_hash_code(__k); std::size_t __bkt = _M_bucket_index(__code); return const_iterator(_M_find_node(__bkt, __k, __code)); } template template auto _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: _M_find_tr(const _Kt& __k) -> iterator { if (size() <= __small_size_threshold()) { for (auto __n = _M_begin(); __n; __n = __n->_M_next()) if (this->_M_key_equals_tr(__k, *__n)) return iterator(__n); return end(); } __hash_code __code = this->_M_hash_code_tr(__k); std::size_t __bkt = _M_bucket_index(__code); return iterator(_M_find_node_tr(__bkt, __k, __code)); } template template auto _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: _M_find_tr(const _Kt& __k) const -> const_iterator { if (size() <= __small_size_threshold()) { for (auto __n = _M_begin(); __n; __n = __n->_M_next()) if (this->_M_key_equals_tr(__k, *__n)) return const_iterator(__n); return end(); } __hash_code __code = this->_M_hash_code_tr(__k); std::size_t __bkt = _M_bucket_index(__code); return const_iterator(_M_find_node_tr(__bkt, __k, __code)); } template auto _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: count(const key_type& __k) const -> size_type { auto __it = find(__k); if (!__it._M_cur) return 0; if (__unique_keys::value) return 1; size_type __result = 1; for (auto __ref = __it++; __it._M_cur && this->_M_node_equals(*__ref._M_cur, *__it._M_cur); ++__it) ++__result; return __result; } template template auto _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: _M_count_tr(const _Kt& __k) const -> size_type { if (size() <= __small_size_threshold()) { size_type __result = 0; for (auto __n = _M_begin(); __n; __n = __n->_M_next()) { if (this->_M_key_equals_tr(__k, *__n)) { ++__result; continue; } if (__result) break; } return __result; } __hash_code __code = this->_M_hash_code_tr(__k); std::size_t __bkt = _M_bucket_index(__code); auto __n = _M_find_node_tr(__bkt, __k, __code); if (!__n) return 0; iterator __it(__n); size_type __result = 1; for (++__it; __it._M_cur && this->_M_equals_tr(__k, __code, *__it._M_cur); ++__it) ++__result; return __result; } template auto _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: equal_range(const key_type& __k) -> pair { auto __ite = find(__k); if (!__ite._M_cur) return { __ite, __ite }; auto __beg = __ite++; if (__unique_keys::value) return { __beg, __ite }; while (__ite._M_cur && this->_M_node_equals(*__beg._M_cur, *__ite._M_cur)) ++__ite; return { __beg, __ite }; } template auto _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: equal_range(const key_type& __k) const -> pair { auto __ite = find(__k); if (!__ite._M_cur) return { __ite, __ite }; auto __beg = __ite++; if (__unique_keys::value) return { __beg, __ite }; while (__ite._M_cur && this->_M_node_equals(*__beg._M_cur, *__ite._M_cur)) ++__ite; return { __beg, __ite }; } template template auto _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: _M_equal_range_tr(const _Kt& __k) -> pair { if (size() <= __small_size_threshold()) { __node_ptr __n, __beg = nullptr; for (__n = _M_begin(); __n; __n = __n->_M_next()) { if (this->_M_key_equals_tr(__k, *__n)) { if (!__beg) __beg = __n; continue; } if (__beg) break; } return { iterator(__beg), iterator(__n) }; } __hash_code __code = this->_M_hash_code_tr(__k); std::size_t __bkt = _M_bucket_index(__code); auto __n = _M_find_node_tr(__bkt, __k, __code); iterator __ite(__n); if (!__n) return { __ite, __ite }; auto __beg = __ite++; while (__ite._M_cur && this->_M_equals_tr(__k, __code, *__ite._M_cur)) ++__ite; return { __beg, __ite }; } template template auto _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: _M_equal_range_tr(const _Kt& __k) const -> pair { if (size() <= __small_size_threshold()) { __node_ptr __n, __beg = nullptr; for (__n = _M_begin(); __n; __n = __n->_M_next()) { if (this->_M_key_equals_tr(__k, *__n)) { if (!__beg) __beg = __n; continue; } if (__beg) break; } return { const_iterator(__beg), const_iterator(__n) }; } __hash_code __code = this->_M_hash_code_tr(__k); std::size_t __bkt = _M_bucket_index(__code); auto __n = _M_find_node_tr(__bkt, __k, __code); const_iterator __ite(__n); if (!__n) return { __ite, __ite }; auto __beg = __ite++; while (__ite._M_cur && this->_M_equals_tr(__k, __code, *__ite._M_cur)) ++__ite; return { __beg, __ite }; } template auto _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: _M_find_before_node(const key_type& __k) -> __node_base_ptr { __node_base_ptr __prev_p = &_M_before_begin; if (!__prev_p->_M_nxt) return nullptr; for (__node_ptr __p = static_cast<__node_ptr>(__prev_p->_M_nxt); __p != nullptr; __p = __p->_M_next()) { if (this->_M_key_equals(__k, *__p)) return __prev_p; __prev_p = __p; } return nullptr; } template auto _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: _M_find_before_node(size_type __bkt, const key_type& __k, __hash_code __code) const -> __node_base_ptr { __node_base_ptr __prev_p = _M_buckets[__bkt]; if (!__prev_p) return nullptr; for (__node_ptr __p = static_cast<__node_ptr>(__prev_p->_M_nxt);; __p = __p->_M_next()) { if (this->_M_equals(__k, __code, *__p)) return __prev_p; if (!__p->_M_nxt || _M_bucket_index(*__p->_M_next()) != __bkt) break; __prev_p = __p; } return nullptr; } template template auto _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: _M_find_before_node_tr(size_type __bkt, const _Kt& __k, __hash_code __code) const -> __node_base_ptr { __node_base_ptr __prev_p = _M_buckets[__bkt]; if (!__prev_p) return nullptr; for (__node_ptr __p = static_cast<__node_ptr>(__prev_p->_M_nxt);; __p = __p->_M_next()) { if (this->_M_equals_tr(__k, __code, *__p)) return __prev_p; if (!__p->_M_nxt || _M_bucket_index(*__p->_M_next()) != __bkt) break; __prev_p = __p; } return nullptr; } template auto _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: _M_get_previous_node(size_type __bkt, __node_ptr __n) -> __node_base_ptr { __node_base_ptr __prev_n = _M_buckets[__bkt]; while (__prev_n->_M_nxt != __n) __prev_n = __prev_n->_M_nxt; return __prev_n; } template template auto _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: _M_emplace(true_type , _Args&&... __args) -> pair { _Scoped_node __node { this, std::forward<_Args>(__args)... }; const key_type& __k = _ExtractKey{}(__node._M_node->_M_v()); const size_type __size = size(); if (__size <= __small_size_threshold()) { for (auto __it = _M_begin(); __it; __it = __it->_M_next()) if (this->_M_key_equals(__k, *__it)) return { iterator(__it), false }; } __hash_code __code = this->_M_hash_code(__k); size_type __bkt = _M_bucket_index(__code); if (__size > __small_size_threshold()) if (__node_ptr __p = _M_find_node(__bkt, __k, __code)) return { iterator(__p), false }; auto __pos = _M_insert_unique_node(__bkt, __code, __node._M_node); __node._M_node = nullptr; return { __pos, true }; } template template auto _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: _M_emplace(const_iterator __hint, false_type , _Args&&... __args) -> iterator { _Scoped_node __node { this, std::forward<_Args>(__args)... }; const key_type& __k = _ExtractKey{}(__node._M_node->_M_v()); auto __res = this->_M_compute_hash_code(__hint._M_cur, __k); auto __pos = _M_insert_multi_node(__res.first, __res.second, __node._M_node); __node._M_node = nullptr; return __pos; } template auto _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: _M_compute_hash_code(__node_ptr __hint, const key_type& __k) const -> pair<__node_ptr, __hash_code> { if (size() <= __small_size_threshold()) { if (__hint) { for (auto __it = __hint; __it; __it = __it->_M_next()) if (this->_M_key_equals(__k, *__it)) return { __it, this->_M_hash_code(*__it) }; } for (auto __it = _M_begin(); __it != __hint; __it = __it->_M_next()) if (this->_M_key_equals(__k, *__it)) return { __it, this->_M_hash_code(*__it) }; __hint = nullptr; } return { __hint, this->_M_hash_code(__k) }; } template auto _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: _M_insert_unique_node(size_type __bkt, __hash_code __code, __node_ptr __node, size_type __n_elt) -> iterator { __rehash_guard_t __rehash_guard(_M_rehash_policy); std::pair __do_rehash = _M_rehash_policy._M_need_rehash(_M_bucket_count, _M_element_count, __n_elt); if (__do_rehash.first) { _M_rehash(__do_rehash.second, true_type{}); __bkt = _M_bucket_index(__code); } __rehash_guard._M_guarded_obj = nullptr; this->_M_store_code(*__node, __code); _M_insert_bucket_begin(__bkt, __node); ++_M_element_count; return iterator(__node); } template auto _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: _M_insert_multi_node(__node_ptr __hint, __hash_code __code, __node_ptr __node) -> iterator { __rehash_guard_t __rehash_guard(_M_rehash_policy); std::pair __do_rehash = _M_rehash_policy._M_need_rehash(_M_bucket_count, _M_element_count, 1); if (__do_rehash.first) _M_rehash(__do_rehash.second, false_type{}); __rehash_guard._M_guarded_obj = nullptr; this->_M_store_code(*__node, __code); const key_type& __k = _ExtractKey{}(__node->_M_v()); size_type __bkt = _M_bucket_index(__code); __node_base_ptr __prev = __builtin_expect(__hint != nullptr, false) && this->_M_equals(__k, __code, *__hint) ? __hint : _M_find_before_node(__bkt, __k, __code); if (__prev) { __node->_M_nxt = __prev->_M_nxt; __prev->_M_nxt = __node; if (__builtin_expect(__prev == __hint, false)) if (__node->_M_nxt && !this->_M_equals(__k, __code, *__node->_M_next())) { size_type __next_bkt = _M_bucket_index(*__node->_M_next()); if (__next_bkt != __bkt) _M_buckets[__next_bkt] = __node; } } else _M_insert_bucket_begin(__bkt, __node); ++_M_element_count; return iterator(__node); } template template auto _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: _M_insert_unique(_Kt&& __k, _Arg&& __v, const _NodeGenerator& __node_gen) -> pair { const size_type __size = size(); if (__size <= __small_size_threshold()) for (auto __it = _M_begin(); __it; __it = __it->_M_next()) if (this->_M_key_equals_tr(__k, *__it)) return { iterator(__it), false }; __hash_code __code = this->_M_hash_code_tr(__k); size_type __bkt = _M_bucket_index(__code); if (__size > __small_size_threshold()) if (__node_ptr __node = _M_find_node_tr(__bkt, __k, __code)) return { iterator(__node), false }; _Scoped_node __node { __node_builder_t::_S_build(std::forward<_Kt>(__k), std::forward<_Arg>(__v), __node_gen), this }; auto __pos = _M_insert_unique_node(__bkt, __code, __node._M_node); __node._M_node = nullptr; return { __pos, true }; } template template auto _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: _M_insert(const_iterator __hint, _Arg&& __v, const _NodeGenerator& __node_gen, false_type ) -> iterator { _Scoped_node __node{ __node_gen(std::forward<_Arg>(__v)), this }; auto __res = this->_M_compute_hash_code( __hint._M_cur, _ExtractKey{}(__node._M_node->_M_v())); auto __pos = _M_insert_multi_node(__res.first, __res.second, __node._M_node); __node._M_node = nullptr; return __pos; } template auto _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: erase(const_iterator __it) -> iterator { __node_ptr __n = __it._M_cur; std::size_t __bkt = _M_bucket_index(*__n); __node_base_ptr __prev_n = _M_get_previous_node(__bkt, __n); return _M_erase(__bkt, __prev_n, __n); } template auto _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: _M_erase(size_type __bkt, __node_base_ptr __prev_n, __node_ptr __n) -> iterator { if (__prev_n == _M_buckets[__bkt]) _M_remove_bucket_begin(__bkt, __n->_M_next(), __n->_M_nxt ? _M_bucket_index(*__n->_M_next()) : 0); else if (__n->_M_nxt) { size_type __next_bkt = _M_bucket_index(*__n->_M_next()); if (__next_bkt != __bkt) _M_buckets[__next_bkt] = __prev_n; } __prev_n->_M_nxt = __n->_M_nxt; iterator __result(__n->_M_next()); this->_M_deallocate_node(__n); --_M_element_count; return __result; } template auto _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: _M_erase(true_type , const key_type& __k) -> size_type { __node_base_ptr __prev_n; __node_ptr __n; std::size_t __bkt; if (size() <= __small_size_threshold()) { __prev_n = _M_find_before_node(__k); if (!__prev_n) return 0; __n = static_cast<__node_ptr>(__prev_n->_M_nxt); __bkt = _M_bucket_index(*__n); } else { __hash_code __code = this->_M_hash_code(__k); __bkt = _M_bucket_index(__code); __prev_n = _M_find_before_node(__bkt, __k, __code); if (!__prev_n) return 0; __n = static_cast<__node_ptr>(__prev_n->_M_nxt); } _M_erase(__bkt, __prev_n, __n); return 1; } template auto _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: _M_erase(false_type , const key_type& __k) -> size_type { std::size_t __bkt; __node_base_ptr __prev_n; __node_ptr __n; if (size() <= __small_size_threshold()) { __prev_n = _M_find_before_node(__k); if (!__prev_n) return 0; __n = static_cast<__node_ptr>(__prev_n->_M_nxt); __bkt = _M_bucket_index(*__n); } else { __hash_code __code = this->_M_hash_code(__k); __bkt = _M_bucket_index(__code); __prev_n = _M_find_before_node(__bkt, __k, __code); if (!__prev_n) return 0; __n = static_cast<__node_ptr>(__prev_n->_M_nxt); } __node_ptr __n_last = __n->_M_next(); while (__n_last && this->_M_node_equals(*__n, *__n_last)) __n_last = __n_last->_M_next(); std::size_t __n_last_bkt = __n_last ? _M_bucket_index(*__n_last) : __bkt; size_type __result = 0; do { __node_ptr __p = __n->_M_next(); this->_M_deallocate_node(__n); __n = __p; ++__result; } while (__n != __n_last); _M_element_count -= __result; if (__prev_n == _M_buckets[__bkt]) _M_remove_bucket_begin(__bkt, __n_last, __n_last_bkt); else if (__n_last_bkt != __bkt) _M_buckets[__n_last_bkt] = __prev_n; __prev_n->_M_nxt = __n_last; return __result; } template auto _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: erase(const_iterator __first, const_iterator __last) -> iterator { __node_ptr __n = __first._M_cur; __node_ptr __last_n = __last._M_cur; if (__n == __last_n) return iterator(__n); std::size_t __bkt = _M_bucket_index(*__n); __node_base_ptr __prev_n = _M_get_previous_node(__bkt, __n); bool __is_bucket_begin = __n == _M_bucket_begin(__bkt); std::size_t __n_bkt = __bkt; for (;;) { do { __node_ptr __tmp = __n; __n = __n->_M_next(); this->_M_deallocate_node(__tmp); --_M_element_count; if (!__n) break; __n_bkt = _M_bucket_index(*__n); } while (__n != __last_n && __n_bkt == __bkt); if (__is_bucket_begin) _M_remove_bucket_begin(__bkt, __n, __n_bkt); if (__n == __last_n) break; __is_bucket_begin = true; __bkt = __n_bkt; } if (__n && (__n_bkt != __bkt || __is_bucket_begin)) _M_buckets[__n_bkt] = __prev_n; __prev_n->_M_nxt = __n; return iterator(__n); } template void _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: clear() noexcept { this->_M_deallocate_nodes(_M_begin()); __builtin_memset(_M_buckets, 0, _M_bucket_count * sizeof(__node_base_ptr)); _M_element_count = 0; _M_before_begin._M_nxt = nullptr; } template void _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: rehash(size_type __bkt_count) { __rehash_guard_t __rehash_guard(_M_rehash_policy); __bkt_count = std::max(_M_rehash_policy._M_bkt_for_elements(_M_element_count + 1), __bkt_count); __bkt_count = _M_rehash_policy._M_next_bkt(__bkt_count); if (__bkt_count != _M_bucket_count) { _M_rehash(__bkt_count, __unique_keys{}); __rehash_guard._M_guarded_obj = nullptr; } } template void _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: _M_rehash(size_type __bkt_count, true_type ) { __buckets_ptr __new_buckets = _M_allocate_buckets(__bkt_count); __node_ptr __p = _M_begin(); _M_before_begin._M_nxt = nullptr; std::size_t __bbegin_bkt = 0; while (__p) { __node_ptr __next = __p->_M_next(); std::size_t __bkt = __hash_code_base::_M_bucket_index(*__p, __bkt_count); if (!__new_buckets[__bkt]) { __p->_M_nxt = _M_before_begin._M_nxt; _M_before_begin._M_nxt = __p; __new_buckets[__bkt] = &_M_before_begin; if (__p->_M_nxt) __new_buckets[__bbegin_bkt] = __p; __bbegin_bkt = __bkt; } else { __p->_M_nxt = __new_buckets[__bkt]->_M_nxt; __new_buckets[__bkt]->_M_nxt = __p; } __p = __next; } _M_deallocate_buckets(); _M_bucket_count = __bkt_count; _M_buckets = __new_buckets; } template void _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: _M_rehash(size_type __bkt_count, false_type ) { __buckets_ptr __new_buckets = _M_allocate_buckets(__bkt_count); __node_ptr __p = _M_begin(); _M_before_begin._M_nxt = nullptr; std::size_t __bbegin_bkt = 0; std::size_t __prev_bkt = 0; __node_ptr __prev_p = nullptr; bool __check_bucket = false; while (__p) { __node_ptr __next = __p->_M_next(); std::size_t __bkt = __hash_code_base::_M_bucket_index(*__p, __bkt_count); if (__prev_p && __prev_bkt == __bkt) { __p->_M_nxt = __prev_p->_M_nxt; __prev_p->_M_nxt = __p; __check_bucket = true; } else { if (__check_bucket) { if (__prev_p->_M_nxt) { std::size_t __next_bkt = __hash_code_base::_M_bucket_index( *__prev_p->_M_next(), __bkt_count); if (__next_bkt != __prev_bkt) __new_buckets[__next_bkt] = __prev_p; } __check_bucket = false; } if (!__new_buckets[__bkt]) { __p->_M_nxt = _M_before_begin._M_nxt; _M_before_begin._M_nxt = __p; __new_buckets[__bkt] = &_M_before_begin; if (__p->_M_nxt) __new_buckets[__bbegin_bkt] = __p; __bbegin_bkt = __bkt; } else { __p->_M_nxt = __new_buckets[__bkt]->_M_nxt; __new_buckets[__bkt]->_M_nxt = __p; } } __prev_p = __p; __prev_bkt = __bkt; __p = __next; } if (__check_bucket && __prev_p->_M_nxt) { std::size_t __next_bkt = __hash_code_base::_M_bucket_index(*__prev_p->_M_next(), __bkt_count); if (__next_bkt != __prev_bkt) __new_buckets[__next_bkt] = __prev_p; } _M_deallocate_buckets(); _M_bucket_count = __bkt_count; _M_buckets = __new_buckets; } template class _Hash_merge_helper { }; template using _RequireNotAllocatorOrIntegral = __enable_if_t, __is_allocator<_Hash>>::value>; } # 34 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_map.h" 2 3 namespace std __attribute__ ((__visibility__ ("default"))) { template using __umap_traits = __detail::_Hashtable_traits<_Cache, false, true>; template, typename _Pred = std::equal_to<_Key>, typename _Alloc = std::allocator >, typename _Tr = __umap_traits<__cache_default<_Key, _Hash>::value>> using __umap_hashtable = _Hashtable<_Key, std::pair, _Alloc, __detail::_Select1st, _Pred, _Hash, __detail::_Mod_range_hashing, __detail::_Default_ranged_hash, __detail::_Prime_rehash_policy, _Tr>; template using __ummap_traits = __detail::_Hashtable_traits<_Cache, false, false>; template, typename _Pred = std::equal_to<_Key>, typename _Alloc = std::allocator >, typename _Tr = __ummap_traits<__cache_default<_Key, _Hash>::value>> using __ummap_hashtable = _Hashtable<_Key, std::pair, _Alloc, __detail::_Select1st, _Pred, _Hash, __detail::_Mod_range_hashing, __detail::_Default_ranged_hash, __detail::_Prime_rehash_policy, _Tr>; template class unordered_multimap; # 105 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_map.h" 3 template, typename _Pred = equal_to<_Key>, typename _Alloc = allocator>> class unordered_map { typedef __umap_hashtable<_Key, _Tp, _Hash, _Pred, _Alloc> _Hashtable; _Hashtable _M_h; public: typedef typename _Hashtable::key_type key_type; typedef typename _Hashtable::value_type value_type; typedef typename _Hashtable::mapped_type mapped_type; typedef typename _Hashtable::hasher hasher; typedef typename _Hashtable::key_equal key_equal; typedef typename _Hashtable::allocator_type allocator_type; typedef typename _Hashtable::pointer pointer; typedef typename _Hashtable::const_pointer const_pointer; typedef typename _Hashtable::reference reference; typedef typename _Hashtable::const_reference const_reference; typedef typename _Hashtable::iterator iterator; typedef typename _Hashtable::const_iterator const_iterator; typedef typename _Hashtable::local_iterator local_iterator; typedef typename _Hashtable::const_local_iterator const_local_iterator; typedef typename _Hashtable::size_type size_type; typedef typename _Hashtable::difference_type difference_type; using node_type = typename _Hashtable::node_type; using insert_return_type = typename _Hashtable::insert_return_type; unordered_map() = default; # 157 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_map.h" 3 explicit unordered_map(size_type __n, const hasher& __hf = hasher(), const key_equal& __eql = key_equal(), const allocator_type& __a = allocator_type()) : _M_h(__n, __hf, __eql, __a) { } # 178 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_map.h" 3 template unordered_map(_InputIterator __first, _InputIterator __last, size_type __n = 0, const hasher& __hf = hasher(), const key_equal& __eql = key_equal(), const allocator_type& __a = allocator_type()) : _M_h(__first, __last, __n, __hf, __eql, __a) { } unordered_map(const unordered_map&) = default; unordered_map(unordered_map&&) = default; explicit unordered_map(const allocator_type& __a) : _M_h(__a) { } unordered_map(const unordered_map& __umap, const allocator_type& __a) : _M_h(__umap._M_h, __a) { } unordered_map(unordered_map&& __umap, const allocator_type& __a) noexcept( noexcept(_Hashtable(std::move(__umap._M_h), __a)) ) : _M_h(std::move(__umap._M_h), __a) { } # 234 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_map.h" 3 unordered_map(initializer_list __l, size_type __n = 0, const hasher& __hf = hasher(), const key_equal& __eql = key_equal(), const allocator_type& __a = allocator_type()) : _M_h(__l, __n, __hf, __eql, __a) { } unordered_map(size_type __n, const allocator_type& __a) : unordered_map(__n, hasher(), key_equal(), __a) { } unordered_map(size_type __n, const hasher& __hf, const allocator_type& __a) : unordered_map(__n, __hf, key_equal(), __a) { } template unordered_map(_InputIterator __first, _InputIterator __last, size_type __n, const allocator_type& __a) : unordered_map(__first, __last, __n, hasher(), key_equal(), __a) { } template unordered_map(_InputIterator __first, _InputIterator __last, size_type __n, const hasher& __hf, const allocator_type& __a) : unordered_map(__first, __last, __n, __hf, key_equal(), __a) { } unordered_map(initializer_list __l, size_type __n, const allocator_type& __a) : unordered_map(__l, __n, hasher(), key_equal(), __a) { } unordered_map(initializer_list __l, size_type __n, const hasher& __hf, const allocator_type& __a) : unordered_map(__l, __n, __hf, key_equal(), __a) { } unordered_map& operator=(const unordered_map&) = default; unordered_map& operator=(unordered_map&&) = default; # 296 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_map.h" 3 unordered_map& operator=(initializer_list __l) { _M_h = __l; return *this; } allocator_type get_allocator() const noexcept { return _M_h.get_allocator(); } [[__nodiscard__]] bool empty() const noexcept { return _M_h.empty(); } size_type size() const noexcept { return _M_h.size(); } size_type max_size() const noexcept { return _M_h.max_size(); } iterator begin() noexcept { return _M_h.begin(); } const_iterator begin() const noexcept { return _M_h.begin(); } const_iterator cbegin() const noexcept { return _M_h.begin(); } iterator end() noexcept { return _M_h.end(); } const_iterator end() const noexcept { return _M_h.end(); } const_iterator cend() const noexcept { return _M_h.end(); } # 393 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_map.h" 3 template std::pair emplace(_Args&&... __args) { return _M_h.emplace(std::forward<_Args>(__args)...); } # 424 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_map.h" 3 template iterator emplace_hint(const_iterator __pos, _Args&&... __args) { return _M_h.emplace_hint(__pos, std::forward<_Args>(__args)...); } node_type extract(const_iterator __pos) { do { if (std::__is_constant_evaluated()) if (__builtin_expect(!bool(__pos != end()), false)) std::__glibcxx_assert_fail(); } while (false); return _M_h.extract(__pos); } node_type extract(const key_type& __key) { return _M_h.extract(__key); } insert_return_type insert(node_type&& __nh) { return _M_h._M_reinsert_node(std::move(__nh)); } iterator insert(const_iterator, node_type&& __nh) { return _M_h._M_reinsert_node(std::move(__nh)).position; } # 477 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_map.h" 3 template pair try_emplace(const key_type& __k, _Args&&... __args) { return _M_h.try_emplace(cend(), __k, std::forward<_Args>(__args)...); } template pair try_emplace(key_type&& __k, _Args&&... __args) { return _M_h.try_emplace(cend(), std::move(__k), std::forward<_Args>(__args)...); } # 521 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_map.h" 3 template iterator try_emplace(const_iterator __hint, const key_type& __k, _Args&&... __args) { return _M_h.try_emplace(__hint, __k, std::forward<_Args>(__args)...).first; } template iterator try_emplace(const_iterator __hint, key_type&& __k, _Args&&... __args) { return _M_h.try_emplace(__hint, std::move(__k), std::forward<_Args>(__args)...).first; } # 558 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_map.h" 3 std::pair insert(const value_type& __x) { return _M_h.insert(__x); } std::pair insert(value_type&& __x) { return _M_h.insert(std::move(__x)); } template __enable_if_t::value, pair> insert(_Pair&& __x) { return _M_h.emplace(std::forward<_Pair>(__x)); } # 597 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_map.h" 3 iterator insert(const_iterator __hint, const value_type& __x) { return _M_h.insert(__hint, __x); } iterator insert(const_iterator __hint, value_type&& __x) { return _M_h.insert(__hint, std::move(__x)); } template __enable_if_t::value, iterator> insert(const_iterator __hint, _Pair&& __x) { return _M_h.emplace_hint(__hint, std::forward<_Pair>(__x)); } # 622 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_map.h" 3 template void insert(_InputIterator __first, _InputIterator __last) { _M_h.insert(__first, __last); } # 634 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_map.h" 3 void insert(initializer_list __l) { _M_h.insert(__l); } # 660 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_map.h" 3 template pair insert_or_assign(const key_type& __k, _Obj&& __obj) { auto __ret = _M_h.try_emplace(cend(), __k, std::forward<_Obj>(__obj)); if (!__ret.second) __ret.first->second = std::forward<_Obj>(__obj); return __ret; } template pair insert_or_assign(key_type&& __k, _Obj&& __obj) { auto __ret = _M_h.try_emplace(cend(), std::move(__k), std::forward<_Obj>(__obj)); if (!__ret.second) __ret.first->second = std::forward<_Obj>(__obj); return __ret; } # 709 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_map.h" 3 template iterator insert_or_assign(const_iterator __hint, const key_type& __k, _Obj&& __obj) { auto __ret = _M_h.try_emplace(__hint, __k, std::forward<_Obj>(__obj)); if (!__ret.second) __ret.first->second = std::forward<_Obj>(__obj); return __ret.first; } template iterator insert_or_assign(const_iterator __hint, key_type&& __k, _Obj&& __obj) { auto __ret = _M_h.try_emplace(__hint, std::move(__k), std::forward<_Obj>(__obj)); if (!__ret.second) __ret.first->second = std::forward<_Obj>(__obj); return __ret.first; } # 747 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_map.h" 3 iterator erase(const_iterator __position) { return _M_h.erase(__position); } iterator erase(iterator __position) { return _M_h.erase(__position); } # 769 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_map.h" 3 size_type erase(const key_type& __x) { return _M_h.erase(__x); } # 787 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_map.h" 3 iterator erase(const_iterator __first, const_iterator __last) { return _M_h.erase(__first, __last); } void clear() noexcept { _M_h.clear(); } # 811 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_map.h" 3 void swap(unordered_map& __x) noexcept( noexcept(_M_h.swap(__x._M_h)) ) { _M_h.swap(__x._M_h); } template friend class std::_Hash_merge_helper; template void merge(unordered_map<_Key, _Tp, _H2, _P2, _Alloc>& __source) { using _Merge_helper = _Hash_merge_helper; _M_h._M_merge_unique(_Merge_helper::_S_get_table(__source)); } template void merge(unordered_map<_Key, _Tp, _H2, _P2, _Alloc>&& __source) { merge(__source); } template void merge(unordered_multimap<_Key, _Tp, _H2, _P2, _Alloc>& __source) { using _Merge_helper = _Hash_merge_helper; _M_h._M_merge_unique(_Merge_helper::_S_get_table(__source)); } template void merge(unordered_multimap<_Key, _Tp, _H2, _P2, _Alloc>&& __source) { merge(__source); } hasher hash_function() const { return _M_h.hash_function(); } key_equal key_eq() const { return _M_h.key_eq(); } # 875 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_map.h" 3 iterator find(const key_type& __x) { return _M_h.find(__x); } template auto find(const _Kt& __x) -> decltype(_M_h._M_find_tr(__x)) { return _M_h._M_find_tr(__x); } const_iterator find(const key_type& __x) const { return _M_h.find(__x); } template auto find(const _Kt& __x) const -> decltype(_M_h._M_find_tr(__x)) { return _M_h._M_find_tr(__x); } # 908 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_map.h" 3 size_type count(const key_type& __x) const { return _M_h.count(__x); } template auto count(const _Kt& __x) const -> decltype(_M_h._M_count_tr(__x)) { return _M_h._M_count_tr(__x); } # 927 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_map.h" 3 bool contains(const key_type& __x) const { return _M_h.find(__x) != _M_h.end(); } template auto contains(const _Kt& __x) const -> decltype(_M_h._M_find_tr(__x), void(), true) { return _M_h._M_find_tr(__x) != _M_h.end(); } # 948 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_map.h" 3 std::pair equal_range(const key_type& __x) { return _M_h.equal_range(__x); } template auto equal_range(const _Kt& __x) -> decltype(_M_h._M_equal_range_tr(__x)) { return _M_h._M_equal_range_tr(__x); } std::pair equal_range(const key_type& __x) const { return _M_h.equal_range(__x); } template auto equal_range(const _Kt& __x) const -> decltype(_M_h._M_equal_range_tr(__x)) { return _M_h._M_equal_range_tr(__x); } # 986 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_map.h" 3 mapped_type& operator[](const key_type& __k) { return _M_h[__k]; } mapped_type& operator[](key_type&& __k) { return _M_h[std::move(__k)]; } # 1003 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_map.h" 3 mapped_type& at(const key_type& __k) { return _M_h.at(__k); } const mapped_type& at(const key_type& __k) const { return _M_h.at(__k); } size_type bucket_count() const noexcept { return _M_h.bucket_count(); } size_type max_bucket_count() const noexcept { return _M_h.max_bucket_count(); } size_type bucket_size(size_type __n) const { return _M_h.bucket_size(__n); } size_type bucket(const key_type& __key) const { return _M_h.bucket(__key); } local_iterator begin(size_type __n) { return _M_h.begin(__n); } # 1059 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_map.h" 3 const_local_iterator begin(size_type __n) const { return _M_h.begin(__n); } const_local_iterator cbegin(size_type __n) const { return _M_h.cbegin(__n); } # 1074 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_map.h" 3 local_iterator end(size_type __n) { return _M_h.end(__n); } # 1085 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_map.h" 3 const_local_iterator end(size_type __n) const { return _M_h.end(__n); } const_local_iterator cend(size_type __n) const { return _M_h.cend(__n); } float load_factor() const noexcept { return _M_h.load_factor(); } float max_load_factor() const noexcept { return _M_h.max_load_factor(); } void max_load_factor(float __z) { _M_h.max_load_factor(__z); } # 1122 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_map.h" 3 void rehash(size_type __n) { _M_h.rehash(__n); } # 1133 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_map.h" 3 void reserve(size_type __n) { _M_h.reserve(__n); } template friend bool operator==(const unordered_map<_Key1, _Tp1, _Hash1, _Pred1, _Alloc1>&, const unordered_map<_Key1, _Tp1, _Hash1, _Pred1, _Alloc1>&); }; template>, typename _Pred = equal_to<__iter_key_t<_InputIterator>>, typename _Allocator = allocator<__iter_to_alloc_t<_InputIterator>>, typename = _RequireInputIter<_InputIterator>, typename = _RequireNotAllocatorOrIntegral<_Hash>, typename = _RequireNotAllocator<_Pred>, typename = _RequireAllocator<_Allocator>> unordered_map(_InputIterator, _InputIterator, typename unordered_map::size_type = {}, _Hash = _Hash(), _Pred = _Pred(), _Allocator = _Allocator()) -> unordered_map<__iter_key_t<_InputIterator>, __iter_val_t<_InputIterator>, _Hash, _Pred, _Allocator>; template, typename _Pred = equal_to<_Key>, typename _Allocator = allocator>, typename = _RequireNotAllocatorOrIntegral<_Hash>, typename = _RequireNotAllocator<_Pred>, typename = _RequireAllocator<_Allocator>> unordered_map(initializer_list>, typename unordered_map::size_type = {}, _Hash = _Hash(), _Pred = _Pred(), _Allocator = _Allocator()) -> unordered_map<_Key, _Tp, _Hash, _Pred, _Allocator>; template, typename = _RequireAllocator<_Allocator>> unordered_map(_InputIterator, _InputIterator, typename unordered_map::size_type, _Allocator) -> unordered_map<__iter_key_t<_InputIterator>, __iter_val_t<_InputIterator>, hash<__iter_key_t<_InputIterator>>, equal_to<__iter_key_t<_InputIterator>>, _Allocator>; template, typename = _RequireAllocator<_Allocator>> unordered_map(_InputIterator, _InputIterator, _Allocator) -> unordered_map<__iter_key_t<_InputIterator>, __iter_val_t<_InputIterator>, hash<__iter_key_t<_InputIterator>>, equal_to<__iter_key_t<_InputIterator>>, _Allocator>; template, typename = _RequireNotAllocatorOrIntegral<_Hash>, typename = _RequireAllocator<_Allocator>> unordered_map(_InputIterator, _InputIterator, typename unordered_map::size_type, _Hash, _Allocator) -> unordered_map<__iter_key_t<_InputIterator>, __iter_val_t<_InputIterator>, _Hash, equal_to<__iter_key_t<_InputIterator>>, _Allocator>; template> unordered_map(initializer_list>, typename unordered_map::size_type, _Allocator) -> unordered_map<_Key, _Tp, hash<_Key>, equal_to<_Key>, _Allocator>; template> unordered_map(initializer_list>, _Allocator) -> unordered_map<_Key, _Tp, hash<_Key>, equal_to<_Key>, _Allocator>; template, typename = _RequireAllocator<_Allocator>> unordered_map(initializer_list>, typename unordered_map::size_type, _Hash, _Allocator) -> unordered_map<_Key, _Tp, _Hash, equal_to<_Key>, _Allocator>; # 1251 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_map.h" 3 template, typename _Pred = equal_to<_Key>, typename _Alloc = allocator>> class unordered_multimap { typedef __ummap_hashtable<_Key, _Tp, _Hash, _Pred, _Alloc> _Hashtable; _Hashtable _M_h; public: typedef typename _Hashtable::key_type key_type; typedef typename _Hashtable::value_type value_type; typedef typename _Hashtable::mapped_type mapped_type; typedef typename _Hashtable::hasher hasher; typedef typename _Hashtable::key_equal key_equal; typedef typename _Hashtable::allocator_type allocator_type; typedef typename _Hashtable::pointer pointer; typedef typename _Hashtable::const_pointer const_pointer; typedef typename _Hashtable::reference reference; typedef typename _Hashtable::const_reference const_reference; typedef typename _Hashtable::iterator iterator; typedef typename _Hashtable::const_iterator const_iterator; typedef typename _Hashtable::local_iterator local_iterator; typedef typename _Hashtable::const_local_iterator const_local_iterator; typedef typename _Hashtable::size_type size_type; typedef typename _Hashtable::difference_type difference_type; using node_type = typename _Hashtable::node_type; unordered_multimap() = default; # 1302 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_map.h" 3 explicit unordered_multimap(size_type __n, const hasher& __hf = hasher(), const key_equal& __eql = key_equal(), const allocator_type& __a = allocator_type()) : _M_h(__n, __hf, __eql, __a) { } # 1323 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_map.h" 3 template unordered_multimap(_InputIterator __first, _InputIterator __last, size_type __n = 0, const hasher& __hf = hasher(), const key_equal& __eql = key_equal(), const allocator_type& __a = allocator_type()) : _M_h(__first, __last, __n, __hf, __eql, __a) { } unordered_multimap(const unordered_multimap&) = default; unordered_multimap(unordered_multimap&&) = default; explicit unordered_multimap(const allocator_type& __a) : _M_h(__a) { } unordered_multimap(const unordered_multimap& __ummap, const allocator_type& __a) : _M_h(__ummap._M_h, __a) { } unordered_multimap(unordered_multimap&& __ummap, const allocator_type& __a) noexcept( noexcept(_Hashtable(std::move(__ummap._M_h), __a)) ) : _M_h(std::move(__ummap._M_h), __a) { } # 1379 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_map.h" 3 unordered_multimap(initializer_list __l, size_type __n = 0, const hasher& __hf = hasher(), const key_equal& __eql = key_equal(), const allocator_type& __a = allocator_type()) : _M_h(__l, __n, __hf, __eql, __a) { } unordered_multimap(size_type __n, const allocator_type& __a) : unordered_multimap(__n, hasher(), key_equal(), __a) { } unordered_multimap(size_type __n, const hasher& __hf, const allocator_type& __a) : unordered_multimap(__n, __hf, key_equal(), __a) { } template unordered_multimap(_InputIterator __first, _InputIterator __last, size_type __n, const allocator_type& __a) : unordered_multimap(__first, __last, __n, hasher(), key_equal(), __a) { } template unordered_multimap(_InputIterator __first, _InputIterator __last, size_type __n, const hasher& __hf, const allocator_type& __a) : unordered_multimap(__first, __last, __n, __hf, key_equal(), __a) { } unordered_multimap(initializer_list __l, size_type __n, const allocator_type& __a) : unordered_multimap(__l, __n, hasher(), key_equal(), __a) { } unordered_multimap(initializer_list __l, size_type __n, const hasher& __hf, const allocator_type& __a) : unordered_multimap(__l, __n, __hf, key_equal(), __a) { } unordered_multimap& operator=(const unordered_multimap&) = default; unordered_multimap& operator=(unordered_multimap&&) = default; # 1441 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_map.h" 3 unordered_multimap& operator=(initializer_list __l) { _M_h = __l; return *this; } allocator_type get_allocator() const noexcept { return _M_h.get_allocator(); } [[__nodiscard__]] bool empty() const noexcept { return _M_h.empty(); } size_type size() const noexcept { return _M_h.size(); } size_type max_size() const noexcept { return _M_h.max_size(); } iterator begin() noexcept { return _M_h.begin(); } const_iterator begin() const noexcept { return _M_h.begin(); } const_iterator cbegin() const noexcept { return _M_h.begin(); } iterator end() noexcept { return _M_h.end(); } const_iterator end() const noexcept { return _M_h.end(); } const_iterator cend() const noexcept { return _M_h.end(); } # 1533 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_map.h" 3 template iterator emplace(_Args&&... __args) { return _M_h.emplace(std::forward<_Args>(__args)...); } # 1560 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_map.h" 3 template iterator emplace_hint(const_iterator __pos, _Args&&... __args) { return _M_h.emplace_hint(__pos, std::forward<_Args>(__args)...); } # 1575 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_map.h" 3 iterator insert(const value_type& __x) { return _M_h.insert(__x); } iterator insert(value_type&& __x) { return _M_h.insert(std::move(__x)); } template __enable_if_t::value, iterator> insert(_Pair&& __x) { return _M_h.emplace(std::forward<_Pair>(__x)); } # 1609 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_map.h" 3 iterator insert(const_iterator __hint, const value_type& __x) { return _M_h.insert(__hint, __x); } iterator insert(const_iterator __hint, value_type&& __x) { return _M_h.insert(__hint, std::move(__x)); } template __enable_if_t::value, iterator> insert(const_iterator __hint, _Pair&& __x) { return _M_h.emplace_hint(__hint, std::forward<_Pair>(__x)); } # 1634 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_map.h" 3 template void insert(_InputIterator __first, _InputIterator __last) { _M_h.insert(__first, __last); } # 1647 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_map.h" 3 void insert(initializer_list __l) { _M_h.insert(__l); } node_type extract(const_iterator __pos) { do { if (std::__is_constant_evaluated()) if (__builtin_expect(!bool(__pos != end()), false)) std::__glibcxx_assert_fail(); } while (false); return _M_h.extract(__pos); } node_type extract(const key_type& __key) { return _M_h.extract(__key); } iterator insert(node_type&& __nh) { return _M_h._M_reinsert_node_multi(cend(), std::move(__nh)); } iterator insert(const_iterator __hint, node_type&& __nh) { return _M_h._M_reinsert_node_multi(__hint, std::move(__nh)); } # 1690 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_map.h" 3 iterator erase(const_iterator __position) { return _M_h.erase(__position); } iterator erase(iterator __position) { return _M_h.erase(__position); } # 1711 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_map.h" 3 size_type erase(const key_type& __x) { return _M_h.erase(__x); } # 1730 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_map.h" 3 iterator erase(const_iterator __first, const_iterator __last) { return _M_h.erase(__first, __last); } void clear() noexcept { _M_h.clear(); } # 1754 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_map.h" 3 void swap(unordered_multimap& __x) noexcept( noexcept(_M_h.swap(__x._M_h)) ) { _M_h.swap(__x._M_h); } template friend class std::_Hash_merge_helper; template void merge(unordered_multimap<_Key, _Tp, _H2, _P2, _Alloc>& __source) { using _Merge_helper = _Hash_merge_helper; _M_h._M_merge_multi(_Merge_helper::_S_get_table(__source)); } template void merge(unordered_multimap<_Key, _Tp, _H2, _P2, _Alloc>&& __source) { merge(__source); } template void merge(unordered_map<_Key, _Tp, _H2, _P2, _Alloc>& __source) { using _Merge_helper = _Hash_merge_helper; _M_h._M_merge_multi(_Merge_helper::_S_get_table(__source)); } template void merge(unordered_map<_Key, _Tp, _H2, _P2, _Alloc>&& __source) { merge(__source); } hasher hash_function() const { return _M_h.hash_function(); } key_equal key_eq() const { return _M_h.key_eq(); } # 1820 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_map.h" 3 iterator find(const key_type& __x) { return _M_h.find(__x); } template auto find(const _Kt& __x) -> decltype(_M_h._M_find_tr(__x)) { return _M_h._M_find_tr(__x); } const_iterator find(const key_type& __x) const { return _M_h.find(__x); } template auto find(const _Kt& __x) const -> decltype(_M_h._M_find_tr(__x)) { return _M_h._M_find_tr(__x); } # 1849 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_map.h" 3 size_type count(const key_type& __x) const { return _M_h.count(__x); } template auto count(const _Kt& __x) const -> decltype(_M_h._M_count_tr(__x)) { return _M_h._M_count_tr(__x); } # 1868 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_map.h" 3 bool contains(const key_type& __x) const { return _M_h.find(__x) != _M_h.end(); } template auto contains(const _Kt& __x) const -> decltype(_M_h._M_find_tr(__x), void(), true) { return _M_h._M_find_tr(__x) != _M_h.end(); } # 1887 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_map.h" 3 std::pair equal_range(const key_type& __x) { return _M_h.equal_range(__x); } template auto equal_range(const _Kt& __x) -> decltype(_M_h._M_equal_range_tr(__x)) { return _M_h._M_equal_range_tr(__x); } std::pair equal_range(const key_type& __x) const { return _M_h.equal_range(__x); } template auto equal_range(const _Kt& __x) const -> decltype(_M_h._M_equal_range_tr(__x)) { return _M_h._M_equal_range_tr(__x); } size_type bucket_count() const noexcept { return _M_h.bucket_count(); } size_type max_bucket_count() const noexcept { return _M_h.max_bucket_count(); } size_type bucket_size(size_type __n) const { return _M_h.bucket_size(__n); } size_type bucket(const key_type& __key) const { return _M_h.bucket(__key); } local_iterator begin(size_type __n) { return _M_h.begin(__n); } # 1959 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_map.h" 3 const_local_iterator begin(size_type __n) const { return _M_h.begin(__n); } const_local_iterator cbegin(size_type __n) const { return _M_h.cbegin(__n); } # 1974 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_map.h" 3 local_iterator end(size_type __n) { return _M_h.end(__n); } # 1985 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_map.h" 3 const_local_iterator end(size_type __n) const { return _M_h.end(__n); } const_local_iterator cend(size_type __n) const { return _M_h.cend(__n); } float load_factor() const noexcept { return _M_h.load_factor(); } float max_load_factor() const noexcept { return _M_h.max_load_factor(); } void max_load_factor(float __z) { _M_h.max_load_factor(__z); } # 2022 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_map.h" 3 void rehash(size_type __n) { _M_h.rehash(__n); } # 2033 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_map.h" 3 void reserve(size_type __n) { _M_h.reserve(__n); } template friend bool operator==(const unordered_multimap<_Key1, _Tp1, _Hash1, _Pred1, _Alloc1>&, const unordered_multimap<_Key1, _Tp1, _Hash1, _Pred1, _Alloc1>&); }; template>, typename _Pred = equal_to<__iter_key_t<_InputIterator>>, typename _Allocator = allocator<__iter_to_alloc_t<_InputIterator>>, typename = _RequireInputIter<_InputIterator>, typename = _RequireNotAllocatorOrIntegral<_Hash>, typename = _RequireNotAllocator<_Pred>, typename = _RequireAllocator<_Allocator>> unordered_multimap(_InputIterator, _InputIterator, unordered_multimap::size_type = {}, _Hash = _Hash(), _Pred = _Pred(), _Allocator = _Allocator()) -> unordered_multimap<__iter_key_t<_InputIterator>, __iter_val_t<_InputIterator>, _Hash, _Pred, _Allocator>; template, typename _Pred = equal_to<_Key>, typename _Allocator = allocator>, typename = _RequireNotAllocatorOrIntegral<_Hash>, typename = _RequireNotAllocator<_Pred>, typename = _RequireAllocator<_Allocator>> unordered_multimap(initializer_list>, unordered_multimap::size_type = {}, _Hash = _Hash(), _Pred = _Pred(), _Allocator = _Allocator()) -> unordered_multimap<_Key, _Tp, _Hash, _Pred, _Allocator>; template, typename = _RequireAllocator<_Allocator>> unordered_multimap(_InputIterator, _InputIterator, unordered_multimap::size_type, _Allocator) -> unordered_multimap<__iter_key_t<_InputIterator>, __iter_val_t<_InputIterator>, hash<__iter_key_t<_InputIterator>>, equal_to<__iter_key_t<_InputIterator>>, _Allocator>; template, typename = _RequireAllocator<_Allocator>> unordered_multimap(_InputIterator, _InputIterator, _Allocator) -> unordered_multimap<__iter_key_t<_InputIterator>, __iter_val_t<_InputIterator>, hash<__iter_key_t<_InputIterator>>, equal_to<__iter_key_t<_InputIterator>>, _Allocator>; template, typename = _RequireNotAllocatorOrIntegral<_Hash>, typename = _RequireAllocator<_Allocator>> unordered_multimap(_InputIterator, _InputIterator, unordered_multimap::size_type, _Hash, _Allocator) -> unordered_multimap<__iter_key_t<_InputIterator>, __iter_val_t<_InputIterator>, _Hash, equal_to<__iter_key_t<_InputIterator>>, _Allocator>; template> unordered_multimap(initializer_list>, unordered_multimap::size_type, _Allocator) -> unordered_multimap<_Key, _Tp, hash<_Key>, equal_to<_Key>, _Allocator>; template> unordered_multimap(initializer_list>, _Allocator) -> unordered_multimap<_Key, _Tp, hash<_Key>, equal_to<_Key>, _Allocator>; template, typename = _RequireAllocator<_Allocator>> unordered_multimap(initializer_list>, unordered_multimap::size_type, _Hash, _Allocator) -> unordered_multimap<_Key, _Tp, _Hash, equal_to<_Key>, _Allocator>; template inline void swap(unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __x, unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __y) noexcept(noexcept(__x.swap(__y))) { __x.swap(__y); } template inline void swap(unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __x, unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __y) noexcept(noexcept(__x.swap(__y))) { __x.swap(__y); } template inline bool operator==(const unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __x, const unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __y) { return __x._M_h._M_equal(__y._M_h); } # 2156 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_map.h" 3 template inline bool operator==(const unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __x, const unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __y) { return __x._M_h._M_equal(__y._M_h); } # 2174 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_map.h" 3 template struct _Hash_merge_helper< std::unordered_map<_Key, _Val, _Hash1, _Eq1, _Alloc>, _Hash2, _Eq2> { private: template using unordered_map = std::unordered_map<_Tp...>; template using unordered_multimap = std::unordered_multimap<_Tp...>; friend unordered_map<_Key, _Val, _Hash1, _Eq1, _Alloc>; static auto& _S_get_table(unordered_map<_Key, _Val, _Hash2, _Eq2, _Alloc>& __map) { return __map._M_h; } static auto& _S_get_table(unordered_multimap<_Key, _Val, _Hash2, _Eq2, _Alloc>& __map) { return __map._M_h; } }; template struct _Hash_merge_helper< std::unordered_multimap<_Key, _Val, _Hash1, _Eq1, _Alloc>, _Hash2, _Eq2> { private: template using unordered_map = std::unordered_map<_Tp...>; template using unordered_multimap = std::unordered_multimap<_Tp...>; friend unordered_multimap<_Key, _Val, _Hash1, _Eq1, _Alloc>; static auto& _S_get_table(unordered_map<_Key, _Val, _Hash2, _Eq2, _Alloc>& __map) { return __map._M_h; } static auto& _S_get_table(unordered_multimap<_Key, _Val, _Hash2, _Eq2, _Alloc>& __map) { return __map._M_h; } }; } # 42 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/unordered_map" 2 3 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/range_access.h" 1 3 # 34 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/range_access.h" 3 namespace std __attribute__ ((__visibility__ ("default"))) { template [[__nodiscard__, __gnu__::__always_inline__]] inline constexpr auto begin(_Container& __cont) -> decltype(__cont.begin()) { return __cont.begin(); } template [[__nodiscard__, __gnu__::__always_inline__]] inline constexpr auto begin(const _Container& __cont) -> decltype(__cont.begin()) { return __cont.begin(); } template [[__nodiscard__, __gnu__::__always_inline__]] inline constexpr auto end(_Container& __cont) -> decltype(__cont.end()) { return __cont.end(); } template [[__nodiscard__, __gnu__::__always_inline__]] inline constexpr auto end(const _Container& __cont) -> decltype(__cont.end()) { return __cont.end(); } template [[__nodiscard__, __gnu__::__always_inline__]] inline constexpr _Tp* begin(_Tp (&__arr)[_Nm]) noexcept { return __arr; } template [[__nodiscard__, __gnu__::__always_inline__]] inline constexpr _Tp* end(_Tp (&__arr)[_Nm]) noexcept { return __arr + _Nm; } template class valarray; template _Tp* begin(valarray<_Tp>&) noexcept; template const _Tp* begin(const valarray<_Tp>&) noexcept; template _Tp* end(valarray<_Tp>&) noexcept; template const _Tp* end(const valarray<_Tp>&) noexcept; template [[__nodiscard__, __gnu__::__always_inline__]] constexpr auto cbegin(const _Container& __cont) noexcept(noexcept(std::begin(__cont))) -> decltype(std::begin(__cont)) { return std::begin(__cont); } template [[__nodiscard__, __gnu__::__always_inline__]] constexpr auto cend(const _Container& __cont) noexcept(noexcept(std::end(__cont))) -> decltype(std::end(__cont)) { return std::end(__cont); } template [[__nodiscard__, __gnu__::__always_inline__]] inline constexpr auto rbegin(_Container& __cont) -> decltype(__cont.rbegin()) { return __cont.rbegin(); } template [[__nodiscard__, __gnu__::__always_inline__]] inline constexpr auto rbegin(const _Container& __cont) -> decltype(__cont.rbegin()) { return __cont.rbegin(); } template [[__nodiscard__, __gnu__::__always_inline__]] inline constexpr auto rend(_Container& __cont) -> decltype(__cont.rend()) { return __cont.rend(); } template [[__nodiscard__, __gnu__::__always_inline__]] inline constexpr auto rend(const _Container& __cont) -> decltype(__cont.rend()) { return __cont.rend(); } template [[__nodiscard__]] inline constexpr reverse_iterator<_Tp*> rbegin(_Tp (&__arr)[_Nm]) noexcept { return reverse_iterator<_Tp*>(__arr + _Nm); } template [[__nodiscard__]] inline constexpr reverse_iterator<_Tp*> rend(_Tp (&__arr)[_Nm]) noexcept { return reverse_iterator<_Tp*>(__arr); } template [[__nodiscard__]] inline constexpr reverse_iterator rbegin(initializer_list<_Tp> __il) noexcept { return reverse_iterator(__il.end()); } template [[__nodiscard__]] inline constexpr reverse_iterator rend(initializer_list<_Tp> __il) noexcept { return reverse_iterator(__il.begin()); } template [[__nodiscard__, __gnu__::__always_inline__]] inline constexpr auto crbegin(const _Container& __cont) -> decltype(std::rbegin(__cont)) { return std::rbegin(__cont); } template [[__nodiscard__, __gnu__::__always_inline__]] inline constexpr auto crend(const _Container& __cont) -> decltype(std::rend(__cont)) { return std::rend(__cont); } # 259 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/range_access.h" 3 template [[nodiscard, __gnu__::__always_inline__]] constexpr auto size(const _Container& __cont) noexcept(noexcept(__cont.size())) -> decltype(__cont.size()) { return __cont.size(); } template [[nodiscard, __gnu__::__always_inline__]] constexpr size_t size(const _Tp (&)[_Nm]) noexcept { return _Nm; } template [[nodiscard, __gnu__::__always_inline__]] constexpr auto empty(const _Container& __cont) noexcept(noexcept(__cont.empty())) -> decltype(__cont.empty()) { return __cont.empty(); } template [[nodiscard, __gnu__::__always_inline__]] constexpr bool empty(const _Tp (&)[_Nm]) noexcept { return false; } template [[nodiscard, __gnu__::__always_inline__]] constexpr bool empty(initializer_list<_Tp> __il) noexcept { return __il.size() == 0;} template [[nodiscard, __gnu__::__always_inline__]] constexpr auto data(_Container& __cont) noexcept(noexcept(__cont.data())) -> decltype(__cont.data()) { return __cont.data(); } template [[nodiscard, __gnu__::__always_inline__]] constexpr auto data(const _Container& __cont) noexcept(noexcept(__cont.data())) -> decltype(__cont.data()) { return __cont.data(); } template [[nodiscard, __gnu__::__always_inline__]] constexpr _Tp* data(_Tp (&__array)[_Nm]) noexcept { return __array; } template [[nodiscard, __gnu__::__always_inline__]] constexpr const _Tp* data(initializer_list<_Tp> __il) noexcept { return __il.begin(); } template [[nodiscard, __gnu__::__always_inline__]] constexpr auto ssize(const _Container& __cont) noexcept(noexcept(__cont.size())) -> common_type_t> { using type = make_signed_t; return static_cast>(__cont.size()); } template [[nodiscard, __gnu__::__always_inline__]] constexpr ptrdiff_t ssize(const _Tp (&)[_Num]) noexcept { return _Num; } } # 43 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/unordered_map" 2 3 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/erase_if.h" 1 3 # 34 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/erase_if.h" 3 namespace std { namespace __detail { template typename _Container::size_type __erase_nodes_if(_Container& __cont, _UnsafeContainer& __ucont, _Predicate __pred) { typename _Container::size_type __num = 0; for (auto __iter = __ucont.begin(), __last = __ucont.end(); __iter != __last;) { if (__pred(*__iter)) { __iter = __cont.erase(__iter); ++__num; } else ++__iter; } return __num; } } } # 44 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/unordered_map" 2 3 # 55 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/unordered_map" 3 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/version.h" 1 3 # 48 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/version.h" 3 # 56 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/unordered_map" 2 3 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/memory_resource.h" 1 3 # 34 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/memory_resource.h" 3 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/cstddef" 1 3 # 43 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/cstddef" 3 # 1 "/usr/bin/../lib/clang/18/include/stddef.h" 1 3 # 72 "/usr/bin/../lib/clang/18/include/stddef.h" 3 # 1 "/usr/bin/../lib/clang/18/include/__stddef_ptrdiff_t.h" 1 3 # 18 "/usr/bin/../lib/clang/18/include/__stddef_ptrdiff_t.h" 3 typedef long int ptrdiff_t; # 73 "/usr/bin/../lib/clang/18/include/stddef.h" 2 3 # 1 "/usr/bin/../lib/clang/18/include/__stddef_size_t.h" 1 3 # 18 "/usr/bin/../lib/clang/18/include/__stddef_size_t.h" 3 typedef long unsigned int size_t; # 78 "/usr/bin/../lib/clang/18/include/stddef.h" 2 3 # 87 "/usr/bin/../lib/clang/18/include/stddef.h" 3 # 1 "/usr/bin/../lib/clang/18/include/__stddef_wchar_t.h" 1 3 # 88 "/usr/bin/../lib/clang/18/include/stddef.h" 2 3 # 1 "/usr/bin/../lib/clang/18/include/__stddef_null.h" 1 3 # 93 "/usr/bin/../lib/clang/18/include/stddef.h" 2 3 # 1 "/usr/bin/../lib/clang/18/include/__stddef_nullptr_t.h" 1 3 # 98 "/usr/bin/../lib/clang/18/include/stddef.h" 2 3 # 107 "/usr/bin/../lib/clang/18/include/stddef.h" 3 # 1 "/usr/bin/../lib/clang/18/include/__stddef_max_align_t.h" 1 3 # 19 "/usr/bin/../lib/clang/18/include/__stddef_max_align_t.h" 3 typedef struct { long long __clang_max_align_nonce1 __attribute__((__aligned__(__alignof__(long long)))); long double __clang_max_align_nonce2 __attribute__((__aligned__(__alignof__(long double)))); } max_align_t; # 108 "/usr/bin/../lib/clang/18/include/stddef.h" 2 3 # 1 "/usr/bin/../lib/clang/18/include/__stddef_offsetof.h" 1 3 # 113 "/usr/bin/../lib/clang/18/include/stddef.h" 2 3 # 51 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/cstddef" 2 3 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/version.h" 1 3 # 48 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/version.h" 3 # 54 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/cstddef" 2 3 extern "C++" { namespace std { using ::max_align_t; } namespace std { enum class byte : unsigned char {}; template struct __byte_operand { }; template<> struct __byte_operand { using __type = byte; }; template<> struct __byte_operand { using __type = byte; }; template<> struct __byte_operand { using __type = byte; }; template<> struct __byte_operand { using __type = byte; }; template<> struct __byte_operand { using __type = byte; }; template<> struct __byte_operand { using __type = byte; }; template<> struct __byte_operand { using __type = byte; }; template<> struct __byte_operand { using __type = byte; }; template<> struct __byte_operand { using __type = byte; }; template<> struct __byte_operand { using __type = byte; }; template<> struct __byte_operand { using __type = byte; }; template<> struct __byte_operand { using __type = byte; }; template<> struct __byte_operand { using __type = byte; }; template<> struct __byte_operand { using __type = byte; }; template<> struct __byte_operand { using __type = byte; }; template<> struct __byte_operand { using __type = byte; }; template<> struct __byte_operand<__int128> { using __type = byte; }; template<> struct __byte_operand { using __type = byte; }; # 109 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/cstddef" 3 template struct __byte_operand : __byte_operand<_IntegerType> { }; template struct __byte_operand : __byte_operand<_IntegerType> { }; template struct __byte_operand : __byte_operand<_IntegerType> { }; template using __byte_op_t = typename __byte_operand<_IntegerType>::__type; template [[__gnu__::__always_inline__]] constexpr __byte_op_t<_IntegerType> operator<<(byte __b, _IntegerType __shift) noexcept { return (byte)(unsigned char)((unsigned)__b << __shift); } template [[__gnu__::__always_inline__]] constexpr __byte_op_t<_IntegerType> operator>>(byte __b, _IntegerType __shift) noexcept { return (byte)(unsigned char)((unsigned)__b >> __shift); } [[__gnu__::__always_inline__]] constexpr byte operator|(byte __l, byte __r) noexcept { return (byte)(unsigned char)((unsigned)__l | (unsigned)__r); } [[__gnu__::__always_inline__]] constexpr byte operator&(byte __l, byte __r) noexcept { return (byte)(unsigned char)((unsigned)__l & (unsigned)__r); } [[__gnu__::__always_inline__]] constexpr byte operator^(byte __l, byte __r) noexcept { return (byte)(unsigned char)((unsigned)__l ^ (unsigned)__r); } [[__gnu__::__always_inline__]] constexpr byte operator~(byte __b) noexcept { return (byte)(unsigned char)~(unsigned)__b; } template [[__gnu__::__always_inline__]] constexpr __byte_op_t<_IntegerType>& operator<<=(byte& __b, _IntegerType __shift) noexcept { return __b = __b << __shift; } template [[__gnu__::__always_inline__]] constexpr __byte_op_t<_IntegerType>& operator>>=(byte& __b, _IntegerType __shift) noexcept { return __b = __b >> __shift; } [[__gnu__::__always_inline__]] constexpr byte& operator|=(byte& __l, byte __r) noexcept { return __l = __l | __r; } [[__gnu__::__always_inline__]] constexpr byte& operator&=(byte& __l, byte __r) noexcept { return __l = __l & __r; } [[__gnu__::__always_inline__]] constexpr byte& operator^=(byte& __l, byte __r) noexcept { return __l = __l ^ __r; } template [[nodiscard,__gnu__::__always_inline__]] constexpr _IntegerType to_integer(__byte_op_t<_IntegerType> __b) noexcept { return _IntegerType(__b); } } } # 39 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/memory_resource.h" 2 3 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/uses_allocator_args.h" 1 3 # 34 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/uses_allocator_args.h" 3 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/version.h" 1 3 # 48 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/version.h" 3 # 36 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/uses_allocator_args.h" 2 3 namespace std __attribute__ ((__visibility__ ("default"))) { template concept _Std_pair = __is_pair>; template constexpr auto uses_allocator_construction_args(const _Alloc& __a, _Args&&... __args) noexcept requires (! _Std_pair<_Tp>) { if constexpr (uses_allocator_v, _Alloc>) { if constexpr (is_constructible_v<_Tp, allocator_arg_t, const _Alloc&, _Args...>) { return tuple( allocator_arg, __a, std::forward<_Args>(__args)...); } else { static_assert(is_constructible_v<_Tp, _Args..., const _Alloc&>, "construction with an allocator must be possible" " if uses_allocator is true"); return tuple<_Args&&..., const _Alloc&>( std::forward<_Args>(__args)..., __a); } } else { static_assert(is_constructible_v<_Tp, _Args...>); return tuple<_Args&&...>(std::forward<_Args>(__args)...); } } template<_Std_pair _Tp, typename _Alloc, typename _Tuple1, typename _Tuple2> constexpr auto uses_allocator_construction_args(const _Alloc& __a, piecewise_construct_t, _Tuple1&& __x, _Tuple2&& __y) noexcept; template<_Std_pair _Tp, typename _Alloc> constexpr auto uses_allocator_construction_args(const _Alloc&) noexcept; template<_Std_pair _Tp, typename _Alloc, typename _Up, typename _Vp> constexpr auto uses_allocator_construction_args(const _Alloc&, _Up&&, _Vp&&) noexcept; template<_Std_pair _Tp, typename _Alloc, typename _Up, typename _Vp> constexpr auto uses_allocator_construction_args(const _Alloc&, const pair<_Up, _Vp>&) noexcept; template<_Std_pair _Tp, typename _Alloc, typename _Up, typename _Vp> constexpr auto uses_allocator_construction_args(const _Alloc&, pair<_Up, _Vp>&&) noexcept; template<_Std_pair _Tp, typename _Alloc, typename _Up, typename _Vp> constexpr auto uses_allocator_construction_args(const _Alloc&, pair<_Up, _Vp>&) noexcept; template<_Std_pair _Tp, typename _Alloc, typename _Up, typename _Vp> constexpr auto uses_allocator_construction_args(const _Alloc&, const pair<_Up, _Vp>&&) noexcept; template<_Std_pair _Tp, typename _Alloc, typename _Tuple1, typename _Tuple2> constexpr auto uses_allocator_construction_args(const _Alloc& __a, piecewise_construct_t, _Tuple1&& __x, _Tuple2&& __y) noexcept { using _Tp1 = typename _Tp::first_type; using _Tp2 = typename _Tp::second_type; return std::make_tuple(piecewise_construct, std::apply([&__a](auto&&... __args1) { return std::uses_allocator_construction_args<_Tp1>( __a, std::forward(__args1)...); }, std::forward<_Tuple1>(__x)), std::apply([&__a](auto&&... __args2) { return std::uses_allocator_construction_args<_Tp2>( __a, std::forward(__args2)...); }, std::forward<_Tuple2>(__y))); } template<_Std_pair _Tp, typename _Alloc> constexpr auto uses_allocator_construction_args(const _Alloc& __a) noexcept { using _Tp1 = typename _Tp::first_type; using _Tp2 = typename _Tp::second_type; return std::make_tuple(piecewise_construct, std::uses_allocator_construction_args<_Tp1>(__a), std::uses_allocator_construction_args<_Tp2>(__a)); } template<_Std_pair _Tp, typename _Alloc, typename _Up, typename _Vp> constexpr auto uses_allocator_construction_args(const _Alloc& __a, _Up&& __u, _Vp&& __v) noexcept { using _Tp1 = typename _Tp::first_type; using _Tp2 = typename _Tp::second_type; return std::make_tuple(piecewise_construct, std::uses_allocator_construction_args<_Tp1>(__a, std::forward<_Up>(__u)), std::uses_allocator_construction_args<_Tp2>(__a, std::forward<_Vp>(__v))); } template<_Std_pair _Tp, typename _Alloc, typename _Up, typename _Vp> constexpr auto uses_allocator_construction_args(const _Alloc& __a, const pair<_Up, _Vp>& __pr) noexcept { using _Tp1 = typename _Tp::first_type; using _Tp2 = typename _Tp::second_type; return std::make_tuple(piecewise_construct, std::uses_allocator_construction_args<_Tp1>(__a, __pr.first), std::uses_allocator_construction_args<_Tp2>(__a, __pr.second)); } template<_Std_pair _Tp, typename _Alloc, typename _Up, typename _Vp> constexpr auto uses_allocator_construction_args(const _Alloc& __a, pair<_Up, _Vp>&& __pr) noexcept { using _Tp1 = typename _Tp::first_type; using _Tp2 = typename _Tp::second_type; return std::make_tuple(piecewise_construct, std::uses_allocator_construction_args<_Tp1>(__a, std::get<0>(std::move(__pr))), std::uses_allocator_construction_args<_Tp2>(__a, std::get<1>(std::move(__pr)))); } template<_Std_pair _Tp, typename _Alloc, typename _Up, typename _Vp> constexpr auto uses_allocator_construction_args(const _Alloc& __a, pair<_Up, _Vp>& __pr) noexcept { using _Tp1 = typename _Tp::first_type; using _Tp2 = typename _Tp::second_type; return std::make_tuple(piecewise_construct, std::uses_allocator_construction_args<_Tp1>(__a, __pr.first), std::uses_allocator_construction_args<_Tp2>(__a, __pr.second)); } template<_Std_pair _Tp, typename _Alloc, typename _Up, typename _Vp> constexpr auto uses_allocator_construction_args(const _Alloc& __a, const pair<_Up, _Vp>&& __pr) noexcept { using _Tp1 = typename _Tp::first_type; using _Tp2 = typename _Tp::second_type; return std::make_tuple(piecewise_construct, std::uses_allocator_construction_args<_Tp1>(__a, std::get<0>(std::move(__pr))), std::uses_allocator_construction_args<_Tp2>(__a, std::get<1>(std::move(__pr)))); } template constexpr _Tp make_obj_using_allocator(const _Alloc& __a, _Args&&... __args) { return std::make_from_tuple<_Tp>( std::uses_allocator_construction_args<_Tp>(__a, std::forward<_Args>(__args)...)); } template constexpr _Tp* uninitialized_construct_using_allocator(_Tp* __p, const _Alloc& __a, _Args&&... __args) { return std::apply([&](auto&&... __xs) { return std::construct_at(__p, std::forward(__xs)...); }, std::uses_allocator_construction_args<_Tp>(__a, std::forward<_Args>(__args)...)); } } # 42 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/memory_resource.h" 2 3 namespace std __attribute__ ((__visibility__ ("default"))) { namespace pmr { class memory_resource { static constexpr size_t _S_max_align = alignof(max_align_t); public: memory_resource() = default; memory_resource(const memory_resource&) = default; virtual ~memory_resource(); memory_resource& operator=(const memory_resource&) = default; [[nodiscard]] void* allocate(size_t __bytes, size_t __alignment = _S_max_align) __attribute__((__returns_nonnull__,__alloc_size__(2),__alloc_align__(3))) { return ::operator new(__bytes, do_allocate(__bytes, __alignment)); } void deallocate(void* __p, size_t __bytes, size_t __alignment = _S_max_align) __attribute__((__nonnull__)) { return do_deallocate(__p, __bytes, __alignment); } [[nodiscard]] bool is_equal(const memory_resource& __other) const noexcept { return do_is_equal(__other); } private: virtual void* do_allocate(size_t __bytes, size_t __alignment) = 0; virtual void do_deallocate(void* __p, size_t __bytes, size_t __alignment) = 0; virtual bool do_is_equal(const memory_resource& __other) const noexcept = 0; }; [[nodiscard]] inline bool operator==(const memory_resource& __a, const memory_resource& __b) noexcept { return &__a == &__b || __a.is_equal(__b); } # 119 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/memory_resource.h" 3 template class polymorphic_allocator { template struct __not_pair { using type = void; }; template struct __not_pair> { }; public: using value_type = _Tp; polymorphic_allocator() noexcept { extern memory_resource* get_default_resource() noexcept __attribute__((__returns_nonnull__)); _M_resource = get_default_resource(); } polymorphic_allocator(memory_resource* __r) noexcept __attribute__((__nonnull__)) : _M_resource(__r) { ; } polymorphic_allocator(const polymorphic_allocator& __other) = default; template polymorphic_allocator(const polymorphic_allocator<_Up>& __x) noexcept : _M_resource(__x.resource()) { } polymorphic_allocator& operator=(const polymorphic_allocator&) = delete; [[nodiscard]] _Tp* allocate(size_t __n) __attribute__((__returns_nonnull__)) { if ((__gnu_cxx::__int_traits::__max / sizeof(_Tp)) < __n) std::__throw_bad_array_new_length(); return static_cast<_Tp*>(_M_resource->allocate(__n * sizeof(_Tp), alignof(_Tp))); } void deallocate(_Tp* __p, size_t __n) noexcept __attribute__((__nonnull__)) { _M_resource->deallocate(__p, __n * sizeof(_Tp), alignof(_Tp)); } [[nodiscard]] void* allocate_bytes(size_t __nbytes, size_t __alignment = alignof(max_align_t)) { return _M_resource->allocate(__nbytes, __alignment); } void deallocate_bytes(void* __p, size_t __nbytes, size_t __alignment = alignof(max_align_t)) { _M_resource->deallocate(__p, __nbytes, __alignment); } template [[nodiscard]] _Up* allocate_object(size_t __n = 1) { if ((__gnu_cxx::__int_traits::__max / sizeof(_Up)) < __n) std::__throw_bad_array_new_length(); return static_cast<_Up*>(allocate_bytes(__n * sizeof(_Up), alignof(_Up))); } template void deallocate_object(_Up* __p, size_t __n = 1) { deallocate_bytes(__p, __n * sizeof(_Up), alignof(_Up)); } template [[nodiscard]] _Up* new_object(_CtorArgs&&... __ctor_args) { _Up* __p = allocate_object<_Up>(); try { construct(__p, std::forward<_CtorArgs>(__ctor_args)...); } catch(...) { deallocate_object(__p); throw; } return __p; } template void delete_object(_Up* __p) { __p->~_Up(); deallocate_object(__p); } # 297 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/memory_resource.h" 3 template __attribute__((__nonnull__)) void construct(_Tp1* __p, _Args&&... __args) { std::uninitialized_construct_using_allocator(__p, *this, std::forward<_Args>(__args)...); } template __attribute__ ((__deprecated__ ("use '" "allocator_traits::destroy" "' instead"))) __attribute__((__nonnull__)) void destroy(_Up* __p) { __p->~_Up(); } polymorphic_allocator select_on_container_copy_construction() const noexcept { return polymorphic_allocator(); } memory_resource* resource() const noexcept __attribute__((__returns_nonnull__)) { return _M_resource; } [[nodiscard]] friend bool operator==(const polymorphic_allocator& __a, const polymorphic_allocator& __b) noexcept { return *__a.resource() == *__b.resource(); } # 339 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/memory_resource.h" 3 private: # 366 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/memory_resource.h" 3 memory_resource* _M_resource; }; template [[nodiscard]] inline bool operator==(const polymorphic_allocator<_Tp1>& __a, const polymorphic_allocator<_Tp2>& __b) noexcept { return *__a.resource() == *__b.resource(); } # 385 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/memory_resource.h" 3 } template struct allocator_traits; template struct allocator_traits> { using allocator_type = pmr::polymorphic_allocator<_Tp>; using value_type = _Tp; using pointer = _Tp*; using const_pointer = const _Tp*; using void_pointer = void*; using const_void_pointer = const void*; using difference_type = std::ptrdiff_t; using size_type = std::size_t; using propagate_on_container_copy_assignment = false_type; using propagate_on_container_move_assignment = false_type; using propagate_on_container_swap = false_type; static allocator_type select_on_container_copy_construction(const allocator_type&) noexcept { return allocator_type(); } using is_always_equal = false_type; template using rebind_alloc = pmr::polymorphic_allocator<_Up>; template using rebind_traits = allocator_traits>; # 446 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/memory_resource.h" 3 [[nodiscard]] static pointer allocate(allocator_type& __a, size_type __n) { return __a.allocate(__n); } # 461 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/memory_resource.h" 3 [[nodiscard]] static pointer allocate(allocator_type& __a, size_type __n, const_void_pointer) { return __a.allocate(__n); } # 473 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/memory_resource.h" 3 static void deallocate(allocator_type& __a, pointer __p, size_type __n) { __a.deallocate(__p, __n); } # 488 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/memory_resource.h" 3 template static void construct(allocator_type& __a, _Up* __p, _Args&&... __args) { __a.construct(__p, std::forward<_Args>(__args)...); } # 500 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/memory_resource.h" 3 template static constexpr void destroy(allocator_type&, _Up* __p) noexcept(is_nothrow_destructible<_Up>::value) { __p->~_Up(); } static constexpr size_type max_size(const allocator_type&) noexcept { return size_t(-1) / sizeof(value_type); } }; } # 59 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/unordered_map" 2 3 namespace std __attribute__ ((__visibility__ ("default"))) { namespace pmr { template, typename _Pred = std::equal_to<_Key>> using unordered_map = std::unordered_map<_Key, _Tp, _Hash, _Pred, polymorphic_allocator>>; template, typename _Pred = std::equal_to<_Key>> using unordered_multimap = std::unordered_multimap<_Key, _Tp, _Hash, _Pred, polymorphic_allocator>>; } } namespace std __attribute__ ((__visibility__ ("default"))) { template inline typename unordered_map<_Key, _Tp, _Hash, _CPred, _Alloc>::size_type erase_if(unordered_map<_Key, _Tp, _Hash, _CPred, _Alloc>& __cont, _Predicate __pred) { std::unordered_map<_Key, _Tp, _Hash, _CPred, _Alloc>& __ucont = __cont; return __detail::__erase_nodes_if(__cont, __ucont, __pred); } template inline typename unordered_multimap<_Key, _Tp, _Hash, _CPred, _Alloc>:: size_type erase_if(unordered_multimap<_Key, _Tp, _Hash, _CPred, _Alloc>& __cont, _Predicate __pred) { std::unordered_multimap<_Key, _Tp, _Hash, _CPred, _Alloc>& __ucont = __cont; return __detail::__erase_nodes_if(__cont, __ucont, __pred); } } # 25 "/home/avi/scylla-maint/seastar/include/seastar/rpc/rpc.hh" 2 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/unordered_set" 1 3 # 33 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/unordered_set" 3 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_set.h" 1 3 # 38 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_set.h" 3 namespace std __attribute__ ((__visibility__ ("default"))) { template using __uset_traits = __detail::_Hashtable_traits<_Cache, true, true>; template, typename _Pred = std::equal_to<_Value>, typename _Alloc = std::allocator<_Value>, typename _Tr = __uset_traits<__cache_default<_Value, _Hash>::value>> using __uset_hashtable = _Hashtable<_Value, _Value, _Alloc, __detail::_Identity, _Pred, _Hash, __detail::_Mod_range_hashing, __detail::_Default_ranged_hash, __detail::_Prime_rehash_policy, _Tr>; template using __umset_traits = __detail::_Hashtable_traits<_Cache, true, false>; template, typename _Pred = std::equal_to<_Value>, typename _Alloc = std::allocator<_Value>, typename _Tr = __umset_traits<__cache_default<_Value, _Hash>::value>> using __umset_hashtable = _Hashtable<_Value, _Value, _Alloc, __detail::_Identity, _Pred, _Hash, __detail::_Mod_range_hashing, __detail::_Default_ranged_hash, __detail::_Prime_rehash_policy, _Tr>; template class unordered_multiset; # 100 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_set.h" 3 template, typename _Pred = equal_to<_Value>, typename _Alloc = allocator<_Value>> class unordered_set { typedef __uset_hashtable<_Value, _Hash, _Pred, _Alloc> _Hashtable; _Hashtable _M_h; public: typedef typename _Hashtable::key_type key_type; typedef typename _Hashtable::value_type value_type; typedef typename _Hashtable::hasher hasher; typedef typename _Hashtable::key_equal key_equal; typedef typename _Hashtable::allocator_type allocator_type; typedef typename _Hashtable::pointer pointer; typedef typename _Hashtable::const_pointer const_pointer; typedef typename _Hashtable::reference reference; typedef typename _Hashtable::const_reference const_reference; typedef typename _Hashtable::iterator iterator; typedef typename _Hashtable::const_iterator const_iterator; typedef typename _Hashtable::local_iterator local_iterator; typedef typename _Hashtable::const_local_iterator const_local_iterator; typedef typename _Hashtable::size_type size_type; typedef typename _Hashtable::difference_type difference_type; using node_type = typename _Hashtable::node_type; using insert_return_type = typename _Hashtable::insert_return_type; unordered_set() = default; # 151 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_set.h" 3 explicit unordered_set(size_type __n, const hasher& __hf = hasher(), const key_equal& __eql = key_equal(), const allocator_type& __a = allocator_type()) : _M_h(__n, __hf, __eql, __a) { } # 172 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_set.h" 3 template unordered_set(_InputIterator __first, _InputIterator __last, size_type __n = 0, const hasher& __hf = hasher(), const key_equal& __eql = key_equal(), const allocator_type& __a = allocator_type()) : _M_h(__first, __last, __n, __hf, __eql, __a) { } unordered_set(const unordered_set&) = default; unordered_set(unordered_set&&) = default; explicit unordered_set(const allocator_type& __a) : _M_h(__a) { } unordered_set(const unordered_set& __uset, const allocator_type& __a) : _M_h(__uset._M_h, __a) { } unordered_set(unordered_set&& __uset, const allocator_type& __a) noexcept( noexcept(_Hashtable(std::move(__uset._M_h), __a)) ) : _M_h(std::move(__uset._M_h), __a) { } # 228 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_set.h" 3 unordered_set(initializer_list __l, size_type __n = 0, const hasher& __hf = hasher(), const key_equal& __eql = key_equal(), const allocator_type& __a = allocator_type()) : _M_h(__l, __n, __hf, __eql, __a) { } unordered_set(size_type __n, const allocator_type& __a) : unordered_set(__n, hasher(), key_equal(), __a) { } unordered_set(size_type __n, const hasher& __hf, const allocator_type& __a) : unordered_set(__n, __hf, key_equal(), __a) { } template unordered_set(_InputIterator __first, _InputIterator __last, size_type __n, const allocator_type& __a) : unordered_set(__first, __last, __n, hasher(), key_equal(), __a) { } template unordered_set(_InputIterator __first, _InputIterator __last, size_type __n, const hasher& __hf, const allocator_type& __a) : unordered_set(__first, __last, __n, __hf, key_equal(), __a) { } unordered_set(initializer_list __l, size_type __n, const allocator_type& __a) : unordered_set(__l, __n, hasher(), key_equal(), __a) { } unordered_set(initializer_list __l, size_type __n, const hasher& __hf, const allocator_type& __a) : unordered_set(__l, __n, __hf, key_equal(), __a) { } unordered_set& operator=(const unordered_set&) = default; unordered_set& operator=(unordered_set&&) = default; # 290 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_set.h" 3 unordered_set& operator=(initializer_list __l) { _M_h = __l; return *this; } allocator_type get_allocator() const noexcept { return _M_h.get_allocator(); } [[__nodiscard__]] bool empty() const noexcept { return _M_h.empty(); } size_type size() const noexcept { return _M_h.size(); } size_type max_size() const noexcept { return _M_h.max_size(); } # 326 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_set.h" 3 iterator begin() noexcept { return _M_h.begin(); } const_iterator begin() const noexcept { return _M_h.begin(); } iterator end() noexcept { return _M_h.end(); } const_iterator end() const noexcept { return _M_h.end(); } const_iterator cbegin() const noexcept { return _M_h.begin(); } const_iterator cend() const noexcept { return _M_h.end(); } # 382 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_set.h" 3 template std::pair emplace(_Args&&... __args) { return _M_h.emplace(std::forward<_Args>(__args)...); } # 408 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_set.h" 3 template iterator emplace_hint(const_iterator __pos, _Args&&... __args) { return _M_h.emplace_hint(__pos, std::forward<_Args>(__args)...); } # 427 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_set.h" 3 std::pair insert(const value_type& __x) { return _M_h.insert(__x); } std::pair insert(value_type&& __x) { return _M_h.insert(std::move(__x)); } # 456 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_set.h" 3 iterator insert(const_iterator __hint, const value_type& __x) { return _M_h.insert(__hint, __x); } iterator insert(const_iterator __hint, value_type&& __x) { return _M_h.insert(__hint, std::move(__x)); } # 474 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_set.h" 3 template void insert(_InputIterator __first, _InputIterator __last) { _M_h.insert(__first, __last); } # 486 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_set.h" 3 void insert(initializer_list __l) { _M_h.insert(__l); } node_type extract(const_iterator __pos) { do { if (std::__is_constant_evaluated()) if (__builtin_expect(!bool(__pos != end()), false)) std::__glibcxx_assert_fail(); } while (false); return _M_h.extract(__pos); } node_type extract(const key_type& __key) { return _M_h.extract(__key); } insert_return_type insert(node_type&& __nh) { return _M_h._M_reinsert_node(std::move(__nh)); } iterator insert(const_iterator, node_type&& __nh) { return _M_h._M_reinsert_node(std::move(__nh)).position; } # 529 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_set.h" 3 iterator erase(const_iterator __position) { return _M_h.erase(__position); } iterator erase(iterator __position) { return _M_h.erase(__position); } # 551 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_set.h" 3 size_type erase(const key_type& __x) { return _M_h.erase(__x); } # 569 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_set.h" 3 iterator erase(const_iterator __first, const_iterator __last) { return _M_h.erase(__first, __last); } void clear() noexcept { _M_h.clear(); } # 592 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_set.h" 3 void swap(unordered_set& __x) noexcept( noexcept(_M_h.swap(__x._M_h)) ) { _M_h.swap(__x._M_h); } template friend class std::_Hash_merge_helper; template void merge(unordered_set<_Value, _H2, _P2, _Alloc>& __source) { using _Merge_helper = _Hash_merge_helper; _M_h._M_merge_unique(_Merge_helper::_S_get_table(__source)); } template void merge(unordered_set<_Value, _H2, _P2, _Alloc>&& __source) { merge(__source); } template void merge(unordered_multiset<_Value, _H2, _P2, _Alloc>& __source) { using _Merge_helper = _Hash_merge_helper; _M_h._M_merge_unique(_Merge_helper::_S_get_table(__source)); } template void merge(unordered_multiset<_Value, _H2, _P2, _Alloc>&& __source) { merge(__source); } hasher hash_function() const { return _M_h.hash_function(); } key_equal key_eq() const { return _M_h.key_eq(); } # 656 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_set.h" 3 iterator find(const key_type& __x) { return _M_h.find(__x); } template auto find(const _Kt& __k) -> decltype(_M_h._M_find_tr(__k)) { return _M_h._M_find_tr(__k); } const_iterator find(const key_type& __x) const { return _M_h.find(__x); } template auto find(const _Kt& __k) const -> decltype(_M_h._M_find_tr(__k)) { return _M_h._M_find_tr(__k); } # 691 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_set.h" 3 size_type count(const key_type& __x) const { return _M_h.count(__x); } template auto count(const _Kt& __k) const -> decltype(_M_h._M_count_tr(__k)) { return _M_h._M_count_tr(__k); } # 711 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_set.h" 3 bool contains(const key_type& __x) const { return _M_h.find(__x) != _M_h.end(); } template auto contains(const _Kt& __k) const -> decltype(_M_h._M_find_tr(__k), void(), true) { return _M_h._M_find_tr(__k) != _M_h.end(); } # 732 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_set.h" 3 std::pair equal_range(const key_type& __x) { return _M_h.equal_range(__x); } template auto equal_range(const _Kt& __k) -> decltype(_M_h._M_equal_range_tr(__k)) { return _M_h._M_equal_range_tr(__k); } std::pair equal_range(const key_type& __x) const { return _M_h.equal_range(__x); } template auto equal_range(const _Kt& __k) const -> decltype(_M_h._M_equal_range_tr(__k)) { return _M_h._M_equal_range_tr(__k); } size_type bucket_count() const noexcept { return _M_h.bucket_count(); } size_type max_bucket_count() const noexcept { return _M_h.max_bucket_count(); } size_type bucket_size(size_type __n) const { return _M_h.bucket_size(__n); } size_type bucket(const key_type& __key) const { return _M_h.bucket(__key); } # 794 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_set.h" 3 local_iterator begin(size_type __n) { return _M_h.begin(__n); } const_local_iterator begin(size_type __n) const { return _M_h.begin(__n); } const_local_iterator cbegin(size_type __n) const { return _M_h.cbegin(__n); } # 814 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_set.h" 3 local_iterator end(size_type __n) { return _M_h.end(__n); } const_local_iterator end(size_type __n) const { return _M_h.end(__n); } const_local_iterator cend(size_type __n) const { return _M_h.cend(__n); } float load_factor() const noexcept { return _M_h.load_factor(); } float max_load_factor() const noexcept { return _M_h.max_load_factor(); } void max_load_factor(float __z) { _M_h.max_load_factor(__z); } # 855 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_set.h" 3 void rehash(size_type __n) { _M_h.rehash(__n); } # 866 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_set.h" 3 void reserve(size_type __n) { _M_h.reserve(__n); } template friend bool operator==(const unordered_set<_Value1, _Hash1, _Pred1, _Alloc1>&, const unordered_set<_Value1, _Hash1, _Pred1, _Alloc1>&); }; template::value_type>, typename _Pred = equal_to::value_type>, typename _Allocator = allocator::value_type>, typename = _RequireInputIter<_InputIterator>, typename = _RequireNotAllocatorOrIntegral<_Hash>, typename = _RequireNotAllocator<_Pred>, typename = _RequireAllocator<_Allocator>> unordered_set(_InputIterator, _InputIterator, unordered_set::size_type = {}, _Hash = _Hash(), _Pred = _Pred(), _Allocator = _Allocator()) -> unordered_set::value_type, _Hash, _Pred, _Allocator>; template, typename _Pred = equal_to<_Tp>, typename _Allocator = allocator<_Tp>, typename = _RequireNotAllocatorOrIntegral<_Hash>, typename = _RequireNotAllocator<_Pred>, typename = _RequireAllocator<_Allocator>> unordered_set(initializer_list<_Tp>, unordered_set::size_type = {}, _Hash = _Hash(), _Pred = _Pred(), _Allocator = _Allocator()) -> unordered_set<_Tp, _Hash, _Pred, _Allocator>; template, typename = _RequireAllocator<_Allocator>> unordered_set(_InputIterator, _InputIterator, unordered_set::size_type, _Allocator) -> unordered_set::value_type, hash< typename iterator_traits<_InputIterator>::value_type>, equal_to< typename iterator_traits<_InputIterator>::value_type>, _Allocator>; template, typename = _RequireNotAllocatorOrIntegral<_Hash>, typename = _RequireAllocator<_Allocator>> unordered_set(_InputIterator, _InputIterator, unordered_set::size_type, _Hash, _Allocator) -> unordered_set::value_type, _Hash, equal_to< typename iterator_traits<_InputIterator>::value_type>, _Allocator>; template> unordered_set(initializer_list<_Tp>, unordered_set::size_type, _Allocator) -> unordered_set<_Tp, hash<_Tp>, equal_to<_Tp>, _Allocator>; template, typename = _RequireAllocator<_Allocator>> unordered_set(initializer_list<_Tp>, unordered_set::size_type, _Hash, _Allocator) -> unordered_set<_Tp, _Hash, equal_to<_Tp>, _Allocator>; # 968 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_set.h" 3 template, typename _Pred = equal_to<_Value>, typename _Alloc = allocator<_Value>> class unordered_multiset { typedef __umset_hashtable<_Value, _Hash, _Pred, _Alloc> _Hashtable; _Hashtable _M_h; public: typedef typename _Hashtable::key_type key_type; typedef typename _Hashtable::value_type value_type; typedef typename _Hashtable::hasher hasher; typedef typename _Hashtable::key_equal key_equal; typedef typename _Hashtable::allocator_type allocator_type; typedef typename _Hashtable::pointer pointer; typedef typename _Hashtable::const_pointer const_pointer; typedef typename _Hashtable::reference reference; typedef typename _Hashtable::const_reference const_reference; typedef typename _Hashtable::iterator iterator; typedef typename _Hashtable::const_iterator const_iterator; typedef typename _Hashtable::local_iterator local_iterator; typedef typename _Hashtable::const_local_iterator const_local_iterator; typedef typename _Hashtable::size_type size_type; typedef typename _Hashtable::difference_type difference_type; using node_type = typename _Hashtable::node_type; unordered_multiset() = default; # 1018 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_set.h" 3 explicit unordered_multiset(size_type __n, const hasher& __hf = hasher(), const key_equal& __eql = key_equal(), const allocator_type& __a = allocator_type()) : _M_h(__n, __hf, __eql, __a) { } # 1039 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_set.h" 3 template unordered_multiset(_InputIterator __first, _InputIterator __last, size_type __n = 0, const hasher& __hf = hasher(), const key_equal& __eql = key_equal(), const allocator_type& __a = allocator_type()) : _M_h(__first, __last, __n, __hf, __eql, __a) { } unordered_multiset(const unordered_multiset&) = default; unordered_multiset(unordered_multiset&&) = default; # 1065 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_set.h" 3 unordered_multiset(initializer_list __l, size_type __n = 0, const hasher& __hf = hasher(), const key_equal& __eql = key_equal(), const allocator_type& __a = allocator_type()) : _M_h(__l, __n, __hf, __eql, __a) { } unordered_multiset& operator=(const unordered_multiset&) = default; unordered_multiset& operator=(unordered_multiset&&) = default; explicit unordered_multiset(const allocator_type& __a) : _M_h(__a) { } unordered_multiset(const unordered_multiset& __umset, const allocator_type& __a) : _M_h(__umset._M_h, __a) { } unordered_multiset(unordered_multiset&& __umset, const allocator_type& __a) noexcept( noexcept(_Hashtable(std::move(__umset._M_h), __a)) ) : _M_h(std::move(__umset._M_h), __a) { } unordered_multiset(size_type __n, const allocator_type& __a) : unordered_multiset(__n, hasher(), key_equal(), __a) { } unordered_multiset(size_type __n, const hasher& __hf, const allocator_type& __a) : unordered_multiset(__n, __hf, key_equal(), __a) { } template unordered_multiset(_InputIterator __first, _InputIterator __last, size_type __n, const allocator_type& __a) : unordered_multiset(__first, __last, __n, hasher(), key_equal(), __a) { } template unordered_multiset(_InputIterator __first, _InputIterator __last, size_type __n, const hasher& __hf, const allocator_type& __a) : unordered_multiset(__first, __last, __n, __hf, key_equal(), __a) { } unordered_multiset(initializer_list __l, size_type __n, const allocator_type& __a) : unordered_multiset(__l, __n, hasher(), key_equal(), __a) { } unordered_multiset(initializer_list __l, size_type __n, const hasher& __hf, const allocator_type& __a) : unordered_multiset(__l, __n, __hf, key_equal(), __a) { } # 1157 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_set.h" 3 unordered_multiset& operator=(initializer_list __l) { _M_h = __l; return *this; } allocator_type get_allocator() const noexcept { return _M_h.get_allocator(); } [[__nodiscard__]] bool empty() const noexcept { return _M_h.empty(); } size_type size() const noexcept { return _M_h.size(); } size_type max_size() const noexcept { return _M_h.max_size(); } # 1193 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_set.h" 3 iterator begin() noexcept { return _M_h.begin(); } const_iterator begin() const noexcept { return _M_h.begin(); } iterator end() noexcept { return _M_h.end(); } const_iterator end() const noexcept { return _M_h.end(); } const_iterator cbegin() const noexcept { return _M_h.begin(); } const_iterator cend() const noexcept { return _M_h.end(); } # 1241 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_set.h" 3 template iterator emplace(_Args&&... __args) { return _M_h.emplace(std::forward<_Args>(__args)...); } # 1263 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_set.h" 3 template iterator emplace_hint(const_iterator __pos, _Args&&... __args) { return _M_h.emplace_hint(__pos, std::forward<_Args>(__args)...); } # 1276 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_set.h" 3 iterator insert(const value_type& __x) { return _M_h.insert(__x); } iterator insert(value_type&& __x) { return _M_h.insert(std::move(__x)); } # 1302 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_set.h" 3 iterator insert(const_iterator __hint, const value_type& __x) { return _M_h.insert(__hint, __x); } iterator insert(const_iterator __hint, value_type&& __x) { return _M_h.insert(__hint, std::move(__x)); } # 1319 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_set.h" 3 template void insert(_InputIterator __first, _InputIterator __last) { _M_h.insert(__first, __last); } # 1331 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_set.h" 3 void insert(initializer_list __l) { _M_h.insert(__l); } node_type extract(const_iterator __pos) { do { if (std::__is_constant_evaluated()) if (__builtin_expect(!bool(__pos != end()), false)) std::__glibcxx_assert_fail(); } while (false); return _M_h.extract(__pos); } node_type extract(const key_type& __key) { return _M_h.extract(__key); } iterator insert(node_type&& __nh) { return _M_h._M_reinsert_node_multi(cend(), std::move(__nh)); } iterator insert(const_iterator __hint, node_type&& __nh) { return _M_h._M_reinsert_node_multi(__hint, std::move(__nh)); } # 1375 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_set.h" 3 iterator erase(const_iterator __position) { return _M_h.erase(__position); } iterator erase(iterator __position) { return _M_h.erase(__position); } # 1398 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_set.h" 3 size_type erase(const key_type& __x) { return _M_h.erase(__x); } # 1418 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_set.h" 3 iterator erase(const_iterator __first, const_iterator __last) { return _M_h.erase(__first, __last); } # 1429 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_set.h" 3 void clear() noexcept { _M_h.clear(); } # 1442 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_set.h" 3 void swap(unordered_multiset& __x) noexcept( noexcept(_M_h.swap(__x._M_h)) ) { _M_h.swap(__x._M_h); } template friend class std::_Hash_merge_helper; template void merge(unordered_multiset<_Value, _H2, _P2, _Alloc>& __source) { using _Merge_helper = _Hash_merge_helper; _M_h._M_merge_multi(_Merge_helper::_S_get_table(__source)); } template void merge(unordered_multiset<_Value, _H2, _P2, _Alloc>&& __source) { merge(__source); } template void merge(unordered_set<_Value, _H2, _P2, _Alloc>& __source) { using _Merge_helper = _Hash_merge_helper; _M_h._M_merge_multi(_Merge_helper::_S_get_table(__source)); } template void merge(unordered_set<_Value, _H2, _P2, _Alloc>&& __source) { merge(__source); } hasher hash_function() const { return _M_h.hash_function(); } key_equal key_eq() const { return _M_h.key_eq(); } # 1508 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_set.h" 3 iterator find(const key_type& __x) { return _M_h.find(__x); } template auto find(const _Kt& __x) -> decltype(_M_h._M_find_tr(__x)) { return _M_h._M_find_tr(__x); } const_iterator find(const key_type& __x) const { return _M_h.find(__x); } template auto find(const _Kt& __x) const -> decltype(_M_h._M_find_tr(__x)) { return _M_h._M_find_tr(__x); } # 1539 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_set.h" 3 size_type count(const key_type& __x) const { return _M_h.count(__x); } template auto count(const _Kt& __x) const -> decltype(_M_h._M_count_tr(__x)) { return _M_h._M_count_tr(__x); } # 1558 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_set.h" 3 bool contains(const key_type& __x) const { return _M_h.find(__x) != _M_h.end(); } template auto contains(const _Kt& __x) const -> decltype(_M_h._M_find_tr(__x), void(), true) { return _M_h._M_find_tr(__x) != _M_h.end(); } # 1577 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_set.h" 3 std::pair equal_range(const key_type& __x) { return _M_h.equal_range(__x); } template auto equal_range(const _Kt& __x) -> decltype(_M_h._M_equal_range_tr(__x)) { return _M_h._M_equal_range_tr(__x); } std::pair equal_range(const key_type& __x) const { return _M_h.equal_range(__x); } template auto equal_range(const _Kt& __x) const -> decltype(_M_h._M_equal_range_tr(__x)) { return _M_h._M_equal_range_tr(__x); } size_type bucket_count() const noexcept { return _M_h.bucket_count(); } size_type max_bucket_count() const noexcept { return _M_h.max_bucket_count(); } size_type bucket_size(size_type __n) const { return _M_h.bucket_size(__n); } size_type bucket(const key_type& __key) const { return _M_h.bucket(__key); } # 1639 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_set.h" 3 local_iterator begin(size_type __n) { return _M_h.begin(__n); } const_local_iterator begin(size_type __n) const { return _M_h.begin(__n); } const_local_iterator cbegin(size_type __n) const { return _M_h.cbegin(__n); } # 1659 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_set.h" 3 local_iterator end(size_type __n) { return _M_h.end(__n); } const_local_iterator end(size_type __n) const { return _M_h.end(__n); } const_local_iterator cend(size_type __n) const { return _M_h.cend(__n); } float load_factor() const noexcept { return _M_h.load_factor(); } float max_load_factor() const noexcept { return _M_h.max_load_factor(); } void max_load_factor(float __z) { _M_h.max_load_factor(__z); } # 1700 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_set.h" 3 void rehash(size_type __n) { _M_h.rehash(__n); } # 1711 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_set.h" 3 void reserve(size_type __n) { _M_h.reserve(__n); } template friend bool operator==(const unordered_multiset<_Value1, _Hash1, _Pred1, _Alloc1>&, const unordered_multiset<_Value1, _Hash1, _Pred1, _Alloc1>&); }; template::value_type>, typename _Pred = equal_to::value_type>, typename _Allocator = allocator::value_type>, typename = _RequireInputIter<_InputIterator>, typename = _RequireNotAllocatorOrIntegral<_Hash>, typename = _RequireNotAllocator<_Pred>, typename = _RequireAllocator<_Allocator>> unordered_multiset(_InputIterator, _InputIterator, unordered_multiset::size_type = {}, _Hash = _Hash(), _Pred = _Pred(), _Allocator = _Allocator()) -> unordered_multiset::value_type, _Hash, _Pred, _Allocator>; template, typename _Pred = equal_to<_Tp>, typename _Allocator = allocator<_Tp>, typename = _RequireNotAllocatorOrIntegral<_Hash>, typename = _RequireNotAllocator<_Pred>, typename = _RequireAllocator<_Allocator>> unordered_multiset(initializer_list<_Tp>, unordered_multiset::size_type = {}, _Hash = _Hash(), _Pred = _Pred(), _Allocator = _Allocator()) -> unordered_multiset<_Tp, _Hash, _Pred, _Allocator>; template, typename = _RequireAllocator<_Allocator>> unordered_multiset(_InputIterator, _InputIterator, unordered_multiset::size_type, _Allocator) -> unordered_multiset::value_type, hash::value_type>, equal_to::value_type>, _Allocator>; template, typename = _RequireNotAllocatorOrIntegral<_Hash>, typename = _RequireAllocator<_Allocator>> unordered_multiset(_InputIterator, _InputIterator, unordered_multiset::size_type, _Hash, _Allocator) -> unordered_multiset::value_type, _Hash, equal_to< typename iterator_traits<_InputIterator>::value_type>, _Allocator>; template> unordered_multiset(initializer_list<_Tp>, unordered_multiset::size_type, _Allocator) -> unordered_multiset<_Tp, hash<_Tp>, equal_to<_Tp>, _Allocator>; template, typename = _RequireAllocator<_Allocator>> unordered_multiset(initializer_list<_Tp>, unordered_multiset::size_type, _Hash, _Allocator) -> unordered_multiset<_Tp, _Hash, equal_to<_Tp>, _Allocator>; template inline void swap(unordered_set<_Value, _Hash, _Pred, _Alloc>& __x, unordered_set<_Value, _Hash, _Pred, _Alloc>& __y) noexcept(noexcept(__x.swap(__y))) { __x.swap(__y); } template inline void swap(unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __x, unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __y) noexcept(noexcept(__x.swap(__y))) { __x.swap(__y); } template inline bool operator==(const unordered_set<_Value, _Hash, _Pred, _Alloc>& __x, const unordered_set<_Value, _Hash, _Pred, _Alloc>& __y) { return __x._M_h._M_equal(__y._M_h); } # 1825 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_set.h" 3 template inline bool operator==(const unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __x, const unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __y) { return __x._M_h._M_equal(__y._M_h); } # 1843 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unordered_set.h" 3 template struct _Hash_merge_helper< std::unordered_set<_Val, _Hash1, _Eq1, _Alloc>, _Hash2, _Eq2> { private: template using unordered_set = std::unordered_set<_Tp...>; template using unordered_multiset = std::unordered_multiset<_Tp...>; friend unordered_set<_Val, _Hash1, _Eq1, _Alloc>; static auto& _S_get_table(unordered_set<_Val, _Hash2, _Eq2, _Alloc>& __set) { return __set._M_h; } static auto& _S_get_table(unordered_multiset<_Val, _Hash2, _Eq2, _Alloc>& __set) { return __set._M_h; } }; template struct _Hash_merge_helper< std::unordered_multiset<_Val, _Hash1, _Eq1, _Alloc>, _Hash2, _Eq2> { private: template using unordered_set = std::unordered_set<_Tp...>; template using unordered_multiset = std::unordered_multiset<_Tp...>; friend unordered_multiset<_Val, _Hash1, _Eq1, _Alloc>; static auto& _S_get_table(unordered_set<_Val, _Hash2, _Eq2, _Alloc>& __set) { return __set._M_h; } static auto& _S_get_table(unordered_multiset<_Val, _Hash2, _Eq2, _Alloc>& __set) { return __set._M_h; } }; } # 42 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/unordered_set" 2 3 # 53 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/unordered_set" 3 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/version.h" 1 3 # 48 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/version.h" 3 # 54 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/unordered_set" 2 3 namespace std __attribute__ ((__visibility__ ("default"))) { namespace pmr { template, typename _Pred = std::equal_to<_Key>> using unordered_set = std::unordered_set<_Key, _Hash, _Pred, polymorphic_allocator<_Key>>; template, typename _Pred = std::equal_to<_Key>> using unordered_multiset = std::unordered_multiset<_Key, _Hash, _Pred, polymorphic_allocator<_Key>>; } } namespace std __attribute__ ((__visibility__ ("default"))) { template inline typename unordered_set<_Key, _Hash, _CPred, _Alloc>::size_type erase_if(unordered_set<_Key, _Hash, _CPred, _Alloc>& __cont, _Predicate __pred) { std::unordered_set<_Key, _Hash, _CPred, _Alloc>& __ucont = __cont; return __detail::__erase_nodes_if(__cont, __ucont, __pred); } template inline typename unordered_multiset<_Key, _Hash, _CPred, _Alloc>::size_type erase_if(unordered_multiset<_Key, _Hash, _CPred, _Alloc>& __cont, _Predicate __pred) { std::unordered_multiset<_Key, _Hash, _CPred, _Alloc>& __ucont = __cont; return __detail::__erase_nodes_if(__cont, __ucont, __pred); } } # 26 "/home/avi/scylla-maint/seastar/include/seastar/rpc/rpc.hh" 2 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/list" 1 3 # 59 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/list" 3 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_list.h" 1 3 # 64 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_list.h" 3 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/allocated_ptr.h" 1 3 # 40 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/allocated_ptr.h" 3 namespace std __attribute__ ((__visibility__ ("default"))) { template struct __allocated_ptr { using pointer = typename allocator_traits<_Alloc>::pointer; using value_type = typename allocator_traits<_Alloc>::value_type; __allocated_ptr(_Alloc& __a, pointer __ptr) noexcept : _M_alloc(std::__addressof(__a)), _M_ptr(__ptr) { } template>> __allocated_ptr(_Alloc& __a, _Ptr __ptr) : _M_alloc(std::__addressof(__a)), _M_ptr(pointer_traits::pointer_to(*__ptr)) { } __allocated_ptr(__allocated_ptr&& __gd) noexcept : _M_alloc(__gd._M_alloc), _M_ptr(__gd._M_ptr) { __gd._M_ptr = nullptr; } ~__allocated_ptr() { if (_M_ptr != nullptr) std::allocator_traits<_Alloc>::deallocate(*_M_alloc, _M_ptr, 1); } __allocated_ptr& operator=(std::nullptr_t) noexcept { _M_ptr = nullptr; return *this; } value_type* get() { return std::__to_address(_M_ptr); } private: _Alloc* _M_alloc; pointer _M_ptr; }; template __allocated_ptr<_Alloc> __allocate_guarded(_Alloc& __a) { return { __a, std::allocator_traits<_Alloc>::allocate(__a, 1) }; } } # 65 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_list.h" 2 3 namespace std __attribute__ ((__visibility__ ("default"))) { namespace __detail { struct _List_node_base { _List_node_base* _M_next; _List_node_base* _M_prev; static void swap(_List_node_base& __x, _List_node_base& __y) noexcept; void _M_transfer(_List_node_base* const __first, _List_node_base* const __last) noexcept; void _M_reverse() noexcept; void _M_hook(_List_node_base* const __position) noexcept; void _M_unhook() noexcept; }; struct _List_node_header : public _List_node_base { std::size_t _M_size; _List_node_header() noexcept { _M_init(); } _List_node_header(_List_node_header&& __x) noexcept : _List_node_base{ __x._M_next, __x._M_prev } , _M_size(__x._M_size) { if (__x._M_base()->_M_next == __x._M_base()) this->_M_next = this->_M_prev = this; else { this->_M_next->_M_prev = this->_M_prev->_M_next = this->_M_base(); __x._M_init(); } } void _M_move_nodes(_List_node_header&& __x) { _List_node_base* const __xnode = __x._M_base(); if (__xnode->_M_next == __xnode) _M_init(); else { _List_node_base* const __node = this->_M_base(); __node->_M_next = __xnode->_M_next; __node->_M_prev = __xnode->_M_prev; __node->_M_next->_M_prev = __node->_M_prev->_M_next = __node; _M_size = __x._M_size; __x._M_init(); } } void _M_init() noexcept { this->_M_next = this->_M_prev = this; this->_M_size = 0; } private: _List_node_base* _M_base() { return this; } }; struct _Scratch_list : _List_node_base { _Scratch_list() { _M_next = _M_prev = this; } bool empty() const { return _M_next == this; } void swap(_List_node_base& __l) { _List_node_base::swap(*this, __l); } template struct _Ptr_cmp { _Cmp _M_cmp; bool operator()(__detail::_List_node_base* __lhs, __detail::_List_node_base* __rhs) { return _M_cmp(*_Iter(__lhs), *_Iter(__rhs)); } }; template struct _Ptr_cmp<_Iter, void> { bool operator()(__detail::_List_node_base* __lhs, __detail::_List_node_base* __rhs) const { return *_Iter(__lhs) < *_Iter(__rhs); } }; template void merge(_List_node_base& __x, _Cmp __comp) { _List_node_base* __first1 = _M_next; _List_node_base* const __last1 = this; _List_node_base* __first2 = __x._M_next; _List_node_base* const __last2 = std::__addressof(__x); while (__first1 != __last1 && __first2 != __last2) { if (__comp(__first2, __first1)) { _List_node_base* __next = __first2->_M_next; __first1->_M_transfer(__first2, __next); __first2 = __next; } else __first1 = __first1->_M_next; } if (__first2 != __last2) this->_M_transfer(__first2, __last2); } void _M_take_one(_List_node_base* __i) { this->_M_transfer(__i, __i->_M_next); } void _M_put_all(_List_node_base* __i) { if (!empty()) __i->_M_transfer(_M_next, this); } }; } template struct _List_node : public __detail::_List_node_base { __gnu_cxx::__aligned_membuf<_Tp> _M_storage; _Tp* _M_valptr() { return _M_storage._M_ptr(); } _Tp const* _M_valptr() const { return _M_storage._M_ptr(); } }; template struct _List_iterator { typedef _List_iterator<_Tp> _Self; typedef _List_node<_Tp> _Node; typedef ptrdiff_t difference_type; typedef std::bidirectional_iterator_tag iterator_category; typedef _Tp value_type; typedef _Tp* pointer; typedef _Tp& reference; _List_iterator() noexcept : _M_node() { } explicit _List_iterator(__detail::_List_node_base* __x) noexcept : _M_node(__x) { } _Self _M_const_cast() const noexcept { return *this; } [[__nodiscard__]] reference operator*() const noexcept { return *static_cast<_Node*>(_M_node)->_M_valptr(); } [[__nodiscard__]] pointer operator->() const noexcept { return static_cast<_Node*>(_M_node)->_M_valptr(); } _Self& operator++() noexcept { _M_node = _M_node->_M_next; return *this; } _Self operator++(int) noexcept { _Self __tmp = *this; _M_node = _M_node->_M_next; return __tmp; } _Self& operator--() noexcept { _M_node = _M_node->_M_prev; return *this; } _Self operator--(int) noexcept { _Self __tmp = *this; _M_node = _M_node->_M_prev; return __tmp; } [[__nodiscard__]] friend bool operator==(const _Self& __x, const _Self& __y) noexcept { return __x._M_node == __y._M_node; } # 329 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_list.h" 3 __detail::_List_node_base* _M_node; }; template struct _List_const_iterator { typedef _List_const_iterator<_Tp> _Self; typedef const _List_node<_Tp> _Node; typedef _List_iterator<_Tp> iterator; typedef ptrdiff_t difference_type; typedef std::bidirectional_iterator_tag iterator_category; typedef _Tp value_type; typedef const _Tp* pointer; typedef const _Tp& reference; _List_const_iterator() noexcept : _M_node() { } explicit _List_const_iterator(const __detail::_List_node_base* __x) noexcept : _M_node(__x) { } _List_const_iterator(const iterator& __x) noexcept : _M_node(__x._M_node) { } iterator _M_const_cast() const noexcept { return iterator(const_cast<__detail::_List_node_base*>(_M_node)); } [[__nodiscard__]] reference operator*() const noexcept { return *static_cast<_Node*>(_M_node)->_M_valptr(); } [[__nodiscard__]] pointer operator->() const noexcept { return static_cast<_Node*>(_M_node)->_M_valptr(); } _Self& operator++() noexcept { _M_node = _M_node->_M_next; return *this; } _Self operator++(int) noexcept { _Self __tmp = *this; _M_node = _M_node->_M_next; return __tmp; } _Self& operator--() noexcept { _M_node = _M_node->_M_prev; return *this; } _Self operator--(int) noexcept { _Self __tmp = *this; _M_node = _M_node->_M_prev; return __tmp; } [[__nodiscard__]] friend bool operator==(const _Self& __x, const _Self& __y) noexcept { return __x._M_node == __y._M_node; } # 419 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_list.h" 3 const __detail::_List_node_base* _M_node; }; namespace __cxx11 { template class _List_base { protected: typedef typename __gnu_cxx::__alloc_traits<_Alloc>::template rebind<_Tp>::other _Tp_alloc_type; typedef __gnu_cxx::__alloc_traits<_Tp_alloc_type> _Tp_alloc_traits; typedef typename _Tp_alloc_traits::template rebind<_List_node<_Tp> >::other _Node_alloc_type; typedef __gnu_cxx::__alloc_traits<_Node_alloc_type> _Node_alloc_traits; static size_t _S_distance(const __detail::_List_node_base* __first, const __detail::_List_node_base* __last) { size_t __n = 0; while (__first != __last) { __first = __first->_M_next; ++__n; } return __n; } struct _List_impl : public _Node_alloc_type { __detail::_List_node_header _M_node; _List_impl() noexcept(is_nothrow_default_constructible<_Node_alloc_type>::value) : _Node_alloc_type() { } _List_impl(const _Node_alloc_type& __a) noexcept : _Node_alloc_type(__a) { } _List_impl(_List_impl&&) = default; _List_impl(_Node_alloc_type&& __a, _List_impl&& __x) : _Node_alloc_type(std::move(__a)), _M_node(std::move(__x._M_node)) { } _List_impl(_Node_alloc_type&& __a) noexcept : _Node_alloc_type(std::move(__a)) { } }; _List_impl _M_impl; size_t _M_get_size() const { return _M_impl._M_node._M_size; } void _M_set_size(size_t __n) { _M_impl._M_node._M_size = __n; } void _M_inc_size(size_t __n) { _M_impl._M_node._M_size += __n; } void _M_dec_size(size_t __n) { _M_impl._M_node._M_size -= __n; } size_t _M_distance(const __detail::_List_node_base* __first, const __detail::_List_node_base* __last) const { return _S_distance(__first, __last); } size_t _M_node_count() const { return _M_get_size(); } # 516 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_list.h" 3 typename _Node_alloc_traits::pointer _M_get_node() { return _Node_alloc_traits::allocate(_M_impl, 1); } void _M_put_node(typename _Node_alloc_traits::pointer __p) noexcept { _Node_alloc_traits::deallocate(_M_impl, __p, 1); } public: typedef _Alloc allocator_type; _Node_alloc_type& _M_get_Node_allocator() noexcept { return _M_impl; } const _Node_alloc_type& _M_get_Node_allocator() const noexcept { return _M_impl; } _List_base() = default; _List_base(const _Node_alloc_type& __a) noexcept : _M_impl(__a) { } _List_base(_List_base&&) = default; _List_base(_List_base&& __x, _Node_alloc_type&& __a) : _M_impl(std::move(__a)) { if (__x._M_get_Node_allocator() == _M_get_Node_allocator()) _M_move_nodes(std::move(__x)); } _List_base(_Node_alloc_type&& __a, _List_base&& __x) : _M_impl(std::move(__a), std::move(__x._M_impl)) { } _List_base(_Node_alloc_type&& __a) : _M_impl(std::move(__a)) { } void _M_move_nodes(_List_base&& __x) { _M_impl._M_node._M_move_nodes(std::move(__x._M_impl._M_node)); } ~_List_base() noexcept { _M_clear(); } void _M_clear() noexcept; void _M_init() noexcept { this->_M_impl._M_node._M_init(); } }; # 631 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_list.h" 3 template > class list : protected _List_base<_Tp, _Alloc> { # 644 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_list.h" 3 static_assert(is_same::type, _Tp>::value, "std::list must have a non-const, non-volatile value_type"); static_assert(is_same::value, "std::list must have the same value_type as its allocator"); typedef _List_base<_Tp, _Alloc> _Base; typedef typename _Base::_Tp_alloc_type _Tp_alloc_type; typedef typename _Base::_Tp_alloc_traits _Tp_alloc_traits; typedef typename _Base::_Node_alloc_type _Node_alloc_type; typedef typename _Base::_Node_alloc_traits _Node_alloc_traits; public: typedef _Tp value_type; typedef typename _Tp_alloc_traits::pointer pointer; typedef typename _Tp_alloc_traits::const_pointer const_pointer; typedef typename _Tp_alloc_traits::reference reference; typedef typename _Tp_alloc_traits::const_reference const_reference; typedef _List_iterator<_Tp> iterator; typedef _List_const_iterator<_Tp> const_iterator; typedef std::reverse_iterator const_reverse_iterator; typedef std::reverse_iterator reverse_iterator; typedef size_t size_type; typedef ptrdiff_t difference_type; typedef _Alloc allocator_type; protected: typedef _List_node<_Tp> _Node; using _Base::_M_impl; using _Base::_M_put_node; using _Base::_M_get_node; using _Base::_M_get_Node_allocator; # 706 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_list.h" 3 template _Node* _M_create_node(_Args&&... __args) { auto __p = this->_M_get_node(); auto& __alloc = _M_get_Node_allocator(); __allocated_ptr<_Node_alloc_type> __guard{__alloc, __p}; _Node_alloc_traits::construct(__alloc, __p->_M_valptr(), std::forward<_Args>(__args)...); __guard = nullptr; return __p; } static size_t _S_distance(const_iterator __first, const_iterator __last) { return std::distance(__first, __last); } size_t _M_node_count() const { return this->_M_get_size(); } # 741 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_list.h" 3 public: list() = default; # 758 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_list.h" 3 explicit list(const allocator_type& __a) noexcept : _Base(_Node_alloc_type(__a)) { } # 771 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_list.h" 3 explicit list(size_type __n, const allocator_type& __a = allocator_type()) : _Base(_Node_alloc_type(__a)) { _M_default_initialize(__n); } # 784 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_list.h" 3 list(size_type __n, const value_type& __value, const allocator_type& __a = allocator_type()) : _Base(_Node_alloc_type(__a)) { _M_fill_initialize(__n, __value); } # 811 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_list.h" 3 list(const list& __x) : _Base(_Node_alloc_traits:: _S_select_on_copy(__x._M_get_Node_allocator())) { _M_initialize_dispatch(__x.begin(), __x.end(), __false_type()); } # 824 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_list.h" 3 list(list&&) = default; # 834 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_list.h" 3 list(initializer_list __l, const allocator_type& __a = allocator_type()) : _Base(_Node_alloc_type(__a)) { _M_initialize_dispatch(__l.begin(), __l.end(), __false_type()); } list(const list& __x, const __type_identity_t& __a) : _Base(_Node_alloc_type(__a)) { _M_initialize_dispatch(__x.begin(), __x.end(), __false_type()); } private: list(list&& __x, const allocator_type& __a, true_type) noexcept : _Base(_Node_alloc_type(__a), std::move(__x)) { } list(list&& __x, const allocator_type& __a, false_type) : _Base(_Node_alloc_type(__a)) { if (__x._M_get_Node_allocator() == this->_M_get_Node_allocator()) this->_M_move_nodes(std::move(__x)); else insert(begin(), std::__make_move_if_noexcept_iterator(__x.begin()), std::__make_move_if_noexcept_iterator(__x.end())); } public: list(list&& __x, const __type_identity_t& __a) noexcept(_Node_alloc_traits::_S_always_equal()) : list(std::move(__x), __a, typename _Node_alloc_traits::is_always_equal{}) { } # 877 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_list.h" 3 template> list(_InputIterator __first, _InputIterator __last, const allocator_type& __a = allocator_type()) : _Base(_Node_alloc_type(__a)) { _M_initialize_dispatch(__first, __last, __false_type()); } # 903 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_list.h" 3 ~list() = default; # 914 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_list.h" 3 list& operator=(const list& __x); # 928 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_list.h" 3 list& operator=(list&& __x) noexcept(_Node_alloc_traits::_S_nothrow_move()) { constexpr bool __move_storage = _Node_alloc_traits::_S_propagate_on_move_assign() || _Node_alloc_traits::_S_always_equal(); _M_move_assign(std::move(__x), __bool_constant<__move_storage>()); return *this; } # 946 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_list.h" 3 list& operator=(initializer_list __l) { this->assign(__l.begin(), __l.end()); return *this; } # 964 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_list.h" 3 void assign(size_type __n, const value_type& __val) { _M_fill_assign(__n, __val); } # 981 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_list.h" 3 template> void assign(_InputIterator __first, _InputIterator __last) { _M_assign_dispatch(__first, __last, __false_type()); } # 1005 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_list.h" 3 void assign(initializer_list __l) { this->_M_assign_dispatch(__l.begin(), __l.end(), __false_type()); } allocator_type get_allocator() const noexcept { return allocator_type(_Base::_M_get_Node_allocator()); } [[__nodiscard__]] iterator begin() noexcept { return iterator(this->_M_impl._M_node._M_next); } [[__nodiscard__]] const_iterator begin() const noexcept { return const_iterator(this->_M_impl._M_node._M_next); } [[__nodiscard__]] iterator end() noexcept { return iterator(&this->_M_impl._M_node); } [[__nodiscard__]] const_iterator end() const noexcept { return const_iterator(&this->_M_impl._M_node); } [[__nodiscard__]] reverse_iterator rbegin() noexcept { return reverse_iterator(end()); } [[__nodiscard__]] const_reverse_iterator rbegin() const noexcept { return const_reverse_iterator(end()); } [[__nodiscard__]] reverse_iterator rend() noexcept { return reverse_iterator(begin()); } [[__nodiscard__]] const_reverse_iterator rend() const noexcept { return const_reverse_iterator(begin()); } [[__nodiscard__]] const_iterator cbegin() const noexcept { return const_iterator(this->_M_impl._M_node._M_next); } [[__nodiscard__]] const_iterator cend() const noexcept { return const_iterator(&this->_M_impl._M_node); } [[__nodiscard__]] const_reverse_iterator crbegin() const noexcept { return const_reverse_iterator(end()); } [[__nodiscard__]] const_reverse_iterator crend() const noexcept { return const_reverse_iterator(begin()); } [[__nodiscard__]] bool empty() const noexcept { return this->_M_impl._M_node._M_next == &this->_M_impl._M_node; } [[__nodiscard__]] size_type size() const noexcept { return _M_node_count(); } [[__nodiscard__]] size_type max_size() const noexcept { return _Node_alloc_traits::max_size(_M_get_Node_allocator()); } # 1168 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_list.h" 3 void resize(size_type __new_size); # 1181 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_list.h" 3 void resize(size_type __new_size, const value_type& __x); # 1203 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_list.h" 3 [[__nodiscard__]] reference front() noexcept { return *begin(); } [[__nodiscard__]] const_reference front() const noexcept { return *begin(); } [[__nodiscard__]] reference back() noexcept { iterator __tmp = end(); --__tmp; return *__tmp; } [[__nodiscard__]] const_reference back() const noexcept { const_iterator __tmp = end(); --__tmp; return *__tmp; } # 1254 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_list.h" 3 void push_front(const value_type& __x) { this->_M_insert(begin(), __x); } void push_front(value_type&& __x) { this->_M_insert(begin(), std::move(__x)); } template reference emplace_front(_Args&&... __args) { this->_M_insert(begin(), std::forward<_Args>(__args)...); return front(); } # 1290 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_list.h" 3 void pop_front() noexcept { this->_M_erase(begin()); } # 1304 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_list.h" 3 void push_back(const value_type& __x) { this->_M_insert(end(), __x); } void push_back(value_type&& __x) { this->_M_insert(end(), std::move(__x)); } template reference emplace_back(_Args&&... __args) { this->_M_insert(end(), std::forward<_Args>(__args)...); return back(); } # 1339 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_list.h" 3 void pop_back() noexcept { this->_M_erase(iterator(this->_M_impl._M_node._M_prev)); } # 1356 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_list.h" 3 template iterator emplace(const_iterator __position, _Args&&... __args); # 1371 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_list.h" 3 iterator insert(const_iterator __position, const value_type& __x); # 1401 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_list.h" 3 iterator insert(const_iterator __position, value_type&& __x) { return emplace(__position, std::move(__x)); } # 1420 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_list.h" 3 iterator insert(const_iterator __p, initializer_list __l) { return this->insert(__p, __l.begin(), __l.end()); } # 1440 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_list.h" 3 iterator insert(const_iterator __position, size_type __n, const value_type& __x); # 1479 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_list.h" 3 template> iterator insert(const_iterator __position, _InputIterator __first, _InputIterator __last); # 1523 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_list.h" 3 iterator erase(const_iterator __position) noexcept; # 1548 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_list.h" 3 iterator erase(const_iterator __first, const_iterator __last) noexcept { while (__first != __last) __first = erase(__first); return __last._M_const_cast(); } # 1571 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_list.h" 3 void swap(list& __x) noexcept { __detail::_List_node_base::swap(this->_M_impl._M_node, __x._M_impl._M_node); size_t __xsize = __x._M_get_size(); __x._M_set_size(this->_M_get_size()); this->_M_set_size(__xsize); _Node_alloc_traits::_S_on_swap(this->_M_get_Node_allocator(), __x._M_get_Node_allocator()); } void clear() noexcept { _Base::_M_clear(); _Base::_M_init(); } # 1610 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_list.h" 3 void splice(const_iterator __position, list&& __x) noexcept { if (!__x.empty()) { _M_check_equal_allocators(__x); this->_M_transfer(__position._M_const_cast(), __x.begin(), __x.end()); this->_M_inc_size(__x._M_get_size()); __x._M_set_size(0); } } void splice(const_iterator __position, list& __x) noexcept { splice(__position, std::move(__x)); } # 1646 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_list.h" 3 void splice(const_iterator __position, list&& __x, const_iterator __i) noexcept # 1661 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_list.h" 3 { iterator __j = __i._M_const_cast(); ++__j; if (__position == __i || __position == __j) return; if (this != std::__addressof(__x)) _M_check_equal_allocators(__x); this->_M_transfer(__position._M_const_cast(), __i._M_const_cast(), __j); this->_M_inc_size(1); __x._M_dec_size(1); } # 1688 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_list.h" 3 void splice(const_iterator __position, list& __x, const_iterator __i) noexcept { splice(__position, std::move(__x), __i); } # 1707 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_list.h" 3 void splice(const_iterator __position, list&& __x, const_iterator __first, const_iterator __last) noexcept # 1727 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_list.h" 3 { if (__first != __last) { if (this != std::__addressof(__x)) _M_check_equal_allocators(__x); size_t __n = _S_distance(__first, __last); this->_M_inc_size(__n); __x._M_dec_size(__n); this->_M_transfer(__position._M_const_cast(), __first._M_const_cast(), __last._M_const_cast()); } } # 1757 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_list.h" 3 void splice(const_iterator __position, list& __x, const_iterator __first, const_iterator __last) noexcept { splice(__position, std::move(__x), __first, __last); } private: typedef size_type __remove_return_type; public: # 1785 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_list.h" 3 __attribute__((__abi_tag__("__cxx20"))) __remove_return_type remove(const _Tp& __value); # 1800 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_list.h" 3 template __remove_return_type remove_if(_Predicate); # 1814 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_list.h" 3 __attribute__((__abi_tag__("__cxx20"))) __remove_return_type unique(); # 1830 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_list.h" 3 template __remove_return_type unique(_BinaryPredicate); # 1846 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_list.h" 3 void merge(list&& __x); void merge(list& __x) { merge(std::move(__x)); } # 1871 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_list.h" 3 template void merge(list&& __x, _StrictWeakOrdering __comp); template void merge(list& __x, _StrictWeakOrdering __comp) { merge(std::move(__x), __comp); } # 1890 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_list.h" 3 void reverse() noexcept { this->_M_impl._M_node._M_reverse(); } void sort(); template void sort(_StrictWeakOrdering); protected: template void _M_initialize_dispatch(_Integer __n, _Integer __x, __true_type) { _M_fill_initialize(static_cast(__n), __x); } template void _M_initialize_dispatch(_InputIterator __first, _InputIterator __last, __false_type) { for (; __first != __last; ++__first) emplace_back(*__first); } void _M_fill_initialize(size_type __n, const value_type& __x) { for (; __n; --__n) push_back(__x); } void _M_default_initialize(size_type __n) { for (; __n; --__n) emplace_back(); } void _M_default_append(size_type __n); # 1968 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_list.h" 3 template void _M_assign_dispatch(_Integer __n, _Integer __val, __true_type) { _M_fill_assign(__n, __val); } template void _M_assign_dispatch(_InputIterator __first, _InputIterator __last, __false_type); void _M_fill_assign(size_type __n, const value_type& __val); void _M_transfer(iterator __position, iterator __first, iterator __last) { __position._M_node->_M_transfer(__first._M_node, __last._M_node); } # 2000 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_list.h" 3 template void _M_insert(iterator __position, _Args&&... __args) { _Node* __tmp = _M_create_node(std::forward<_Args>(__args)...); __tmp->_M_hook(__position._M_node); this->_M_inc_size(1); } void _M_erase(iterator __position) noexcept { this->_M_dec_size(1); __position._M_node->_M_unhook(); _Node* __n = static_cast<_Node*>(__position._M_node); _Node_alloc_traits::destroy(_M_get_Node_allocator(), __n->_M_valptr()); _M_put_node(__n); } void _M_check_equal_allocators(const list& __x) noexcept { if (_M_get_Node_allocator() != __x._M_get_Node_allocator()) __builtin_abort(); } const_iterator _M_resize_pos(size_type& __new_size) const; void _M_move_assign(list&& __x, true_type) noexcept { this->clear(); this->_M_move_nodes(std::move(__x)); std::__alloc_on_move(this->_M_get_Node_allocator(), __x._M_get_Node_allocator()); } void _M_move_assign(list&& __x, false_type) { if (__x._M_get_Node_allocator() == this->_M_get_Node_allocator()) _M_move_assign(std::move(__x), true_type{}); else _M_assign_dispatch(std::make_move_iterator(__x.begin()), std::make_move_iterator(__x.end()), __false_type{}); } struct _Finalize_merge { explicit _Finalize_merge(list& __dest, list& __src, const iterator& __src_next) : _M_dest(__dest), _M_src(__src), _M_next(__src_next) { } ~_Finalize_merge() { const size_t __num_unmerged = std::distance(_M_next, _M_src.end()); const size_t __orig_size = _M_src._M_get_size(); _M_dest._M_inc_size(__orig_size - __num_unmerged); _M_src._M_set_size(__num_unmerged); } list& _M_dest; list& _M_src; const iterator& _M_next; _Finalize_merge(const _Finalize_merge&) = delete; }; }; template::value_type, typename _Allocator = allocator<_ValT>, typename = _RequireInputIter<_InputIterator>, typename = _RequireAllocator<_Allocator>> list(_InputIterator, _InputIterator, _Allocator = _Allocator()) -> list<_ValT, _Allocator>; } # 2119 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_list.h" 3 template [[__nodiscard__]] inline bool operator==(const list<_Tp, _Alloc>& __x, const list<_Tp, _Alloc>& __y) { if (__x.size() != __y.size()) return false; typedef typename list<_Tp, _Alloc>::const_iterator const_iterator; const_iterator __end1 = __x.end(); const_iterator __end2 = __y.end(); const_iterator __i1 = __x.begin(); const_iterator __i2 = __y.begin(); while (__i1 != __end1 && __i2 != __end2 && *__i1 == *__i2) { ++__i1; ++__i2; } return __i1 == __end1 && __i2 == __end2; } # 2155 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_list.h" 3 template [[nodiscard]] inline __detail::__synth3way_t<_Tp> operator<=>(const list<_Tp, _Alloc>& __x, const list<_Tp, _Alloc>& __y) { return std::lexicographical_compare_three_way(__x.begin(), __x.end(), __y.begin(), __y.end(), __detail::__synth3way); } # 2213 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/stl_list.h" 3 template inline void swap(list<_Tp, _Alloc>& __x, list<_Tp, _Alloc>& __y) noexcept(noexcept(__x.swap(__y))) { __x.swap(__y); } template inline ptrdiff_t __distance(std::_List_iterator<_Tp> __first, std::_List_iterator<_Tp> __last, input_iterator_tag __tag) { typedef std::_List_const_iterator<_Tp> _CIter; return std::__distance(_CIter(__first), _CIter(__last), __tag); } template inline ptrdiff_t __distance(std::_List_const_iterator<_Tp> __first, std::_List_const_iterator<_Tp> __last, input_iterator_tag) { typedef __detail::_List_node_header _Sentinel; std::_List_const_iterator<_Tp> __beyond = __last; ++__beyond; const bool __whole = __first == __beyond; if (__builtin_constant_p (__whole) && __whole) return static_cast(__last._M_node)->_M_size; ptrdiff_t __n = 0; while (__first != __last) { ++__first; ++__n; } return __n; } } # 66 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/list" 2 3 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/list.tcc" 1 3 # 59 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/list.tcc" 3 namespace std __attribute__ ((__visibility__ ("default"))) { template void _List_base<_Tp, _Alloc>:: _M_clear() noexcept { typedef _List_node<_Tp> _Node; __detail::_List_node_base* __cur = _M_impl._M_node._M_next; while (__cur != &_M_impl._M_node) { _Node* __tmp = static_cast<_Node*>(__cur); __cur = __tmp->_M_next; _Tp* __val = __tmp->_M_valptr(); _Node_alloc_traits::destroy(_M_get_Node_allocator(), __val); _M_put_node(__tmp); } } template template typename list<_Tp, _Alloc>::iterator list<_Tp, _Alloc>:: emplace(const_iterator __position, _Args&&... __args) { _Node* __tmp = _M_create_node(std::forward<_Args>(__args)...); __tmp->_M_hook(__position._M_const_cast()._M_node); this->_M_inc_size(1); return iterator(__tmp); } template typename list<_Tp, _Alloc>::iterator list<_Tp, _Alloc>:: insert(const_iterator __position, const value_type& __x) { _Node* __tmp = _M_create_node(__x); __tmp->_M_hook(__position._M_const_cast()._M_node); this->_M_inc_size(1); return iterator(__tmp); } template typename list<_Tp, _Alloc>::iterator list<_Tp, _Alloc>:: insert(const_iterator __position, size_type __n, const value_type& __x) { if (__n) { list __tmp(__n, __x, get_allocator()); iterator __it = __tmp.begin(); splice(__position, __tmp); return __it; } return __position._M_const_cast(); } template template typename list<_Tp, _Alloc>::iterator list<_Tp, _Alloc>:: insert(const_iterator __position, _InputIterator __first, _InputIterator __last) { list __tmp(__first, __last, get_allocator()); if (!__tmp.empty()) { iterator __it = __tmp.begin(); splice(__position, __tmp); return __it; } return __position._M_const_cast(); } template typename list<_Tp, _Alloc>::iterator list<_Tp, _Alloc>:: erase(const_iterator __position) noexcept { iterator __ret = iterator(__position._M_node->_M_next); _M_erase(__position._M_const_cast()); return __ret; } # 173 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/list.tcc" 3 template typename list<_Tp, _Alloc>::const_iterator list<_Tp, _Alloc>:: _M_resize_pos(size_type& __new_size) const { const_iterator __i; const size_type __len = size(); if (__new_size < __len) { if (__new_size <= __len / 2) { __i = begin(); std::advance(__i, __new_size); } else { __i = end(); ptrdiff_t __num_erase = __len - __new_size; std::advance(__i, -__num_erase); } __new_size = 0; return __i; } else __i = end(); __new_size -= __len; return __i; } template void list<_Tp, _Alloc>:: _M_default_append(size_type __n) { size_type __i = 0; try { for (; __i < __n; ++__i) emplace_back(); } catch(...) { for (; __i; --__i) pop_back(); throw; } } template void list<_Tp, _Alloc>:: resize(size_type __new_size) { const_iterator __i = _M_resize_pos(__new_size); if (__new_size) _M_default_append(__new_size); else erase(__i, end()); } template void list<_Tp, _Alloc>:: resize(size_type __new_size, const value_type& __x) { const_iterator __i = _M_resize_pos(__new_size); if (__new_size) insert(end(), __new_size, __x); else erase(__i, end()); } # 265 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/list.tcc" 3 template list<_Tp, _Alloc>& list<_Tp, _Alloc>:: operator=(const list& __x) { if (this != std::__addressof(__x)) { if (_Node_alloc_traits::_S_propagate_on_copy_assign()) { auto& __this_alloc = this->_M_get_Node_allocator(); auto& __that_alloc = __x._M_get_Node_allocator(); if (!_Node_alloc_traits::_S_always_equal() && __this_alloc != __that_alloc) { clear(); } std::__alloc_on_copy(__this_alloc, __that_alloc); } _M_assign_dispatch(__x.begin(), __x.end(), __false_type()); } return *this; } template void list<_Tp, _Alloc>:: _M_fill_assign(size_type __n, const value_type& __val) { iterator __i = begin(); for (; __i != end() && __n > 0; ++__i, --__n) *__i = __val; if (__n > 0) insert(end(), __n, __val); else erase(__i, end()); } template template void list<_Tp, _Alloc>:: _M_assign_dispatch(_InputIterator __first2, _InputIterator __last2, __false_type) { iterator __first1 = begin(); iterator __last1 = end(); for (; __first1 != __last1 && __first2 != __last2; ++__first1, (void)++__first2) *__first1 = *__first2; if (__first2 == __last2) erase(__first1, __last1); else insert(__last1, __first2, __last2); } template typename list<_Tp, _Alloc>::__remove_return_type list<_Tp, _Alloc>:: remove(const value_type& __value) { list __to_destroy(get_allocator()); iterator __first = begin(); iterator __last = end(); while (__first != __last) { iterator __next = __first; ++__next; if (*__first == __value) { __to_destroy.splice(__to_destroy.begin(), *this, __first); } __first = __next; } return __to_destroy.size(); } template typename list<_Tp, _Alloc>::__remove_return_type list<_Tp, _Alloc>:: unique() { iterator __first = begin(); iterator __last = end(); if (__first == __last) return 0; list __to_destroy(get_allocator()); iterator __next = __first; while (++__next != __last) { if (*__first == *__next) { __to_destroy.splice(__to_destroy.begin(), *this, __next); } else __first = __next; __next = __first; } return __to_destroy.size(); } template void list<_Tp, _Alloc>:: merge(list&& __x) { if (this != std::__addressof(__x)) { _M_check_equal_allocators(__x); iterator __first1 = begin(); iterator __last1 = end(); iterator __first2 = __x.begin(); iterator __last2 = __x.end(); const _Finalize_merge __fin(*this, __x, __first2); while (__first1 != __last1 && __first2 != __last2) if (*__first2 < *__first1) { iterator __next = __first2; _M_transfer(__first1, __first2, ++__next); __first2 = __next; } else ++__first1; if (__first2 != __last2) { _M_transfer(__last1, __first2, __last2); __first2 = __last2; } } } template template void list<_Tp, _Alloc>:: merge(list&& __x, _StrictWeakOrdering __comp) { if (this != std::__addressof(__x)) { _M_check_equal_allocators(__x); iterator __first1 = begin(); iterator __last1 = end(); iterator __first2 = __x.begin(); iterator __last2 = __x.end(); const _Finalize_merge __fin(*this, __x, __first2); while (__first1 != __last1 && __first2 != __last2) if (__comp(*__first2, *__first1)) { iterator __next = __first2; _M_transfer(__first1, __first2, ++__next); __first2 = __next; } else ++__first1; if (__first2 != __last2) { _M_transfer(__last1, __first2, __last2); __first2 = __last2; } } } template void list<_Tp, _Alloc>:: sort() { if (this->_M_impl._M_node._M_next != &this->_M_impl._M_node && this->_M_impl._M_node._M_next->_M_next != &this->_M_impl._M_node) { using __detail::_Scratch_list; # 497 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/list.tcc" 3 _Scratch_list __carry; _Scratch_list __tmp[64]; _Scratch_list* __fill = __tmp; _Scratch_list* __counter; _Scratch_list::_Ptr_cmp __ptr_comp; try { do { __carry._M_take_one(begin()._M_node); for(__counter = __tmp; __counter != __fill && !__counter->empty(); ++__counter) { __counter->merge(__carry, __ptr_comp); __carry.swap(*__counter); } __carry.swap(*__counter); if (__counter == __fill) ++__fill; } while ( !empty() ); for (__counter = __tmp + 1; __counter != __fill; ++__counter) __counter->merge(__counter[-1], __ptr_comp); __fill[-1].swap(this->_M_impl._M_node); } catch(...) { __carry._M_put_all(end()._M_node); for (int __i = 0; __i < sizeof(__tmp)/sizeof(__tmp[0]); ++__i) __tmp[__i]._M_put_all(end()._M_node); throw; } } } template template typename list<_Tp, _Alloc>::__remove_return_type list<_Tp, _Alloc>:: remove_if(_Predicate __pred) { list __to_destroy(get_allocator()); iterator __first = begin(); iterator __last = end(); while (__first != __last) { iterator __next = __first; ++__next; if (__pred(*__first)) { __to_destroy.splice(__to_destroy.begin(), *this, __first); } __first = __next; } return __to_destroy.size(); } template template typename list<_Tp, _Alloc>::__remove_return_type list<_Tp, _Alloc>:: unique(_BinaryPredicate __binary_pred) { iterator __first = begin(); iterator __last = end(); if (__first == __last) return 0; list __to_destroy(get_allocator()); iterator __next = __first; while (++__next != __last) { if (__binary_pred(*__first, *__next)) { __to_destroy.splice(__to_destroy.begin(), *this, __next); } else __first = __next; __next = __first; } return __to_destroy.size(); } template template void list<_Tp, _Alloc>:: sort(_StrictWeakOrdering __comp) { if (this->_M_impl._M_node._M_next != &this->_M_impl._M_node && this->_M_impl._M_node._M_next->_M_next != &this->_M_impl._M_node) { using __detail::_Scratch_list; _Scratch_list __carry; _Scratch_list __tmp[64]; _Scratch_list* __fill = __tmp; _Scratch_list* __counter; _Scratch_list::_Ptr_cmp __ptr_comp = { __comp }; try { do { __carry._M_take_one(begin()._M_node); for(__counter = __tmp; __counter != __fill && !__counter->empty(); ++__counter) { __counter->merge(__carry, __ptr_comp); __carry.swap(*__counter); } __carry.swap(*__counter); if (__counter == __fill) ++__fill; } while ( !empty() ); for (__counter = __tmp + 1; __counter != __fill; ++__counter) __counter->merge(__counter[-1], __ptr_comp); __fill[-1].swap(this->_M_impl._M_node); } catch(...) { __carry._M_put_all(end()._M_node); for (size_t __i = 0; __i < sizeof(__tmp)/sizeof(__tmp[0]); ++__i) __tmp[__i]._M_put_all(end()._M_node); throw; } } } } # 67 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/list" 2 3 # 76 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/list" 3 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/version.h" 1 3 # 48 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/version.h" 3 # 77 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/list" 2 3 namespace std __attribute__ ((__visibility__ ("default"))) { namespace pmr { template using list = std::list<_Tp, polymorphic_allocator<_Tp>>; } } namespace std __attribute__ ((__visibility__ ("default"))) { template inline typename list<_Tp, _Alloc>::size_type erase_if(list<_Tp, _Alloc>& __cont, _Predicate __pred) { return __cont.remove_if(__pred); } template inline typename list<_Tp, _Alloc>::size_type erase(list<_Tp, _Alloc>& __cont, const _Up& __value) { using __elem_type = typename list<_Tp, _Alloc>::value_type; return std::erase_if(__cont, [&](__elem_type& __elem) { return __elem == __value; }); } } # 27 "/home/avi/scylla-maint/seastar/include/seastar/rpc/rpc.hh" 2 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/variant" 1 3 # 33 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/variant" 3 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/version.h" 1 3 # 48 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/version.h" 3 # 37 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/variant" 2 3 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/parse_numbers.h" 1 3 # 34 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/parse_numbers.h" 3 namespace std __attribute__ ((__visibility__ ("default"))) { namespace __parse_int { template struct _Digit; template struct _Digit<_Base, '0'> : integral_constant { using __valid = true_type; }; template struct _Digit<_Base, '1'> : integral_constant { using __valid = true_type; }; template struct _Digit_impl : integral_constant { static_assert(_Base > _Val, "invalid digit"); using __valid = true_type; }; template struct _Digit<_Base, '2'> : _Digit_impl<_Base, 2> { }; template struct _Digit<_Base, '3'> : _Digit_impl<_Base, 3> { }; template struct _Digit<_Base, '4'> : _Digit_impl<_Base, 4> { }; template struct _Digit<_Base, '5'> : _Digit_impl<_Base, 5> { }; template struct _Digit<_Base, '6'> : _Digit_impl<_Base, 6> { }; template struct _Digit<_Base, '7'> : _Digit_impl<_Base, 7> { }; template struct _Digit<_Base, '8'> : _Digit_impl<_Base, 8> { }; template struct _Digit<_Base, '9'> : _Digit_impl<_Base, 9> { }; template struct _Digit<_Base, 'a'> : _Digit_impl<_Base, 0xa> { }; template struct _Digit<_Base, 'A'> : _Digit_impl<_Base, 0xa> { }; template struct _Digit<_Base, 'b'> : _Digit_impl<_Base, 0xb> { }; template struct _Digit<_Base, 'B'> : _Digit_impl<_Base, 0xb> { }; template struct _Digit<_Base, 'c'> : _Digit_impl<_Base, 0xc> { }; template struct _Digit<_Base, 'C'> : _Digit_impl<_Base, 0xc> { }; template struct _Digit<_Base, 'd'> : _Digit_impl<_Base, 0xd> { }; template struct _Digit<_Base, 'D'> : _Digit_impl<_Base, 0xd> { }; template struct _Digit<_Base, 'e'> : _Digit_impl<_Base, 0xe> { }; template struct _Digit<_Base, 'E'> : _Digit_impl<_Base, 0xe> { }; template struct _Digit<_Base, 'f'> : _Digit_impl<_Base, 0xf> { }; template struct _Digit<_Base, 'F'> : _Digit_impl<_Base, 0xf> { }; template struct _Digit<_Base, '\''> : integral_constant { using __valid = false_type; }; template using __ull_constant = integral_constant; template struct _Power_help { using __next = typename _Power_help<_Base, _Digs...>::type; using __valid_digit = typename _Digit<_Base, _Dig>::__valid; using type = __ull_constant<__next::value * (__valid_digit{} ? _Base : 1ULL)>; }; template struct _Power_help<_Base, _Dig> { using __valid_digit = typename _Digit<_Base, _Dig>::__valid; using type = __ull_constant<__valid_digit::value>; }; template struct _Power : _Power_help<_Base, _Digs...>::type { }; template struct _Power<_Base> : __ull_constant<0> { }; template struct _Number_help { using __digit = _Digit<_Base, _Dig>; using __valid_digit = typename __digit::__valid; using __next = _Number_help<_Base, __valid_digit::value ? _Pow / _Base : _Pow, _Digs...>; using type = __ull_constant<_Pow * __digit::value + __next::type::value>; static_assert((type::value / _Pow) == __digit::value, "integer literal does not fit in unsigned long long"); }; template struct _Number_help<_Base, _Pow, '\'', _Dig, _Digs...> : _Number_help<_Base, _Pow, _Dig, _Digs...> { }; template struct _Number_help<_Base, 1ULL, _Dig> { using type = __ull_constant<_Digit<_Base, _Dig>::value>; }; template struct _Number : _Number_help<_Base, _Power<_Base, _Digs...>::value, _Digs...>::type { }; template struct _Number<_Base> : __ull_constant<0> { }; template struct _Parse_int; template struct _Parse_int<'0', 'b', _Digs...> : _Number<2U, _Digs...>::type { }; template struct _Parse_int<'0', 'B', _Digs...> : _Number<2U, _Digs...>::type { }; template struct _Parse_int<'0', 'x', _Digs...> : _Number<16U, _Digs...>::type { }; template struct _Parse_int<'0', 'X', _Digs...> : _Number<16U, _Digs...>::type { }; template struct _Parse_int<'0', _Digs...> : _Number<8U, _Digs...>::type { }; template struct _Parse_int : _Number<10U, _Digs...>::type { }; } namespace __select_int { template struct _Select_int_base; template struct _Select_int_base<_Val, _IntType, _Ints...> : __conditional_t<(_Val <= __gnu_cxx::__int_traits<_IntType>::__max), integral_constant<_IntType, (_IntType)_Val>, _Select_int_base<_Val, _Ints...>> { }; template struct _Select_int_base<_Val> { }; template using _Select_int = typename _Select_int_base< __parse_int::_Parse_int<_Digs...>::value, unsigned char, unsigned short, unsigned int, unsigned long, unsigned long long >::type; } } # 46 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/variant" 2 3 # 59 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/variant" 3 namespace std __attribute__ ((__visibility__ ("default"))) { template class tuple; template class variant; template struct hash; template struct variant_size; template struct variant_size : variant_size<_Variant> {}; template struct variant_size : variant_size<_Variant> {}; template struct variant_size : variant_size<_Variant> {}; template struct variant_size> : std::integral_constant {}; template inline constexpr size_t variant_size_v = variant_size<_Variant>::value; template inline constexpr size_t variant_size_v> = sizeof...(_Types); template inline constexpr size_t variant_size_v> = sizeof...(_Types); template struct variant_alternative; template struct variant_alternative<_Np, variant<_Types...>> { static_assert(_Np < sizeof...(_Types)); using type = typename _Nth_type<_Np, _Types...>::type; }; template using variant_alternative_t = typename variant_alternative<_Np, _Variant>::type; template struct variant_alternative<_Np, const _Variant> { using type = const variant_alternative_t<_Np, _Variant>; }; template struct variant_alternative<_Np, volatile _Variant> { using type = volatile variant_alternative_t<_Np, _Variant>; }; template struct variant_alternative<_Np, const volatile _Variant> { using type = const volatile variant_alternative_t<_Np, _Variant>; }; inline constexpr size_t variant_npos = -1; template constexpr variant_alternative_t<_Np, variant<_Types...>>& get(variant<_Types...>&); template constexpr variant_alternative_t<_Np, variant<_Types...>>&& get(variant<_Types...>&&); template constexpr variant_alternative_t<_Np, variant<_Types...>> const& get(const variant<_Types...>&); template constexpr variant_alternative_t<_Np, variant<_Types...>> const&& get(const variant<_Types...>&&); template constexpr decltype(auto) __do_visit(_Visitor&& __visitor, _Variants&&... __variants); template constexpr decltype(auto) __variant_cast(_Tp&& __rhs) { if constexpr (is_lvalue_reference_v<_Tp>) { if constexpr (is_const_v>) return static_cast&>(__rhs); else return static_cast&>(__rhs); } else return static_cast&&>(__rhs); } namespace __detail { namespace __variant { struct __variant_cookie {}; struct __variant_idx_cookie { using type = __variant_idx_cookie; }; template struct __deduce_visit_result { using type = _Tp; }; template constexpr void __raw_visit(_Visitor&& __visitor, _Variants&&... __variants) { std::__do_visit<__variant_cookie>(std::forward<_Visitor>(__visitor), std::forward<_Variants>(__variants)...); } template constexpr void __raw_idx_visit(_Visitor&& __visitor, _Variants&&... __variants) { std::__do_visit<__variant_idx_cookie>(std::forward<_Visitor>(__visitor), std::forward<_Variants>(__variants)...); } template constexpr std::variant<_Types...>& __as(std::variant<_Types...>& __v) noexcept { return __v; } template constexpr const std::variant<_Types...>& __as(const std::variant<_Types...>& __v) noexcept { return __v; } template constexpr std::variant<_Types...>&& __as(std::variant<_Types...>&& __v) noexcept { return std::move(__v); } template constexpr const std::variant<_Types...>&& __as(const std::variant<_Types...>&& __v) noexcept { return std::move(__v); } template> struct _Uninitialized; template struct _Uninitialized<_Type, true> { template constexpr _Uninitialized(in_place_index_t<0>, _Args&&... __args) : _M_storage(std::forward<_Args>(__args)...) { } constexpr const _Type& _M_get() const & noexcept { return _M_storage; } constexpr _Type& _M_get() & noexcept { return _M_storage; } constexpr const _Type&& _M_get() const && noexcept { return std::move(_M_storage); } constexpr _Type&& _M_get() && noexcept { return std::move(_M_storage); } _Type _M_storage; }; template struct _Uninitialized<_Type, false> { # 279 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/variant" 3 template constexpr _Uninitialized(in_place_index_t<0>, _Args&&... __args) { ::new ((void*)std::addressof(_M_storage)) _Type(std::forward<_Args>(__args)...); } const _Type& _M_get() const & noexcept { return *_M_storage._M_ptr(); } _Type& _M_get() & noexcept { return *_M_storage._M_ptr(); } const _Type&& _M_get() const && noexcept { return std::move(*_M_storage._M_ptr()); } _Type&& _M_get() && noexcept { return std::move(*_M_storage._M_ptr()); } __gnu_cxx::__aligned_membuf<_Type> _M_storage; }; template constexpr decltype(auto) __get_n(_Union&& __u) noexcept { if constexpr (_Np == 0) return std::forward<_Union>(__u)._M_first._M_get(); else if constexpr (_Np == 1) return std::forward<_Union>(__u)._M_rest._M_first._M_get(); else if constexpr (_Np == 2) return std::forward<_Union>(__u)._M_rest._M_rest._M_first._M_get(); else return __variant::__get_n<_Np - 3>( std::forward<_Union>(__u)._M_rest._M_rest._M_rest); } template constexpr decltype(auto) __get(_Variant&& __v) noexcept { return __variant::__get_n<_Np>(std::forward<_Variant>(__v)._M_u); } template constexpr decltype(auto) __construct_n(_Union& __u) noexcept { if constexpr (_Np == 0) return &__u._M_first; else if constexpr (_Np == 1) { std::_Construct(&__u._M_rest); return &__u._M_rest._M_first; } else if constexpr (_Np == 2) { std::_Construct(&__u._M_rest); std::_Construct(&__u._M_rest._M_rest); return &__u._M_rest._M_rest._M_first; } else { std::_Construct(&__u._M_rest); std::_Construct(&__u._M_rest._M_rest); std::_Construct(&__u._M_rest._M_rest._M_rest); return __variant::__construct_n<_Np - 3>(__u._M_rest._M_rest._M_rest); } } template struct _Traits { static constexpr bool _S_default_ctor = is_default_constructible_v::type>; static constexpr bool _S_copy_ctor = (is_copy_constructible_v<_Types> && ...); static constexpr bool _S_move_ctor = (is_move_constructible_v<_Types> && ...); static constexpr bool _S_copy_assign = _S_copy_ctor && (is_copy_assignable_v<_Types> && ...); static constexpr bool _S_move_assign = _S_move_ctor && (is_move_assignable_v<_Types> && ...); static constexpr bool _S_trivial_dtor = (is_trivially_destructible_v<_Types> && ...); static constexpr bool _S_trivial_copy_ctor = (is_trivially_copy_constructible_v<_Types> && ...); static constexpr bool _S_trivial_move_ctor = (is_trivially_move_constructible_v<_Types> && ...); static constexpr bool _S_trivial_copy_assign = _S_trivial_dtor && _S_trivial_copy_ctor && (is_trivially_copy_assignable_v<_Types> && ...); static constexpr bool _S_trivial_move_assign = _S_trivial_dtor && _S_trivial_move_ctor && (is_trivially_move_assignable_v<_Types> && ...); static constexpr bool _S_nothrow_default_ctor = is_nothrow_default_constructible_v< typename _Nth_type<0, _Types...>::type>; static constexpr bool _S_nothrow_copy_ctor = false; static constexpr bool _S_nothrow_move_ctor = (is_nothrow_move_constructible_v<_Types> && ...); static constexpr bool _S_nothrow_copy_assign = false; static constexpr bool _S_nothrow_move_assign = _S_nothrow_move_ctor && (is_nothrow_move_assignable_v<_Types> && ...); }; template union _Variadic_union { _Variadic_union() = default; template _Variadic_union(in_place_index_t<_Np>, _Args&&...) = delete; }; template union _Variadic_union<__trivially_destructible, _First, _Rest...> { constexpr _Variadic_union() : _M_rest() { } template constexpr _Variadic_union(in_place_index_t<0>, _Args&&... __args) : _M_first(in_place_index<0>, std::forward<_Args>(__args)...) { } template constexpr _Variadic_union(in_place_index_t<_Np>, _Args&&... __args) : _M_rest(in_place_index<_Np-1>, std::forward<_Args>(__args)...) { } # 434 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/variant" 3 _Uninitialized<_First> _M_first; _Variadic_union<__trivially_destructible, _Rest...> _M_rest; }; template struct _Never_valueless_alt : __and_, is_trivially_copyable<_Tp>> { }; # 458 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/variant" 3 template constexpr bool __never_valueless() { return _Traits<_Types...>::_S_move_assign && (_Never_valueless_alt<_Types>::value && ...); } template struct _Variant_storage; template using __select_index = typename __select_int::_Select_int_base::type::value_type; template struct _Variant_storage { constexpr _Variant_storage() : _M_index(static_cast<__index_type>(variant_npos)) { } template constexpr _Variant_storage(in_place_index_t<_Np>, _Args&&... __args) : _M_u(in_place_index<_Np>, std::forward<_Args>(__args)...), _M_index{_Np} { } constexpr void _M_reset() { if (!_M_valid()) [[unlikely]] return; std::__do_visit([](auto&& __this_mem) mutable { std::_Destroy(std::__addressof(__this_mem)); }, __variant_cast<_Types...>(*this)); _M_index = static_cast<__index_type>(variant_npos); } constexpr ~_Variant_storage() { _M_reset(); } constexpr bool _M_valid() const noexcept { if constexpr (__variant::__never_valueless<_Types...>()) return true; return this->_M_index != __index_type(variant_npos); } _Variadic_union _M_u; using __index_type = __select_index<_Types...>; __index_type _M_index; }; template struct _Variant_storage { constexpr _Variant_storage() : _M_index(static_cast<__index_type>(variant_npos)) { } template constexpr _Variant_storage(in_place_index_t<_Np>, _Args&&... __args) : _M_u(in_place_index<_Np>, std::forward<_Args>(__args)...), _M_index{_Np} { } constexpr void _M_reset() noexcept { _M_index = static_cast<__index_type>(variant_npos); } constexpr bool _M_valid() const noexcept { if constexpr (__variant::__never_valueless<_Types...>()) return true; return this->_M_index != static_cast<__index_type>(variant_npos); } _Variadic_union _M_u; using __index_type = __select_index<_Types...>; __index_type _M_index; }; template constexpr inline void __emplace(_Variant_storage<_Triv, _Types...>& __v, _Args&&... __args) { __v._M_reset(); auto* __addr = __variant::__construct_n<_Np>(__v._M_u); std::_Construct(__addr, in_place_index<0>, std::forward<_Args>(__args)...); __v._M_index = _Np; } template using _Variant_storage_alias = _Variant_storage<_Traits<_Types...>::_S_trivial_dtor, _Types...>; template struct _Copy_ctor_base : _Variant_storage_alias<_Types...> { using _Base = _Variant_storage_alias<_Types...>; using _Base::_Base; constexpr _Copy_ctor_base(const _Copy_ctor_base& __rhs) noexcept(_Traits<_Types...>::_S_nothrow_copy_ctor) { __variant::__raw_idx_visit( [this](auto&& __rhs_mem, auto __rhs_index) mutable { constexpr size_t __j = __rhs_index; if constexpr (__j != variant_npos) std::_Construct(std::__addressof(this->_M_u), in_place_index<__j>, __rhs_mem); }, __variant_cast<_Types...>(__rhs)); this->_M_index = __rhs._M_index; } _Copy_ctor_base(_Copy_ctor_base&&) = default; _Copy_ctor_base& operator=(const _Copy_ctor_base&) = default; _Copy_ctor_base& operator=(_Copy_ctor_base&&) = default; }; template struct _Copy_ctor_base : _Variant_storage_alias<_Types...> { using _Base = _Variant_storage_alias<_Types...>; using _Base::_Base; }; template using _Copy_ctor_alias = _Copy_ctor_base<_Traits<_Types...>::_S_trivial_copy_ctor, _Types...>; template struct _Move_ctor_base : _Copy_ctor_alias<_Types...> { using _Base = _Copy_ctor_alias<_Types...>; using _Base::_Base; constexpr _Move_ctor_base(_Move_ctor_base&& __rhs) noexcept(_Traits<_Types...>::_S_nothrow_move_ctor) { __variant::__raw_idx_visit( [this](auto&& __rhs_mem, auto __rhs_index) mutable { constexpr size_t __j = __rhs_index; if constexpr (__j != variant_npos) std::_Construct(std::__addressof(this->_M_u), in_place_index<__j>, std::forward(__rhs_mem)); }, __variant_cast<_Types...>(std::move(__rhs))); this->_M_index = __rhs._M_index; } _Move_ctor_base(const _Move_ctor_base&) = default; _Move_ctor_base& operator=(const _Move_ctor_base&) = default; _Move_ctor_base& operator=(_Move_ctor_base&&) = default; }; template struct _Move_ctor_base : _Copy_ctor_alias<_Types...> { using _Base = _Copy_ctor_alias<_Types...>; using _Base::_Base; }; template using _Move_ctor_alias = _Move_ctor_base<_Traits<_Types...>::_S_trivial_move_ctor, _Types...>; template struct _Copy_assign_base : _Move_ctor_alias<_Types...> { using _Base = _Move_ctor_alias<_Types...>; using _Base::_Base; constexpr _Copy_assign_base& operator=(const _Copy_assign_base& __rhs) noexcept(_Traits<_Types...>::_S_nothrow_copy_assign) { __variant::__raw_idx_visit( [this](auto&& __rhs_mem, auto __rhs_index) mutable { constexpr size_t __j = __rhs_index; if constexpr (__j == variant_npos) this->_M_reset(); else if (this->_M_index == __j) __variant::__get<__j>(*this) = __rhs_mem; else { using _Tj = typename _Nth_type<__j, _Types...>::type; if constexpr (is_nothrow_copy_constructible_v<_Tj> || !is_nothrow_move_constructible_v<_Tj>) __variant::__emplace<__j>(*this, __rhs_mem); else { using _Variant = variant<_Types...>; _Variant& __self = __variant_cast<_Types...>(*this); __self = _Variant(in_place_index<__j>, __rhs_mem); } } }, __variant_cast<_Types...>(__rhs)); return *this; } _Copy_assign_base(const _Copy_assign_base&) = default; _Copy_assign_base(_Copy_assign_base&&) = default; _Copy_assign_base& operator=(_Copy_assign_base&&) = default; }; template struct _Copy_assign_base : _Move_ctor_alias<_Types...> { using _Base = _Move_ctor_alias<_Types...>; using _Base::_Base; }; template using _Copy_assign_alias = _Copy_assign_base<_Traits<_Types...>::_S_trivial_copy_assign, _Types...>; template struct _Move_assign_base : _Copy_assign_alias<_Types...> { using _Base = _Copy_assign_alias<_Types...>; using _Base::_Base; constexpr _Move_assign_base& operator=(_Move_assign_base&& __rhs) noexcept(_Traits<_Types...>::_S_nothrow_move_assign) { __variant::__raw_idx_visit( [this](auto&& __rhs_mem, auto __rhs_index) mutable { constexpr size_t __j = __rhs_index; if constexpr (__j != variant_npos) { if (this->_M_index == __j) __variant::__get<__j>(*this) = std::move(__rhs_mem); else { using _Tj = typename _Nth_type<__j, _Types...>::type; if constexpr (is_nothrow_move_constructible_v<_Tj>) __variant::__emplace<__j>(*this, std::move(__rhs_mem)); else { using _Variant = variant<_Types...>; _Variant& __self = __variant_cast<_Types...>(*this); __self.template emplace<__j>(std::move(__rhs_mem)); } } } else this->_M_reset(); }, __variant_cast<_Types...>(__rhs)); return *this; } _Move_assign_base(const _Move_assign_base&) = default; _Move_assign_base(_Move_assign_base&&) = default; _Move_assign_base& operator=(const _Move_assign_base&) = default; }; template struct _Move_assign_base : _Copy_assign_alias<_Types...> { using _Base = _Copy_assign_alias<_Types...>; using _Base::_Base; }; template using _Move_assign_alias = _Move_assign_base<_Traits<_Types...>::_S_trivial_move_assign, _Types...>; template struct _Variant_base : _Move_assign_alias<_Types...> { using _Base = _Move_assign_alias<_Types...>; constexpr _Variant_base() noexcept(_Traits<_Types...>::_S_nothrow_default_ctor) : _Variant_base(in_place_index<0>) { } template constexpr explicit _Variant_base(in_place_index_t<_Np> __i, _Args&&... __args) : _Base(__i, std::forward<_Args>(__args)...) { } _Variant_base(const _Variant_base&) = default; _Variant_base(_Variant_base&&) = default; _Variant_base& operator=(const _Variant_base&) = default; _Variant_base& operator=(_Variant_base&&) = default; }; template inline constexpr bool __exactly_once = std::__find_uniq_type_in_pack<_Tp, _Types...>() < sizeof...(_Types); template struct _Arr { _Ti _M_x[1]; }; template struct _Build_FUN { void _S_fun() = delete; }; template struct _Build_FUN<_Ind, _Tp, _Ti, void_t{{std::declval<_Tp>()}})>> { static integral_constant _S_fun(_Ti); }; template>> struct _Build_FUNs; template struct _Build_FUNs<_Tp, variant<_Ti...>, index_sequence<_Ind...>> : _Build_FUN<_Ind, _Tp, _Ti>... { using _Build_FUN<_Ind, _Tp, _Ti>::_S_fun...; }; template using _FUN_type = decltype(_Build_FUNs<_Tp, _Variant>::_S_fun(std::declval<_Tp>())); template inline constexpr size_t __accepted_index = variant_npos; template inline constexpr size_t __accepted_index<_Tp, _Variant, void_t<_FUN_type<_Tp, _Variant>>> = _FUN_type<_Tp, _Variant>::value; template> inline constexpr bool __extra_visit_slot_needed = false; template inline constexpr bool __extra_visit_slot_needed<__variant_cookie, _Var, variant<_Types...>> = !__variant::__never_valueless<_Types...>(); template inline constexpr bool __extra_visit_slot_needed<__variant_idx_cookie, _Var, variant<_Types...>> = !__variant::__never_valueless<_Types...>(); template struct _Multi_array; template struct _Multi_array<_Tp> { template struct __untag_result : false_type { using element_type = _Tp; }; #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wignored-qualifiers" template struct __untag_result : false_type { using element_type = void(*)(_Args...); }; #pragma GCC diagnostic pop template struct __untag_result<__variant_cookie(*)(_Args...)> : false_type { using element_type = void(*)(_Args...); }; template struct __untag_result<__variant_idx_cookie(*)(_Args...)> : false_type { using element_type = void(*)(_Args...); }; template struct __untag_result<__deduce_visit_result<_Res>(*)(_Args...)> : true_type { using element_type = _Res(*)(_Args...); }; using __result_is_deduced = __untag_result<_Tp>; constexpr const typename __untag_result<_Tp>::element_type& _M_access() const { return _M_data; } typename __untag_result<_Tp>::element_type _M_data; }; template struct _Multi_array<_Ret(*)(_Visitor, _Variants...), __first, __rest...> { static constexpr size_t __index = sizeof...(_Variants) - sizeof...(__rest) - 1; using _Variant = typename _Nth_type<__index, _Variants...>::type; static constexpr int __do_cookie = __extra_visit_slot_needed<_Ret, _Variant> ? 1 : 0; using _Tp = _Ret(*)(_Visitor, _Variants...); template constexpr decltype(auto) _M_access(size_t __first_index, _Args... __rest_indices) const { return _M_arr[__first_index + __do_cookie] ._M_access(__rest_indices...); } _Multi_array<_Tp, __rest...> _M_arr[__first + __do_cookie]; }; # 949 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/variant" 3 template struct __gen_vtable_impl; # 959 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/variant" 3 template struct __gen_vtable_impl< _Multi_array<_Result_type (*)(_Visitor, _Variants...), __dimensions...>, std::index_sequence<__indices...>> { using _Next = remove_reference_t::type>; using _Array_type = _Multi_array<_Result_type (*)(_Visitor, _Variants...), __dimensions...>; static constexpr _Array_type _S_apply() { _Array_type __vtable{}; _S_apply_all_alts( __vtable, make_index_sequence>()); return __vtable; } template static constexpr void _S_apply_all_alts(_Array_type& __vtable, std::index_sequence<__var_indices...>) { if constexpr (__extra_visit_slot_needed<_Result_type, _Next>) (_S_apply_single_alt( __vtable._M_arr[__var_indices + 1], &(__vtable._M_arr[0])), ...); else (_S_apply_single_alt( __vtable._M_arr[__var_indices]), ...); } template static constexpr void _S_apply_single_alt(_Tp& __element, _Tp* __cookie_element = nullptr) { if constexpr (__do_cookie) { __element = __gen_vtable_impl< _Tp, std::index_sequence<__indices..., __index>>::_S_apply(); *__cookie_element = __gen_vtable_impl< _Tp, std::index_sequence<__indices..., variant_npos>>::_S_apply(); } else { auto __tmp_element = __gen_vtable_impl< remove_reference_t, std::index_sequence<__indices..., __index>>::_S_apply(); static_assert(is_same_v<_Tp, decltype(__tmp_element)>, "std::visit requires the visitor to have the same " "return type for all alternatives of a variant"); __element = __tmp_element; } } }; template struct __gen_vtable_impl< _Multi_array<_Result_type (*)(_Visitor, _Variants...)>, std::index_sequence<__indices...>> { using _Array_type = _Multi_array<_Result_type (*)(_Visitor, _Variants...)>; template static constexpr decltype(auto) __element_by_index_or_cookie(_Variant&& __var) noexcept { if constexpr (__index != variant_npos) return __variant::__get<__index>(std::forward<_Variant>(__var)); else return __variant_cookie{}; } static constexpr decltype(auto) __visit_invoke(_Visitor&& __visitor, _Variants... __vars) { if constexpr (is_same_v<_Result_type, __variant_idx_cookie>) std::__invoke(std::forward<_Visitor>(__visitor), __element_by_index_or_cookie<__indices>( std::forward<_Variants>(__vars))..., integral_constant()...); else if constexpr (is_same_v<_Result_type, __variant_cookie>) std::__invoke(std::forward<_Visitor>(__visitor), __element_by_index_or_cookie<__indices>( std::forward<_Variants>(__vars))...); else if constexpr (_Array_type::__result_is_deduced::value) return std::__invoke(std::forward<_Visitor>(__visitor), __element_by_index_or_cookie<__indices>( std::forward<_Variants>(__vars))...); else return std::__invoke_r<_Result_type>( std::forward<_Visitor>(__visitor), __variant::__get<__indices>(std::forward<_Variants>(__vars))...); } static constexpr auto _S_apply() { if constexpr (_Array_type::__result_is_deduced::value) { constexpr bool __visit_ret_type_mismatch = !is_same_v(), std::declval<_Variants>()...))>; if constexpr (__visit_ret_type_mismatch) { struct __cannot_match {}; return __cannot_match{}; } else return _Array_type{&__visit_invoke}; } else return _Array_type{&__visit_invoke}; } }; template struct __gen_vtable { using _Array_type = _Multi_array<_Result_type (*)(_Visitor, _Variants...), variant_size_v>...>; static constexpr _Array_type _S_vtable = __gen_vtable_impl<_Array_type, std::index_sequence<>>::_S_apply(); }; template struct _Base_dedup : public _Tp { }; template struct _Variant_hash_base; template struct _Variant_hash_base, std::index_sequence<__indices...>> : _Base_dedup<__indices, __poison_hash>>... { }; template())), typename _Tp = variant_alternative_t<_Np, remove_reference_t<_AsV>>> using __get_t = __conditional_t, _Tp&, _Tp&&>; template using __visit_result_t = invoke_result_t<_Visitor, __get_t<0, _Variants>...>; template constexpr inline bool __same_types = (is_same_v<_Tp, _Types> && ...); template constexpr bool __check_visitor_results(std::index_sequence<_Idxs...>) { return __same_types< invoke_result_t<_Visitor, __get_t<_Idxs, _Variant>>... >; } } } template constexpr bool holds_alternative(const variant<_Types...>& __v) noexcept { static_assert(__detail::__variant::__exactly_once<_Tp, _Types...>, "T must occur exactly once in alternatives"); return __v.index() == std::__find_uniq_type_in_pack<_Tp, _Types...>(); } template constexpr _Tp& get(variant<_Types...>& __v) { static_assert(__detail::__variant::__exactly_once<_Tp, _Types...>, "T must occur exactly once in alternatives"); constexpr size_t __n = std::__find_uniq_type_in_pack<_Tp, _Types...>(); return std::get<__n>(__v); } template constexpr _Tp&& get(variant<_Types...>&& __v) { static_assert(__detail::__variant::__exactly_once<_Tp, _Types...>, "T must occur exactly once in alternatives"); constexpr size_t __n = std::__find_uniq_type_in_pack<_Tp, _Types...>(); return std::get<__n>(std::move(__v)); } template constexpr const _Tp& get(const variant<_Types...>& __v) { static_assert(__detail::__variant::__exactly_once<_Tp, _Types...>, "T must occur exactly once in alternatives"); constexpr size_t __n = std::__find_uniq_type_in_pack<_Tp, _Types...>(); return std::get<__n>(__v); } template constexpr const _Tp&& get(const variant<_Types...>&& __v) { static_assert(__detail::__variant::__exactly_once<_Tp, _Types...>, "T must occur exactly once in alternatives"); constexpr size_t __n = std::__find_uniq_type_in_pack<_Tp, _Types...>(); return std::get<__n>(std::move(__v)); } template constexpr add_pointer_t>> get_if(variant<_Types...>* __ptr) noexcept { using _Alternative_type = variant_alternative_t<_Np, variant<_Types...>>; static_assert(_Np < sizeof...(_Types), "The index must be in [0, number of alternatives)"); static_assert(!is_void_v<_Alternative_type>, "_Tp must not be void"); if (__ptr && __ptr->index() == _Np) return std::addressof(__detail::__variant::__get<_Np>(*__ptr)); return nullptr; } template constexpr add_pointer_t>> get_if(const variant<_Types...>* __ptr) noexcept { using _Alternative_type = variant_alternative_t<_Np, variant<_Types...>>; static_assert(_Np < sizeof...(_Types), "The index must be in [0, number of alternatives)"); static_assert(!is_void_v<_Alternative_type>, "_Tp must not be void"); if (__ptr && __ptr->index() == _Np) return std::addressof(__detail::__variant::__get<_Np>(*__ptr)); return nullptr; } template constexpr add_pointer_t<_Tp> get_if(variant<_Types...>* __ptr) noexcept { static_assert(__detail::__variant::__exactly_once<_Tp, _Types...>, "T must occur exactly once in alternatives"); static_assert(!is_void_v<_Tp>, "_Tp must not be void"); constexpr size_t __n = std::__find_uniq_type_in_pack<_Tp, _Types...>(); return std::get_if<__n>(__ptr); } template constexpr add_pointer_t get_if(const variant<_Types...>* __ptr) noexcept { static_assert(__detail::__variant::__exactly_once<_Tp, _Types...>, "T must occur exactly once in alternatives"); static_assert(!is_void_v<_Tp>, "_Tp must not be void"); constexpr size_t __n = std::__find_uniq_type_in_pack<_Tp, _Types...>(); return std::get_if<__n>(__ptr); } struct monostate { }; # 1264 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/variant" 3 template constexpr bool operator <(const variant<_Types...>& __lhs, const variant<_Types...>& __rhs) { bool __ret = true; __detail::__variant::__raw_idx_visit( [&__ret, &__lhs] (auto&& __rhs_mem, auto __rhs_index) mutable { if constexpr (__rhs_index != variant_npos) { if (__lhs.index() == __rhs_index) { auto& __this_mem = std::get<__rhs_index>(__lhs); __ret = __this_mem < __rhs_mem; } else __ret = (__lhs.index() + 1) < (__rhs_index + 1); } else __ret = (__lhs.index() + 1) < (__rhs_index + 1); }, __rhs); return __ret; } template constexpr bool operator <=(const variant<_Types...>& __lhs, const variant<_Types...>& __rhs) { bool __ret = true; __detail::__variant::__raw_idx_visit( [&__ret, &__lhs] (auto&& __rhs_mem, auto __rhs_index) mutable { if constexpr (__rhs_index != variant_npos) { if (__lhs.index() == __rhs_index) { auto& __this_mem = std::get<__rhs_index>(__lhs); __ret = __this_mem <= __rhs_mem; } else __ret = (__lhs.index() + 1) <= (__rhs_index + 1); } else __ret = (__lhs.index() + 1) <= (__rhs_index + 1); }, __rhs); return __ret; } template constexpr bool operator ==(const variant<_Types...>& __lhs, const variant<_Types...>& __rhs) { bool __ret = true; __detail::__variant::__raw_idx_visit( [&__ret, &__lhs] (auto&& __rhs_mem, auto __rhs_index) mutable { if constexpr (__rhs_index != variant_npos) { if (__lhs.index() == __rhs_index) { auto& __this_mem = std::get<__rhs_index>(__lhs); __ret = __this_mem == __rhs_mem; } else __ret = (__lhs.index() + 1) == (__rhs_index + 1); } else __ret = (__lhs.index() + 1) == (__rhs_index + 1); }, __rhs); return __ret; } template constexpr bool operator !=(const variant<_Types...>& __lhs, const variant<_Types...>& __rhs) { bool __ret = true; __detail::__variant::__raw_idx_visit( [&__ret, &__lhs] (auto&& __rhs_mem, auto __rhs_index) mutable { if constexpr (__rhs_index != variant_npos) { if (__lhs.index() == __rhs_index) { auto& __this_mem = std::get<__rhs_index>(__lhs); __ret = __this_mem != __rhs_mem; } else __ret = (__lhs.index() + 1) != (__rhs_index + 1); } else __ret = (__lhs.index() + 1) != (__rhs_index + 1); }, __rhs); return __ret; } template constexpr bool operator >=(const variant<_Types...>& __lhs, const variant<_Types...>& __rhs) { bool __ret = true; __detail::__variant::__raw_idx_visit( [&__ret, &__lhs] (auto&& __rhs_mem, auto __rhs_index) mutable { if constexpr (__rhs_index != variant_npos) { if (__lhs.index() == __rhs_index) { auto& __this_mem = std::get<__rhs_index>(__lhs); __ret = __this_mem >= __rhs_mem; } else __ret = (__lhs.index() + 1) >= (__rhs_index + 1); } else __ret = (__lhs.index() + 1) >= (__rhs_index + 1); }, __rhs); return __ret; } template constexpr bool operator >(const variant<_Types...>& __lhs, const variant<_Types...>& __rhs) { bool __ret = true; __detail::__variant::__raw_idx_visit( [&__ret, &__lhs] (auto&& __rhs_mem, auto __rhs_index) mutable { if constexpr (__rhs_index != variant_npos) { if (__lhs.index() == __rhs_index) { auto& __this_mem = std::get<__rhs_index>(__lhs); __ret = __this_mem > __rhs_mem; } else __ret = (__lhs.index() + 1) > (__rhs_index + 1); } else __ret = (__lhs.index() + 1) > (__rhs_index + 1); }, __rhs); return __ret; } constexpr bool operator==(monostate, monostate) noexcept { return true; } template requires (three_way_comparable<_Types> && ...) constexpr common_comparison_category_t...> operator<=>(const variant<_Types...>& __v, const variant<_Types...>& __w) { common_comparison_category_t...> __ret = strong_ordering::equal; __detail::__variant::__raw_idx_visit( [&__ret, &__v] (auto&& __w_mem, auto __w_index) mutable { if constexpr (__w_index != variant_npos) { if (__v.index() == __w_index) { auto& __this_mem = std::get<__w_index>(__v); __ret = __this_mem <=> __w_mem; return; } } __ret = (__v.index() + 1) <=> (__w_index + 1); }, __w); return __ret; } constexpr strong_ordering operator<=>(monostate, monostate) noexcept { return strong_ordering::equal; } # 1312 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/variant" 3 template constexpr __detail::__variant::__visit_result_t<_Visitor, _Variants...> visit(_Visitor&&, _Variants&&...); template constexpr inline enable_if_t<(is_move_constructible_v<_Types> && ...) && (is_swappable_v<_Types> && ...)> swap(variant<_Types...>& __lhs, variant<_Types...>& __rhs) noexcept(noexcept(__lhs.swap(__rhs))) { __lhs.swap(__rhs); } template enable_if_t && ...) && (is_swappable_v<_Types> && ...))> swap(variant<_Types...>&, variant<_Types...>&) = delete; class bad_variant_access : public exception { public: bad_variant_access() noexcept { } const char* what() const noexcept override { return _M_reason; } private: bad_variant_access(const char* __reason) noexcept : _M_reason(__reason) { } const char* _M_reason = "bad variant access"; friend void __throw_bad_variant_access(const char* __what); }; inline void __throw_bad_variant_access(const char* __what) { (throw (bad_variant_access(__what))); } inline void __throw_bad_variant_access(bool __valueless) { if (__valueless) [[__unlikely__]] __throw_bad_variant_access("std::get: variant is valueless"); else __throw_bad_variant_access("std::get: wrong index for variant"); } template class variant : private __detail::__variant::_Variant_base<_Types...>, private _Enable_copy_move< __detail::__variant::_Traits<_Types...>::_S_copy_ctor, __detail::__variant::_Traits<_Types...>::_S_copy_assign, __detail::__variant::_Traits<_Types...>::_S_move_ctor, __detail::__variant::_Traits<_Types...>::_S_move_assign, variant<_Types...>> { private: template friend constexpr decltype(auto) __variant_cast(_Tp&&); static_assert(sizeof...(_Types) > 0, "variant must have at least one alternative"); static_assert(!(std::is_reference_v<_Types> || ...), "variant must have no reference alternative"); static_assert(!(std::is_void_v<_Types> || ...), "variant must have no void alternative"); using _Base = __detail::__variant::_Variant_base<_Types...>; template static constexpr bool __not_self = !is_same_v<__remove_cvref_t<_Tp>, variant>; template static constexpr bool __exactly_once = __detail::__variant::__exactly_once<_Tp, _Types...>; template static constexpr size_t __accepted_index = __detail::__variant::__accepted_index<_Tp, variant>; template> using __to_type = typename _Nth_type<_Np, _Types...>::type; template>> using __accepted_type = __to_type<__accepted_index<_Tp>>; template static constexpr size_t __index_of = std::__find_uniq_type_in_pack<_Tp, _Types...>(); using _Traits = __detail::__variant::_Traits<_Types...>; template struct __is_in_place_tag : false_type { }; template struct __is_in_place_tag> : true_type { }; template struct __is_in_place_tag> : true_type { }; template static constexpr bool __not_in_place_tag = !__is_in_place_type_v<__remove_cvref_t<_Tp>> && !__is_in_place_index_v<__remove_cvref_t<_Tp>>; public: variant() requires is_default_constructible_v<__to_type<0>> = default; # 1431 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/variant" 3 variant(const variant& __rhs) = default; variant(variant&&) = default; variant& operator=(const variant&) = default; variant& operator=(variant&&) = default; constexpr ~variant() = default; template, typename = enable_if_t<__not_in_place_tag<_Tp>>, typename _Tj = __accepted_type<_Tp&&>, typename = enable_if_t<__exactly_once<_Tj> && is_constructible_v<_Tj, _Tp>>> constexpr variant(_Tp&& __t) noexcept(is_nothrow_constructible_v<_Tj, _Tp>) : variant(in_place_index<__accepted_index<_Tp>>, std::forward<_Tp>(__t)) { } template && is_constructible_v<_Tp, _Args...>>> constexpr explicit variant(in_place_type_t<_Tp>, _Args&&... __args) : variant(in_place_index<__index_of<_Tp>>, std::forward<_Args>(__args)...) { } template && is_constructible_v<_Tp, initializer_list<_Up>&, _Args...>>> constexpr explicit variant(in_place_type_t<_Tp>, initializer_list<_Up> __il, _Args&&... __args) : variant(in_place_index<__index_of<_Tp>>, __il, std::forward<_Args>(__args)...) { } template, typename = enable_if_t>> constexpr explicit variant(in_place_index_t<_Np>, _Args&&... __args) : _Base(in_place_index<_Np>, std::forward<_Args>(__args)...) { } template, typename = enable_if_t&, _Args...>>> constexpr explicit variant(in_place_index_t<_Np>, initializer_list<_Up> __il, _Args&&... __args) : _Base(in_place_index<_Np>, __il, std::forward<_Args>(__args)...) { } template constexpr enable_if_t<__exactly_once<__accepted_type<_Tp&&>> && is_constructible_v<__accepted_type<_Tp&&>, _Tp> && is_assignable_v<__accepted_type<_Tp&&>&, _Tp>, variant&> operator=(_Tp&& __rhs) noexcept(is_nothrow_assignable_v<__accepted_type<_Tp&&>&, _Tp> && is_nothrow_constructible_v<__accepted_type<_Tp&&>, _Tp>) { constexpr auto __index = __accepted_index<_Tp>; if (index() == __index) std::get<__index>(*this) = std::forward<_Tp>(__rhs); else { using _Tj = __accepted_type<_Tp&&>; if constexpr (is_nothrow_constructible_v<_Tj, _Tp> || !is_nothrow_move_constructible_v<_Tj>) this->emplace<__index>(std::forward<_Tp>(__rhs)); else this->emplace<__index>(_Tj(std::forward<_Tp>(__rhs))); } return *this; } template constexpr enable_if_t && __exactly_once<_Tp>, _Tp&> emplace(_Args&&... __args) { constexpr size_t __index = __index_of<_Tp>; return this->emplace<__index>(std::forward<_Args>(__args)...); } template constexpr enable_if_t&, _Args...> && __exactly_once<_Tp>, _Tp&> emplace(initializer_list<_Up> __il, _Args&&... __args) { constexpr size_t __index = __index_of<_Tp>; return this->emplace<__index>(__il, std::forward<_Args>(__args)...); } template constexpr enable_if_t, _Args...>, __to_type<_Np>&> emplace(_Args&&... __args) { namespace __variant = std::__detail::__variant; using type = typename _Nth_type<_Np, _Types...>::type; if constexpr (is_nothrow_constructible_v) { __variant::__emplace<_Np>(*this, std::forward<_Args>(__args)...); } else if constexpr (is_scalar_v) { const type __tmp(std::forward<_Args>(__args)...); __variant::__emplace<_Np>(*this, __tmp); } else if constexpr (__variant::_Never_valueless_alt() && _Traits::_S_move_assign) { variant __tmp(in_place_index<_Np>, std::forward<_Args>(__args)...); *this = std::move(__tmp); } else { __variant::__emplace<_Np>(*this, std::forward<_Args>(__args)...); } return std::get<_Np>(*this); } template constexpr enable_if_t, initializer_list<_Up>&, _Args...>, __to_type<_Np>&> emplace(initializer_list<_Up> __il, _Args&&... __args) { namespace __variant = std::__detail::__variant; using type = typename _Nth_type<_Np, _Types...>::type; if constexpr (is_nothrow_constructible_v&, _Args...>) { __variant::__emplace<_Np>(*this, __il, std::forward<_Args>(__args)...); } else if constexpr (__variant::_Never_valueless_alt() && _Traits::_S_move_assign) { variant __tmp(in_place_index<_Np>, __il, std::forward<_Args>(__args)...); *this = std::move(__tmp); } else { __variant::__emplace<_Np>(*this, __il, std::forward<_Args>(__args)...); } return std::get<_Np>(*this); } template enable_if_t emplace(_Args&&...) = delete; template enable_if_t> emplace(_Args&&...) = delete; constexpr bool valueless_by_exception() const noexcept { return !this->_M_valid(); } constexpr size_t index() const noexcept { using __index_type = typename _Base::__index_type; if constexpr (__detail::__variant::__never_valueless<_Types...>()) return this->_M_index; else if constexpr (sizeof...(_Types) <= __index_type(-1) / 2) return make_signed_t<__index_type>(this->_M_index); else return size_t(__index_type(this->_M_index + 1)) - 1; } constexpr void swap(variant& __rhs) noexcept((__is_nothrow_swappable<_Types>::value && ...) && is_nothrow_move_constructible_v) { static_assert((is_move_constructible_v<_Types> && ...)); if (__rhs.valueless_by_exception()) [[__unlikely__]] { if (!this->valueless_by_exception()) [[__likely__]] __rhs.swap(*this); return; } namespace __variant = __detail::__variant; __variant::__raw_idx_visit( [this, &__rhs](auto&& __rhs_mem, auto __rhs_index) mutable { constexpr size_t __j = __rhs_index; if constexpr (__j != variant_npos) { if (this->index() == __j) { using std::swap; swap(std::get<__j>(*this), __rhs_mem); } else { auto __tmp(std::move(__rhs_mem)); if constexpr (_Traits::_S_trivial_move_assign) __rhs = std::move(*this); else __variant::__raw_idx_visit( [&__rhs](auto&& __this_mem, auto __this_index) mutable { constexpr size_t __k = __this_index; if constexpr (__k != variant_npos) __variant::__emplace<__k>(__rhs, std::move(__this_mem)); }, *this); __variant::__emplace<__j>(*this, std::move(__tmp)); } } }, __rhs); } private: template friend constexpr decltype(auto) __detail::__variant::__get(_Vp&& __v) noexcept; template friend constexpr bool operator <(const variant<_Tp...>& __lhs, const variant<_Tp...>& __rhs); template friend constexpr bool operator <=(const variant<_Tp...>& __lhs, const variant<_Tp...>& __rhs); template friend constexpr bool operator ==(const variant<_Tp...>& __lhs, const variant<_Tp...>& __rhs); template friend constexpr bool operator !=(const variant<_Tp...>& __lhs, const variant<_Tp...>& __rhs); template friend constexpr bool operator >=(const variant<_Tp...>& __lhs, const variant<_Tp...>& __rhs); template friend constexpr bool operator >(const variant<_Tp...>& __lhs, const variant<_Tp...>& __rhs); }; template constexpr variant_alternative_t<_Np, variant<_Types...>>& get(variant<_Types...>& __v) { static_assert(_Np < sizeof...(_Types), "The index must be in [0, number of alternatives)"); if (__v.index() != _Np) __throw_bad_variant_access(__v.valueless_by_exception()); return __detail::__variant::__get<_Np>(__v); } template constexpr variant_alternative_t<_Np, variant<_Types...>>&& get(variant<_Types...>&& __v) { static_assert(_Np < sizeof...(_Types), "The index must be in [0, number of alternatives)"); if (__v.index() != _Np) __throw_bad_variant_access(__v.valueless_by_exception()); return __detail::__variant::__get<_Np>(std::move(__v)); } template constexpr const variant_alternative_t<_Np, variant<_Types...>>& get(const variant<_Types...>& __v) { static_assert(_Np < sizeof...(_Types), "The index must be in [0, number of alternatives)"); if (__v.index() != _Np) __throw_bad_variant_access(__v.valueless_by_exception()); return __detail::__variant::__get<_Np>(__v); } template constexpr const variant_alternative_t<_Np, variant<_Types...>>&& get(const variant<_Types...>&& __v) { static_assert(_Np < sizeof...(_Types), "The index must be in [0, number of alternatives)"); if (__v.index() != _Np) __throw_bad_variant_access(__v.valueless_by_exception()); return __detail::__variant::__get<_Np>(std::move(__v)); } template constexpr decltype(auto) __do_visit(_Visitor&& __visitor, _Variants&&... __variants) { if constexpr (sizeof...(_Variants) == 0) { if constexpr (is_void_v<_Result_type>) return (void) std::forward<_Visitor>(__visitor)(); else return std::forward<_Visitor>(__visitor)(); } else { constexpr size_t __max = 11; using _V0 = typename _Nth_type<0, _Variants...>::type; constexpr auto __n = variant_size_v>; if constexpr (sizeof...(_Variants) > 1 || __n > __max) { constexpr auto& __vtable = __detail::__variant::__gen_vtable< _Result_type, _Visitor&&, _Variants&&...>::_S_vtable; auto __func_ptr = __vtable._M_access(__variants.index()...); return (*__func_ptr)(std::forward<_Visitor>(__visitor), std::forward<_Variants>(__variants)...); } else { _V0& __v0 = [](_V0& __v, ...) -> _V0& { return __v; }(__variants...); using __detail::__variant::_Multi_array; using __detail::__variant::__gen_vtable_impl; using _Ma = _Multi_array<_Result_type (*)(_Visitor&&, _V0&&)>; # 1814 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/variant" 3 switch (__v0.index()) { case 0: { if constexpr (0 < __n) { return __gen_vtable_impl<_Ma, index_sequence<0>>:: __visit_invoke(std::forward<_Visitor>(__visitor), std::forward<_V0>(__v0)); } else __builtin_unreachable(); } case 1: { if constexpr (1 < __n) { return __gen_vtable_impl<_Ma, index_sequence<1>>:: __visit_invoke(std::forward<_Visitor>(__visitor), std::forward<_V0>(__v0)); } else __builtin_unreachable(); } case 2: { if constexpr (2 < __n) { return __gen_vtable_impl<_Ma, index_sequence<2>>:: __visit_invoke(std::forward<_Visitor>(__visitor), std::forward<_V0>(__v0)); } else __builtin_unreachable(); } case 3: { if constexpr (3 < __n) { return __gen_vtable_impl<_Ma, index_sequence<3>>:: __visit_invoke(std::forward<_Visitor>(__visitor), std::forward<_V0>(__v0)); } else __builtin_unreachable(); } case 4: { if constexpr (4 < __n) { return __gen_vtable_impl<_Ma, index_sequence<4>>:: __visit_invoke(std::forward<_Visitor>(__visitor), std::forward<_V0>(__v0)); } else __builtin_unreachable(); } case 5: { if constexpr (5 < __n) { return __gen_vtable_impl<_Ma, index_sequence<5>>:: __visit_invoke(std::forward<_Visitor>(__visitor), std::forward<_V0>(__v0)); } else __builtin_unreachable(); } case 6: { if constexpr (6 < __n) { return __gen_vtable_impl<_Ma, index_sequence<6>>:: __visit_invoke(std::forward<_Visitor>(__visitor), std::forward<_V0>(__v0)); } else __builtin_unreachable(); } case 7: { if constexpr (7 < __n) { return __gen_vtable_impl<_Ma, index_sequence<7>>:: __visit_invoke(std::forward<_Visitor>(__visitor), std::forward<_V0>(__v0)); } else __builtin_unreachable(); } case 8: { if constexpr (8 < __n) { return __gen_vtable_impl<_Ma, index_sequence<8>>:: __visit_invoke(std::forward<_Visitor>(__visitor), std::forward<_V0>(__v0)); } else __builtin_unreachable(); } case 9: { if constexpr (9 < __n) { return __gen_vtable_impl<_Ma, index_sequence<9>>:: __visit_invoke(std::forward<_Visitor>(__visitor), std::forward<_V0>(__v0)); } else __builtin_unreachable(); } case 10: { if constexpr (10 < __n) { return __gen_vtable_impl<_Ma, index_sequence<10>>:: __visit_invoke(std::forward<_Visitor>(__visitor), std::forward<_V0>(__v0)); } else __builtin_unreachable(); } case variant_npos: using __detail::__variant::__variant_idx_cookie; using __detail::__variant::__variant_cookie; if constexpr (is_same_v<_Result_type, __variant_idx_cookie> || is_same_v<_Result_type, __variant_cookie>) { using _Npos = index_sequence; return __gen_vtable_impl<_Ma, _Npos>:: __visit_invoke(std::forward<_Visitor>(__visitor), std::forward<_V0>(__v0)); } else __builtin_unreachable(); default: __builtin_unreachable(); } } } } template constexpr __detail::__variant::__visit_result_t<_Visitor, _Variants...> visit(_Visitor&& __visitor, _Variants&&... __variants) { namespace __variant = std::__detail::__variant; if ((__variant::__as(__variants).valueless_by_exception() || ...)) __throw_bad_variant_access("std::visit: variant is valueless"); using _Result_type = __detail::__variant::__visit_result_t<_Visitor, _Variants...>; using _Tag = __detail::__variant::__deduce_visit_result<_Result_type>; if constexpr (sizeof...(_Variants) == 1) { using _Vp = decltype(__variant::__as(std::declval<_Variants>()...)); constexpr bool __visit_rettypes_match = __detail::__variant:: __check_visitor_results<_Visitor, _Vp>( make_index_sequence>>()); if constexpr (!__visit_rettypes_match) { static_assert(__visit_rettypes_match, "std::visit requires the visitor to have the same " "return type for all alternatives of a variant"); return; } else return std::__do_visit<_Tag>( std::forward<_Visitor>(__visitor), static_cast<_Vp>(__variants)...); } else return std::__do_visit<_Tag>( std::forward<_Visitor>(__visitor), __variant::__as(std::forward<_Variants>(__variants))...); } template constexpr _Res visit(_Visitor&& __visitor, _Variants&&... __variants) { namespace __variant = std::__detail::__variant; if ((__variant::__as(__variants).valueless_by_exception() || ...)) __throw_bad_variant_access("std::visit: variant is valueless"); return std::__do_visit<_Res>(std::forward<_Visitor>(__visitor), __variant::__as(std::forward<_Variants>(__variants))...); } template struct __variant_hash_call_base_impl { size_t operator()(const variant<_Types...>& __t) const noexcept((is_nothrow_invocable_v>, _Types> && ...)) { size_t __ret; __detail::__variant::__raw_visit( [&__t, &__ret](auto&& __t_mem) mutable { using _Type = __remove_cvref_t; if constexpr (!is_same_v<_Type, __detail::__variant::__variant_cookie>) __ret = std::hash{}(__t.index()) + std::hash<_Type>{}(__t_mem); else __ret = std::hash{}(__t.index()); }, __t); return __ret; } }; template struct __variant_hash_call_base_impl {}; template using __variant_hash_call_base = __variant_hash_call_base_impl<(__poison_hash>:: __enable_hash_call &&...), _Types...>; template struct hash> : private __detail::__variant::_Variant_hash_base< variant<_Types...>, std::index_sequence_for<_Types...>>, public __variant_hash_call_base<_Types...> { using result_type [[__deprecated__]] = size_t; using argument_type [[__deprecated__]] = variant<_Types...>; }; template<> struct hash { using result_type [[__deprecated__]] = size_t; using argument_type [[__deprecated__]] = monostate; size_t operator()(const monostate&) const noexcept { constexpr size_t __magic_monostate_hash = -7777; return __magic_monostate_hash; } }; template struct __is_fast_hash>> : bool_constant<(__is_fast_hash<_Types>::value && ...)> { }; } # 28 "/home/avi/scylla-maint/seastar/include/seastar/rpc/rpc.hh" 2 # 1 "/usr/include/boost/intrusive/list.hpp" 1 3 4 # 17 "/usr/include/boost/intrusive/list.hpp" 3 4 # 1 "/usr/include/boost/intrusive/detail/config_begin.hpp" 1 3 4 # 14 "/usr/include/boost/intrusive/detail/config_begin.hpp" 3 4 # 1 "/usr/include/boost/config.hpp" 1 3 4 # 30 "/usr/include/boost/config.hpp" 3 4 # 1 "/usr/include/boost/config/user.hpp" 1 3 4 # 31 "/usr/include/boost/config.hpp" 2 3 4 # 1 "/usr/include/boost/config/detail/select_compiler_config.hpp" 1 3 4 # 36 "/usr/include/boost/config.hpp" 2 3 4 # 1 "/usr/include/boost/config/compiler/clang.hpp" 1 3 4 # 366 "/usr/include/boost/config/compiler/clang.hpp" 3 4 # 1 "/usr/include/boost/config/compiler/clang_version.hpp" 1 3 4 # 367 "/usr/include/boost/config/compiler/clang.hpp" 2 3 4 # 40 "/usr/include/boost/config.hpp" 2 3 4 # 1 "/usr/include/boost/config/detail/select_stdlib_config.hpp" 1 3 4 # 24 "/usr/include/boost/config/detail/select_stdlib_config.hpp" 3 4 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/version" 1 3 4 # 34 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/version" 3 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/version.h" 1 3 # 48 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/version.h" 3 # 37 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/version" 2 3 # 25 "/usr/include/boost/config/detail/select_stdlib_config.hpp" 2 3 4 # 45 "/usr/include/boost/config.hpp" 2 3 4 # 1 "/usr/include/boost/config/stdlib/libstdcpp3.hpp" 1 3 4 # 78 "/usr/include/boost/config/stdlib/libstdcpp3.hpp" 3 4 # 1 "/usr/include/unistd.h" 1 3 4 # 27 "/usr/include/unistd.h" 3 4 extern "C" { # 202 "/usr/include/unistd.h" 3 4 # 1 "/usr/include/bits/posix_opt.h" 1 3 4 # 203 "/usr/include/unistd.h" 2 3 4 # 1 "/usr/include/bits/environments.h" 1 3 4 # 22 "/usr/include/bits/environments.h" 3 4 # 1 "/usr/include/bits/wordsize.h" 1 3 4 # 23 "/usr/include/bits/environments.h" 2 3 4 # 207 "/usr/include/unistd.h" 2 3 4 # 217 "/usr/include/unistd.h" 3 4 # 1 "/usr/include/bits/types.h" 1 3 4 # 27 "/usr/include/bits/types.h" 3 4 # 1 "/usr/include/bits/wordsize.h" 1 3 4 # 28 "/usr/include/bits/types.h" 2 3 4 # 1 "/usr/include/bits/timesize.h" 1 3 4 # 19 "/usr/include/bits/timesize.h" 3 4 # 1 "/usr/include/bits/wordsize.h" 1 3 4 # 20 "/usr/include/bits/timesize.h" 2 3 4 # 29 "/usr/include/bits/types.h" 2 3 4 typedef unsigned char __u_char; typedef unsigned short int __u_short; typedef unsigned int __u_int; typedef unsigned long int __u_long; typedef signed char __int8_t; typedef unsigned char __uint8_t; typedef signed short int __int16_t; typedef unsigned short int __uint16_t; typedef signed int __int32_t; typedef unsigned int __uint32_t; typedef signed long int __int64_t; typedef unsigned long int __uint64_t; typedef __int8_t __int_least8_t; typedef __uint8_t __uint_least8_t; typedef __int16_t __int_least16_t; typedef __uint16_t __uint_least16_t; typedef __int32_t __int_least32_t; typedef __uint32_t __uint_least32_t; typedef __int64_t __int_least64_t; typedef __uint64_t __uint_least64_t; typedef long int __quad_t; typedef unsigned long int __u_quad_t; typedef long int __intmax_t; typedef unsigned long int __uintmax_t; # 141 "/usr/include/bits/types.h" 3 4 # 1 "/usr/include/bits/typesizes.h" 1 3 4 # 142 "/usr/include/bits/types.h" 2 3 4 # 1 "/usr/include/bits/time64.h" 1 3 4 # 143 "/usr/include/bits/types.h" 2 3 4 typedef unsigned long int __dev_t; typedef unsigned int __uid_t; typedef unsigned int __gid_t; typedef unsigned long int __ino_t; typedef unsigned long int __ino64_t; typedef unsigned int __mode_t; typedef unsigned long int __nlink_t; typedef long int __off_t; typedef long int __off64_t; typedef int __pid_t; typedef struct { int __val[2]; } __fsid_t; typedef long int __clock_t; typedef unsigned long int __rlim_t; typedef unsigned long int __rlim64_t; typedef unsigned int __id_t; typedef long int __time_t; typedef unsigned int __useconds_t; typedef long int __suseconds_t; typedef long int __suseconds64_t; typedef int __daddr_t; typedef int __key_t; typedef int __clockid_t; typedef void * __timer_t; typedef long int __blksize_t; typedef long int __blkcnt_t; typedef long int __blkcnt64_t; typedef unsigned long int __fsblkcnt_t; typedef unsigned long int __fsblkcnt64_t; typedef unsigned long int __fsfilcnt_t; typedef unsigned long int __fsfilcnt64_t; typedef long int __fsword_t; typedef long int __ssize_t; typedef long int __syscall_slong_t; typedef unsigned long int __syscall_ulong_t; typedef __off64_t __loff_t; typedef char *__caddr_t; typedef long int __intptr_t; typedef unsigned int __socklen_t; typedef int __sig_atomic_t; # 218 "/usr/include/unistd.h" 2 3 4 typedef __ssize_t ssize_t; # 1 "/usr/bin/../lib/clang/18/include/stddef.h" 1 3 4 # 77 "/usr/bin/../lib/clang/18/include/stddef.h" 3 4 # 1 "/usr/bin/../lib/clang/18/include/__stddef_size_t.h" 1 3 4 # 18 "/usr/bin/../lib/clang/18/include/__stddef_size_t.h" 3 4 typedef long unsigned int size_t; # 78 "/usr/bin/../lib/clang/18/include/stddef.h" 2 3 4 # 92 "/usr/bin/../lib/clang/18/include/stddef.h" 3 4 # 1 "/usr/bin/../lib/clang/18/include/__stddef_null.h" 1 3 4 # 93 "/usr/bin/../lib/clang/18/include/stddef.h" 2 3 4 # 227 "/usr/include/unistd.h" 2 3 4 typedef __gid_t gid_t; typedef __uid_t uid_t; typedef __off_t off_t; typedef __off64_t off64_t; typedef __useconds_t useconds_t; typedef __pid_t pid_t; typedef __intptr_t intptr_t; typedef __socklen_t socklen_t; # 287 "/usr/include/unistd.h" 3 4 extern int access (const char *__name, int __type) noexcept (true) __attribute__ ((__nonnull__ (1))); extern int euidaccess (const char *__name, int __type) noexcept (true) __attribute__ ((__nonnull__ (1))); extern int eaccess (const char *__name, int __type) noexcept (true) __attribute__ ((__nonnull__ (1))); extern int execveat (int __fd, const char *__path, char *const __argv[], char *const __envp[], int __flags) noexcept (true) __attribute__ ((__nonnull__ (2, 3))); extern int faccessat (int __fd, const char *__file, int __type, int __flag) noexcept (true) __attribute__ ((__nonnull__ (2))) ; # 339 "/usr/include/unistd.h" 3 4 extern __off_t lseek (int __fd, __off_t __offset, int __whence) noexcept (true); # 350 "/usr/include/unistd.h" 3 4 extern __off64_t lseek64 (int __fd, __off64_t __offset, int __whence) noexcept (true); extern int close (int __fd); extern void closefrom (int __lowfd) noexcept (true); extern ssize_t read (int __fd, void *__buf, size_t __nbytes) ; extern ssize_t write (int __fd, const void *__buf, size_t __n) ; # 389 "/usr/include/unistd.h" 3 4 extern ssize_t pread (int __fd, void *__buf, size_t __nbytes, __off_t __offset) ; extern ssize_t pwrite (int __fd, const void *__buf, size_t __n, __off_t __offset) ; # 422 "/usr/include/unistd.h" 3 4 extern ssize_t pread64 (int __fd, void *__buf, size_t __nbytes, __off64_t __offset) ; extern ssize_t pwrite64 (int __fd, const void *__buf, size_t __n, __off64_t __offset) ; extern int pipe (int __pipedes[2]) noexcept (true) ; extern int pipe2 (int __pipedes[2], int __flags) noexcept (true) ; # 452 "/usr/include/unistd.h" 3 4 extern unsigned int alarm (unsigned int __seconds) noexcept (true); # 464 "/usr/include/unistd.h" 3 4 extern unsigned int sleep (unsigned int __seconds); extern __useconds_t ualarm (__useconds_t __value, __useconds_t __interval) noexcept (true); extern int usleep (__useconds_t __useconds); # 489 "/usr/include/unistd.h" 3 4 extern int pause (void); extern int chown (const char *__file, __uid_t __owner, __gid_t __group) noexcept (true) __attribute__ ((__nonnull__ (1))) ; extern int fchown (int __fd, __uid_t __owner, __gid_t __group) noexcept (true) ; extern int lchown (const char *__file, __uid_t __owner, __gid_t __group) noexcept (true) __attribute__ ((__nonnull__ (1))) ; extern int fchownat (int __fd, const char *__file, __uid_t __owner, __gid_t __group, int __flag) noexcept (true) __attribute__ ((__nonnull__ (2))) ; extern int chdir (const char *__path) noexcept (true) __attribute__ ((__nonnull__ (1))) ; extern int fchdir (int __fd) noexcept (true) ; # 531 "/usr/include/unistd.h" 3 4 extern char *getcwd (char *__buf, size_t __size) noexcept (true) ; extern char *get_current_dir_name (void) noexcept (true); extern char *getwd (char *__buf) noexcept (true) __attribute__ ((__nonnull__ (1))) __attribute__ ((__deprecated__)) ; extern int dup (int __fd) noexcept (true) ; extern int dup2 (int __fd, int __fd2) noexcept (true); extern int dup3 (int __fd, int __fd2, int __flags) noexcept (true); extern char **__environ; extern char **environ; extern int execve (const char *__path, char *const __argv[], char *const __envp[]) noexcept (true) __attribute__ ((__nonnull__ (1, 2))); extern int fexecve (int __fd, char *const __argv[], char *const __envp[]) noexcept (true) __attribute__ ((__nonnull__ (2))); extern int execv (const char *__path, char *const __argv[]) noexcept (true) __attribute__ ((__nonnull__ (1, 2))); extern int execle (const char *__path, const char *__arg, ...) noexcept (true) __attribute__ ((__nonnull__ (1, 2))); extern int execl (const char *__path, const char *__arg, ...) noexcept (true) __attribute__ ((__nonnull__ (1, 2))); extern int execvp (const char *__file, char *const __argv[]) noexcept (true) __attribute__ ((__nonnull__ (1, 2))); extern int execlp (const char *__file, const char *__arg, ...) noexcept (true) __attribute__ ((__nonnull__ (1, 2))); extern int execvpe (const char *__file, char *const __argv[], char *const __envp[]) noexcept (true) __attribute__ ((__nonnull__ (1, 2))); extern int nice (int __inc) noexcept (true) ; extern void _exit (int __status) __attribute__ ((__noreturn__)); # 1 "/usr/include/bits/confname.h" 1 3 4 # 24 "/usr/include/bits/confname.h" 3 4 enum { _PC_LINK_MAX, _PC_MAX_CANON, _PC_MAX_INPUT, _PC_NAME_MAX, _PC_PATH_MAX, _PC_PIPE_BUF, _PC_CHOWN_RESTRICTED, _PC_NO_TRUNC, _PC_VDISABLE, _PC_SYNC_IO, _PC_ASYNC_IO, _PC_PRIO_IO, _PC_SOCK_MAXBUF, _PC_FILESIZEBITS, _PC_REC_INCR_XFER_SIZE, _PC_REC_MAX_XFER_SIZE, _PC_REC_MIN_XFER_SIZE, _PC_REC_XFER_ALIGN, _PC_ALLOC_SIZE_MIN, _PC_SYMLINK_MAX, _PC_2_SYMLINKS }; enum { _SC_ARG_MAX, _SC_CHILD_MAX, _SC_CLK_TCK, _SC_NGROUPS_MAX, _SC_OPEN_MAX, _SC_STREAM_MAX, _SC_TZNAME_MAX, _SC_JOB_CONTROL, _SC_SAVED_IDS, _SC_REALTIME_SIGNALS, _SC_PRIORITY_SCHEDULING, _SC_TIMERS, _SC_ASYNCHRONOUS_IO, _SC_PRIORITIZED_IO, _SC_SYNCHRONIZED_IO, _SC_FSYNC, _SC_MAPPED_FILES, _SC_MEMLOCK, _SC_MEMLOCK_RANGE, _SC_MEMORY_PROTECTION, _SC_MESSAGE_PASSING, _SC_SEMAPHORES, _SC_SHARED_MEMORY_OBJECTS, _SC_AIO_LISTIO_MAX, _SC_AIO_MAX, _SC_AIO_PRIO_DELTA_MAX, _SC_DELAYTIMER_MAX, _SC_MQ_OPEN_MAX, _SC_MQ_PRIO_MAX, _SC_VERSION, _SC_PAGESIZE, _SC_RTSIG_MAX, _SC_SEM_NSEMS_MAX, _SC_SEM_VALUE_MAX, _SC_SIGQUEUE_MAX, _SC_TIMER_MAX, _SC_BC_BASE_MAX, _SC_BC_DIM_MAX, _SC_BC_SCALE_MAX, _SC_BC_STRING_MAX, _SC_COLL_WEIGHTS_MAX, _SC_EQUIV_CLASS_MAX, _SC_EXPR_NEST_MAX, _SC_LINE_MAX, _SC_RE_DUP_MAX, _SC_CHARCLASS_NAME_MAX, _SC_2_VERSION, _SC_2_C_BIND, _SC_2_C_DEV, _SC_2_FORT_DEV, _SC_2_FORT_RUN, _SC_2_SW_DEV, _SC_2_LOCALEDEF, _SC_PII, _SC_PII_XTI, _SC_PII_SOCKET, _SC_PII_INTERNET, _SC_PII_OSI, _SC_POLL, _SC_SELECT, _SC_UIO_MAXIOV, _SC_IOV_MAX = _SC_UIO_MAXIOV, _SC_PII_INTERNET_STREAM, _SC_PII_INTERNET_DGRAM, _SC_PII_OSI_COTS, _SC_PII_OSI_CLTS, _SC_PII_OSI_M, _SC_T_IOV_MAX, _SC_THREADS, _SC_THREAD_SAFE_FUNCTIONS, _SC_GETGR_R_SIZE_MAX, _SC_GETPW_R_SIZE_MAX, _SC_LOGIN_NAME_MAX, _SC_TTY_NAME_MAX, _SC_THREAD_DESTRUCTOR_ITERATIONS, _SC_THREAD_KEYS_MAX, _SC_THREAD_STACK_MIN, _SC_THREAD_THREADS_MAX, _SC_THREAD_ATTR_STACKADDR, _SC_THREAD_ATTR_STACKSIZE, _SC_THREAD_PRIORITY_SCHEDULING, _SC_THREAD_PRIO_INHERIT, _SC_THREAD_PRIO_PROTECT, _SC_THREAD_PROCESS_SHARED, _SC_NPROCESSORS_CONF, _SC_NPROCESSORS_ONLN, _SC_PHYS_PAGES, _SC_AVPHYS_PAGES, _SC_ATEXIT_MAX, _SC_PASS_MAX, _SC_XOPEN_VERSION, _SC_XOPEN_XCU_VERSION, _SC_XOPEN_UNIX, _SC_XOPEN_CRYPT, _SC_XOPEN_ENH_I18N, _SC_XOPEN_SHM, _SC_2_CHAR_TERM, _SC_2_C_VERSION, _SC_2_UPE, _SC_XOPEN_XPG2, _SC_XOPEN_XPG3, _SC_XOPEN_XPG4, _SC_CHAR_BIT, _SC_CHAR_MAX, _SC_CHAR_MIN, _SC_INT_MAX, _SC_INT_MIN, _SC_LONG_BIT, _SC_WORD_BIT, _SC_MB_LEN_MAX, _SC_NZERO, _SC_SSIZE_MAX, _SC_SCHAR_MAX, _SC_SCHAR_MIN, _SC_SHRT_MAX, _SC_SHRT_MIN, _SC_UCHAR_MAX, _SC_UINT_MAX, _SC_ULONG_MAX, _SC_USHRT_MAX, _SC_NL_ARGMAX, _SC_NL_LANGMAX, _SC_NL_MSGMAX, _SC_NL_NMAX, _SC_NL_SETMAX, _SC_NL_TEXTMAX, _SC_XBS5_ILP32_OFF32, _SC_XBS5_ILP32_OFFBIG, _SC_XBS5_LP64_OFF64, _SC_XBS5_LPBIG_OFFBIG, _SC_XOPEN_LEGACY, _SC_XOPEN_REALTIME, _SC_XOPEN_REALTIME_THREADS, _SC_ADVISORY_INFO, _SC_BARRIERS, _SC_BASE, _SC_C_LANG_SUPPORT, _SC_C_LANG_SUPPORT_R, _SC_CLOCK_SELECTION, _SC_CPUTIME, _SC_THREAD_CPUTIME, _SC_DEVICE_IO, _SC_DEVICE_SPECIFIC, _SC_DEVICE_SPECIFIC_R, _SC_FD_MGMT, _SC_FIFO, _SC_PIPE, _SC_FILE_ATTRIBUTES, _SC_FILE_LOCKING, _SC_FILE_SYSTEM, _SC_MONOTONIC_CLOCK, _SC_MULTI_PROCESS, _SC_SINGLE_PROCESS, _SC_NETWORKING, _SC_READER_WRITER_LOCKS, _SC_SPIN_LOCKS, _SC_REGEXP, _SC_REGEX_VERSION, _SC_SHELL, _SC_SIGNALS, _SC_SPAWN, _SC_SPORADIC_SERVER, _SC_THREAD_SPORADIC_SERVER, _SC_SYSTEM_DATABASE, _SC_SYSTEM_DATABASE_R, _SC_TIMEOUTS, _SC_TYPED_MEMORY_OBJECTS, _SC_USER_GROUPS, _SC_USER_GROUPS_R, _SC_2_PBS, _SC_2_PBS_ACCOUNTING, _SC_2_PBS_LOCATE, _SC_2_PBS_MESSAGE, _SC_2_PBS_TRACK, _SC_SYMLOOP_MAX, _SC_STREAMS, _SC_2_PBS_CHECKPOINT, _SC_V6_ILP32_OFF32, _SC_V6_ILP32_OFFBIG, _SC_V6_LP64_OFF64, _SC_V6_LPBIG_OFFBIG, _SC_HOST_NAME_MAX, _SC_TRACE, _SC_TRACE_EVENT_FILTER, _SC_TRACE_INHERIT, _SC_TRACE_LOG, _SC_LEVEL1_ICACHE_SIZE, _SC_LEVEL1_ICACHE_ASSOC, _SC_LEVEL1_ICACHE_LINESIZE, _SC_LEVEL1_DCACHE_SIZE, _SC_LEVEL1_DCACHE_ASSOC, _SC_LEVEL1_DCACHE_LINESIZE, _SC_LEVEL2_CACHE_SIZE, _SC_LEVEL2_CACHE_ASSOC, _SC_LEVEL2_CACHE_LINESIZE, _SC_LEVEL3_CACHE_SIZE, _SC_LEVEL3_CACHE_ASSOC, _SC_LEVEL3_CACHE_LINESIZE, _SC_LEVEL4_CACHE_SIZE, _SC_LEVEL4_CACHE_ASSOC, _SC_LEVEL4_CACHE_LINESIZE, _SC_IPV6 = _SC_LEVEL1_ICACHE_SIZE + 50, _SC_RAW_SOCKETS, _SC_V7_ILP32_OFF32, _SC_V7_ILP32_OFFBIG, _SC_V7_LP64_OFF64, _SC_V7_LPBIG_OFFBIG, _SC_SS_REPL_MAX, _SC_TRACE_EVENT_NAME_MAX, _SC_TRACE_NAME_MAX, _SC_TRACE_SYS_MAX, _SC_TRACE_USER_EVENT_MAX, _SC_XOPEN_STREAMS, _SC_THREAD_ROBUST_PRIO_INHERIT, _SC_THREAD_ROBUST_PRIO_PROTECT, _SC_MINSIGSTKSZ, _SC_SIGSTKSZ }; enum { _CS_PATH, _CS_V6_WIDTH_RESTRICTED_ENVS, _CS_GNU_LIBC_VERSION, _CS_GNU_LIBPTHREAD_VERSION, _CS_V5_WIDTH_RESTRICTED_ENVS, _CS_V7_WIDTH_RESTRICTED_ENVS, _CS_LFS_CFLAGS = 1000, _CS_LFS_LDFLAGS, _CS_LFS_LIBS, _CS_LFS_LINTFLAGS, _CS_LFS64_CFLAGS, _CS_LFS64_LDFLAGS, _CS_LFS64_LIBS, _CS_LFS64_LINTFLAGS, _CS_XBS5_ILP32_OFF32_CFLAGS = 1100, _CS_XBS5_ILP32_OFF32_LDFLAGS, _CS_XBS5_ILP32_OFF32_LIBS, _CS_XBS5_ILP32_OFF32_LINTFLAGS, _CS_XBS5_ILP32_OFFBIG_CFLAGS, _CS_XBS5_ILP32_OFFBIG_LDFLAGS, _CS_XBS5_ILP32_OFFBIG_LIBS, _CS_XBS5_ILP32_OFFBIG_LINTFLAGS, _CS_XBS5_LP64_OFF64_CFLAGS, _CS_XBS5_LP64_OFF64_LDFLAGS, _CS_XBS5_LP64_OFF64_LIBS, _CS_XBS5_LP64_OFF64_LINTFLAGS, _CS_XBS5_LPBIG_OFFBIG_CFLAGS, _CS_XBS5_LPBIG_OFFBIG_LDFLAGS, _CS_XBS5_LPBIG_OFFBIG_LIBS, _CS_XBS5_LPBIG_OFFBIG_LINTFLAGS, _CS_POSIX_V6_ILP32_OFF32_CFLAGS, _CS_POSIX_V6_ILP32_OFF32_LDFLAGS, _CS_POSIX_V6_ILP32_OFF32_LIBS, _CS_POSIX_V6_ILP32_OFF32_LINTFLAGS, _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS, _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS, _CS_POSIX_V6_ILP32_OFFBIG_LIBS, _CS_POSIX_V6_ILP32_OFFBIG_LINTFLAGS, _CS_POSIX_V6_LP64_OFF64_CFLAGS, _CS_POSIX_V6_LP64_OFF64_LDFLAGS, _CS_POSIX_V6_LP64_OFF64_LIBS, _CS_POSIX_V6_LP64_OFF64_LINTFLAGS, _CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS, _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS, _CS_POSIX_V6_LPBIG_OFFBIG_LIBS, _CS_POSIX_V6_LPBIG_OFFBIG_LINTFLAGS, _CS_POSIX_V7_ILP32_OFF32_CFLAGS, _CS_POSIX_V7_ILP32_OFF32_LDFLAGS, _CS_POSIX_V7_ILP32_OFF32_LIBS, _CS_POSIX_V7_ILP32_OFF32_LINTFLAGS, _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS, _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS, _CS_POSIX_V7_ILP32_OFFBIG_LIBS, _CS_POSIX_V7_ILP32_OFFBIG_LINTFLAGS, _CS_POSIX_V7_LP64_OFF64_CFLAGS, _CS_POSIX_V7_LP64_OFF64_LDFLAGS, _CS_POSIX_V7_LP64_OFF64_LIBS, _CS_POSIX_V7_LP64_OFF64_LINTFLAGS, _CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS, _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS, _CS_POSIX_V7_LPBIG_OFFBIG_LIBS, _CS_POSIX_V7_LPBIG_OFFBIG_LINTFLAGS, _CS_V6_ENV, _CS_V7_ENV }; # 631 "/usr/include/unistd.h" 2 3 4 extern long int pathconf (const char *__path, int __name) noexcept (true) __attribute__ ((__nonnull__ (1))); extern long int fpathconf (int __fd, int __name) noexcept (true); extern long int sysconf (int __name) noexcept (true); extern size_t confstr (int __name, char *__buf, size_t __len) noexcept (true) ; extern __pid_t getpid (void) noexcept (true); extern __pid_t getppid (void) noexcept (true); extern __pid_t getpgrp (void) noexcept (true); extern __pid_t __getpgid (__pid_t __pid) noexcept (true); extern __pid_t getpgid (__pid_t __pid) noexcept (true); extern int setpgid (__pid_t __pid, __pid_t __pgid) noexcept (true); # 682 "/usr/include/unistd.h" 3 4 extern int setpgrp (void) noexcept (true); extern __pid_t setsid (void) noexcept (true); extern __pid_t getsid (__pid_t __pid) noexcept (true); extern __uid_t getuid (void) noexcept (true); extern __uid_t geteuid (void) noexcept (true); extern __gid_t getgid (void) noexcept (true); extern __gid_t getegid (void) noexcept (true); extern int getgroups (int __size, __gid_t __list[]) noexcept (true) ; extern int group_member (__gid_t __gid) noexcept (true); extern int setuid (__uid_t __uid) noexcept (true) ; extern int setreuid (__uid_t __ruid, __uid_t __euid) noexcept (true) ; extern int seteuid (__uid_t __uid) noexcept (true) ; extern int setgid (__gid_t __gid) noexcept (true) ; extern int setregid (__gid_t __rgid, __gid_t __egid) noexcept (true) ; extern int setegid (__gid_t __gid) noexcept (true) ; extern int getresuid (__uid_t *__ruid, __uid_t *__euid, __uid_t *__suid) noexcept (true); extern int getresgid (__gid_t *__rgid, __gid_t *__egid, __gid_t *__sgid) noexcept (true); extern int setresuid (__uid_t __ruid, __uid_t __euid, __uid_t __suid) noexcept (true) ; extern int setresgid (__gid_t __rgid, __gid_t __egid, __gid_t __sgid) noexcept (true) ; extern __pid_t fork (void) noexcept (true); extern __pid_t vfork (void) noexcept (true); extern __pid_t _Fork (void) noexcept (true); extern char *ttyname (int __fd) noexcept (true); extern int ttyname_r (int __fd, char *__buf, size_t __buflen) noexcept (true) __attribute__ ((__nonnull__ (2))) ; extern int isatty (int __fd) noexcept (true); extern int ttyslot (void) noexcept (true); extern int link (const char *__from, const char *__to) noexcept (true) __attribute__ ((__nonnull__ (1, 2))) ; extern int linkat (int __fromfd, const char *__from, int __tofd, const char *__to, int __flags) noexcept (true) __attribute__ ((__nonnull__ (2, 4))) ; extern int symlink (const char *__from, const char *__to) noexcept (true) __attribute__ ((__nonnull__ (1, 2))) ; extern ssize_t readlink (const char *__restrict __path, char *__restrict __buf, size_t __len) noexcept (true) __attribute__ ((__nonnull__ (1, 2))) ; extern int symlinkat (const char *__from, int __tofd, const char *__to) noexcept (true) __attribute__ ((__nonnull__ (1, 3))) ; extern ssize_t readlinkat (int __fd, const char *__restrict __path, char *__restrict __buf, size_t __len) noexcept (true) __attribute__ ((__nonnull__ (2, 3))) ; extern int unlink (const char *__name) noexcept (true) __attribute__ ((__nonnull__ (1))); extern int unlinkat (int __fd, const char *__name, int __flag) noexcept (true) __attribute__ ((__nonnull__ (2))); extern int rmdir (const char *__path) noexcept (true) __attribute__ ((__nonnull__ (1))); extern __pid_t tcgetpgrp (int __fd) noexcept (true); extern int tcsetpgrp (int __fd, __pid_t __pgrp_id) noexcept (true); extern char *getlogin (void); extern int getlogin_r (char *__name, size_t __name_len) __attribute__ ((__nonnull__ (1))) ; extern int setlogin (const char *__name) noexcept (true) __attribute__ ((__nonnull__ (1))); # 1 "/usr/include/bits/getopt_posix.h" 1 3 4 # 27 "/usr/include/bits/getopt_posix.h" 3 4 # 1 "/usr/include/bits/getopt_core.h" 1 3 4 # 28 "/usr/include/bits/getopt_core.h" 3 4 extern "C" { extern char *optarg; # 50 "/usr/include/bits/getopt_core.h" 3 4 extern int optind; extern int opterr; extern int optopt; # 91 "/usr/include/bits/getopt_core.h" 3 4 extern int getopt (int ___argc, char *const *___argv, const char *__shortopts) noexcept (true) __attribute__ ((__nonnull__ (2, 3))); } # 28 "/usr/include/bits/getopt_posix.h" 2 3 4 extern "C" { # 49 "/usr/include/bits/getopt_posix.h" 3 4 } # 904 "/usr/include/unistd.h" 2 3 4 extern int gethostname (char *__name, size_t __len) noexcept (true) __attribute__ ((__nonnull__ (1))) ; extern int sethostname (const char *__name, size_t __len) noexcept (true) __attribute__ ((__nonnull__ (1))) ; extern int sethostid (long int __id) noexcept (true) ; extern int getdomainname (char *__name, size_t __len) noexcept (true) __attribute__ ((__nonnull__ (1))) ; extern int setdomainname (const char *__name, size_t __len) noexcept (true) __attribute__ ((__nonnull__ (1))) ; extern int vhangup (void) noexcept (true); extern int revoke (const char *__file) noexcept (true) __attribute__ ((__nonnull__ (1))) ; extern int profil (unsigned short int *__sample_buffer, size_t __size, size_t __offset, unsigned int __scale) noexcept (true) __attribute__ ((__nonnull__ (1))); extern int acct (const char *__name) noexcept (true); extern char *getusershell (void) noexcept (true); extern void endusershell (void) noexcept (true); extern void setusershell (void) noexcept (true); extern int daemon (int __nochdir, int __noclose) noexcept (true) ; extern int chroot (const char *__path) noexcept (true) __attribute__ ((__nonnull__ (1))) ; extern char *getpass (const char *__prompt) __attribute__ ((__nonnull__ (1))); extern int fsync (int __fd); extern int syncfs (int __fd) noexcept (true); extern long int gethostid (void); extern void sync (void) noexcept (true); extern int getpagesize (void) noexcept (true) __attribute__ ((__const__)); extern int getdtablesize (void) noexcept (true); # 1026 "/usr/include/unistd.h" 3 4 extern int truncate (const char *__file, __off_t __length) noexcept (true) __attribute__ ((__nonnull__ (1))) ; # 1038 "/usr/include/unistd.h" 3 4 extern int truncate64 (const char *__file, __off64_t __length) noexcept (true) __attribute__ ((__nonnull__ (1))) ; # 1049 "/usr/include/unistd.h" 3 4 extern int ftruncate (int __fd, __off_t __length) noexcept (true) ; # 1059 "/usr/include/unistd.h" 3 4 extern int ftruncate64 (int __fd, __off64_t __length) noexcept (true) ; # 1070 "/usr/include/unistd.h" 3 4 extern int brk (void *__addr) noexcept (true) ; extern void *sbrk (intptr_t __delta) noexcept (true); # 1091 "/usr/include/unistd.h" 3 4 extern long int syscall (long int __sysno, ...) noexcept (true); # 1114 "/usr/include/unistd.h" 3 4 extern int lockf (int __fd, int __cmd, __off_t __len) ; # 1124 "/usr/include/unistd.h" 3 4 extern int lockf64 (int __fd, int __cmd, __off64_t __len) ; # 1142 "/usr/include/unistd.h" 3 4 ssize_t copy_file_range (int __infd, __off64_t *__pinoff, int __outfd, __off64_t *__poutoff, size_t __length, unsigned int __flags); extern int fdatasync (int __fildes); # 1162 "/usr/include/unistd.h" 3 4 extern char *crypt (const char *__key, const char *__salt) noexcept (true) __attribute__ ((__nonnull__ (1, 2))); extern void swab (const void *__restrict __from, void *__restrict __to, ssize_t __n) noexcept (true) __attribute__ ((__nonnull__ (1, 2))) ; # 1201 "/usr/include/unistd.h" 3 4 int getentropy (void *__buffer, size_t __length) ; # 1211 "/usr/include/unistd.h" 3 4 extern int close_range (unsigned int __fd, unsigned int __max_fd, int __flags) noexcept (true); # 1221 "/usr/include/unistd.h" 3 4 # 1 "/usr/include/bits/unistd_ext.h" 1 3 4 # 34 "/usr/include/bits/unistd_ext.h" 3 4 extern __pid_t gettid (void) noexcept (true); # 1 "/usr/include/linux/close_range.h" 1 3 4 # 39 "/usr/include/bits/unistd_ext.h" 2 3 4 # 1222 "/usr/include/unistd.h" 2 3 4 } # 79 "/usr/include/boost/config/stdlib/libstdcpp3.hpp" 2 3 4 # 49 "/usr/include/boost/config.hpp" 2 3 4 # 1 "/usr/include/boost/config/detail/select_platform_config.hpp" 1 3 4 # 54 "/usr/include/boost/config.hpp" 2 3 4 # 1 "/usr/include/boost/config/platform/linux.hpp" 1 3 4 # 15 "/usr/include/boost/config/platform/linux.hpp" 3 4 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/cstdlib" 1 3 4 # 40 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/cstdlib" 3 # 79 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/cstdlib" 3 # 1 "/usr/include/stdlib.h" 1 3 4 # 26 "/usr/include/stdlib.h" 3 4 # 1 "/usr/include/bits/libc-header-start.h" 1 3 4 # 27 "/usr/include/stdlib.h" 2 3 4 # 1 "/usr/bin/../lib/clang/18/include/stddef.h" 1 3 4 # 77 "/usr/bin/../lib/clang/18/include/stddef.h" 3 4 # 1 "/usr/bin/../lib/clang/18/include/__stddef_size_t.h" 1 3 4 # 18 "/usr/bin/../lib/clang/18/include/__stddef_size_t.h" 3 4 typedef long unsigned int size_t; # 78 "/usr/bin/../lib/clang/18/include/stddef.h" 2 3 4 # 87 "/usr/bin/../lib/clang/18/include/stddef.h" 3 4 # 1 "/usr/bin/../lib/clang/18/include/__stddef_wchar_t.h" 1 3 4 # 88 "/usr/bin/../lib/clang/18/include/stddef.h" 2 3 4 # 1 "/usr/bin/../lib/clang/18/include/__stddef_null.h" 1 3 4 # 93 "/usr/bin/../lib/clang/18/include/stddef.h" 2 3 4 # 33 "/usr/include/stdlib.h" 2 3 4 extern "C" { # 1 "/usr/include/bits/waitflags.h" 1 3 4 # 41 "/usr/include/stdlib.h" 2 3 4 # 1 "/usr/include/bits/waitstatus.h" 1 3 4 # 42 "/usr/include/stdlib.h" 2 3 4 # 56 "/usr/include/stdlib.h" 3 4 # 1 "/usr/include/bits/floatn.h" 1 3 4 # 119 "/usr/include/bits/floatn.h" 3 4 # 1 "/usr/include/bits/floatn-common.h" 1 3 4 # 24 "/usr/include/bits/floatn-common.h" 3 4 # 1 "/usr/include/bits/long-double.h" 1 3 4 # 25 "/usr/include/bits/floatn-common.h" 2 3 4 # 214 "/usr/include/bits/floatn-common.h" 3 4 typedef float _Float32; # 251 "/usr/include/bits/floatn-common.h" 3 4 typedef double _Float64; # 268 "/usr/include/bits/floatn-common.h" 3 4 typedef double _Float32x; # 285 "/usr/include/bits/floatn-common.h" 3 4 typedef long double _Float64x; # 120 "/usr/include/bits/floatn.h" 2 3 4 # 57 "/usr/include/stdlib.h" 2 3 4 typedef struct { int quot; int rem; } div_t; typedef struct { long int quot; long int rem; } ldiv_t; __extension__ typedef struct { long long int quot; long long int rem; } lldiv_t; # 98 "/usr/include/stdlib.h" 3 4 extern size_t __ctype_get_mb_cur_max (void) noexcept (true) ; extern double atof (const char *__nptr) noexcept (true) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ; extern int atoi (const char *__nptr) noexcept (true) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ; extern long int atol (const char *__nptr) noexcept (true) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ; __extension__ extern long long int atoll (const char *__nptr) noexcept (true) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ; extern double strtod (const char *__restrict __nptr, char **__restrict __endptr) noexcept (true) __attribute__ ((__nonnull__ (1))); extern float strtof (const char *__restrict __nptr, char **__restrict __endptr) noexcept (true) __attribute__ ((__nonnull__ (1))); extern long double strtold (const char *__restrict __nptr, char **__restrict __endptr) noexcept (true) __attribute__ ((__nonnull__ (1))); # 141 "/usr/include/stdlib.h" 3 4 extern _Float32 strtof32 (const char *__restrict __nptr, char **__restrict __endptr) noexcept (true) __attribute__ ((__nonnull__ (1))); extern _Float64 strtof64 (const char *__restrict __nptr, char **__restrict __endptr) noexcept (true) __attribute__ ((__nonnull__ (1))); # 159 "/usr/include/stdlib.h" 3 4 extern _Float32x strtof32x (const char *__restrict __nptr, char **__restrict __endptr) noexcept (true) __attribute__ ((__nonnull__ (1))); extern _Float64x strtof64x (const char *__restrict __nptr, char **__restrict __endptr) noexcept (true) __attribute__ ((__nonnull__ (1))); # 177 "/usr/include/stdlib.h" 3 4 extern long int strtol (const char *__restrict __nptr, char **__restrict __endptr, int __base) noexcept (true) __attribute__ ((__nonnull__ (1))); extern unsigned long int strtoul (const char *__restrict __nptr, char **__restrict __endptr, int __base) noexcept (true) __attribute__ ((__nonnull__ (1))); __extension__ extern long long int strtoq (const char *__restrict __nptr, char **__restrict __endptr, int __base) noexcept (true) __attribute__ ((__nonnull__ (1))); __extension__ extern unsigned long long int strtouq (const char *__restrict __nptr, char **__restrict __endptr, int __base) noexcept (true) __attribute__ ((__nonnull__ (1))); __extension__ extern long long int strtoll (const char *__restrict __nptr, char **__restrict __endptr, int __base) noexcept (true) __attribute__ ((__nonnull__ (1))); __extension__ extern unsigned long long int strtoull (const char *__restrict __nptr, char **__restrict __endptr, int __base) noexcept (true) __attribute__ ((__nonnull__ (1))); extern long int strtol (const char *__restrict __nptr, char **__restrict __endptr, int __base) noexcept (true) __asm__ ("" "__isoc23_strtol") __attribute__ ((__nonnull__ (1))); extern unsigned long int strtoul (const char *__restrict __nptr, char **__restrict __endptr, int __base) noexcept (true) __asm__ ("" "__isoc23_strtoul") __attribute__ ((__nonnull__ (1))); __extension__ extern long long int strtoq (const char *__restrict __nptr, char **__restrict __endptr, int __base) noexcept (true) __asm__ ("" "__isoc23_strtoll") __attribute__ ((__nonnull__ (1))); __extension__ extern unsigned long long int strtouq (const char *__restrict __nptr, char **__restrict __endptr, int __base) noexcept (true) __asm__ ("" "__isoc23_strtoull") __attribute__ ((__nonnull__ (1))); __extension__ extern long long int strtoll (const char *__restrict __nptr, char **__restrict __endptr, int __base) noexcept (true) __asm__ ("" "__isoc23_strtoll") __attribute__ ((__nonnull__ (1))); __extension__ extern unsigned long long int strtoull (const char *__restrict __nptr, char **__restrict __endptr, int __base) noexcept (true) __asm__ ("" "__isoc23_strtoull") __attribute__ ((__nonnull__ (1))); # 278 "/usr/include/stdlib.h" 3 4 extern int strfromd (char *__dest, size_t __size, const char *__format, double __f) noexcept (true) __attribute__ ((__nonnull__ (3))); extern int strfromf (char *__dest, size_t __size, const char *__format, float __f) noexcept (true) __attribute__ ((__nonnull__ (3))); extern int strfroml (char *__dest, size_t __size, const char *__format, long double __f) noexcept (true) __attribute__ ((__nonnull__ (3))); # 298 "/usr/include/stdlib.h" 3 4 extern int strfromf32 (char *__dest, size_t __size, const char * __format, _Float32 __f) noexcept (true) __attribute__ ((__nonnull__ (3))); extern int strfromf64 (char *__dest, size_t __size, const char * __format, _Float64 __f) noexcept (true) __attribute__ ((__nonnull__ (3))); # 316 "/usr/include/stdlib.h" 3 4 extern int strfromf32x (char *__dest, size_t __size, const char * __format, _Float32x __f) noexcept (true) __attribute__ ((__nonnull__ (3))); extern int strfromf64x (char *__dest, size_t __size, const char * __format, _Float64x __f) noexcept (true) __attribute__ ((__nonnull__ (3))); # 338 "/usr/include/stdlib.h" 3 4 # 1 "/usr/include/bits/types/locale_t.h" 1 3 4 # 22 "/usr/include/bits/types/locale_t.h" 3 4 # 1 "/usr/include/bits/types/__locale_t.h" 1 3 4 # 27 "/usr/include/bits/types/__locale_t.h" 3 4 struct __locale_struct { struct __locale_data *__locales[13]; const unsigned short int *__ctype_b; const int *__ctype_tolower; const int *__ctype_toupper; const char *__names[13]; }; typedef struct __locale_struct *__locale_t; # 23 "/usr/include/bits/types/locale_t.h" 2 3 4 typedef __locale_t locale_t; # 339 "/usr/include/stdlib.h" 2 3 4 extern long int strtol_l (const char *__restrict __nptr, char **__restrict __endptr, int __base, locale_t __loc) noexcept (true) __attribute__ ((__nonnull__ (1, 4))); extern unsigned long int strtoul_l (const char *__restrict __nptr, char **__restrict __endptr, int __base, locale_t __loc) noexcept (true) __attribute__ ((__nonnull__ (1, 4))); __extension__ extern long long int strtoll_l (const char *__restrict __nptr, char **__restrict __endptr, int __base, locale_t __loc) noexcept (true) __attribute__ ((__nonnull__ (1, 4))); __extension__ extern unsigned long long int strtoull_l (const char *__restrict __nptr, char **__restrict __endptr, int __base, locale_t __loc) noexcept (true) __attribute__ ((__nonnull__ (1, 4))); extern long int strtol_l (const char *__restrict __nptr, char **__restrict __endptr, int __base, locale_t __loc) noexcept (true) __asm__ ("" "__isoc23_strtol_l") __attribute__ ((__nonnull__ (1, 4))); extern unsigned long int strtoul_l (const char *__restrict __nptr, char **__restrict __endptr, int __base, locale_t __loc) noexcept (true) __asm__ ("" "__isoc23_strtoul_l") __attribute__ ((__nonnull__ (1, 4))); __extension__ extern long long int strtoll_l (const char *__restrict __nptr, char **__restrict __endptr, int __base, locale_t __loc) noexcept (true) __asm__ ("" "__isoc23_strtoll_l") __attribute__ ((__nonnull__ (1, 4))); __extension__ extern unsigned long long int strtoull_l (const char *__restrict __nptr, char **__restrict __endptr, int __base, locale_t __loc) noexcept (true) __asm__ ("" "__isoc23_strtoull_l") __attribute__ ((__nonnull__ (1, 4))); # 415 "/usr/include/stdlib.h" 3 4 extern double strtod_l (const char *__restrict __nptr, char **__restrict __endptr, locale_t __loc) noexcept (true) __attribute__ ((__nonnull__ (1, 3))); extern float strtof_l (const char *__restrict __nptr, char **__restrict __endptr, locale_t __loc) noexcept (true) __attribute__ ((__nonnull__ (1, 3))); extern long double strtold_l (const char *__restrict __nptr, char **__restrict __endptr, locale_t __loc) noexcept (true) __attribute__ ((__nonnull__ (1, 3))); # 436 "/usr/include/stdlib.h" 3 4 extern _Float32 strtof32_l (const char *__restrict __nptr, char **__restrict __endptr, locale_t __loc) noexcept (true) __attribute__ ((__nonnull__ (1, 3))); extern _Float64 strtof64_l (const char *__restrict __nptr, char **__restrict __endptr, locale_t __loc) noexcept (true) __attribute__ ((__nonnull__ (1, 3))); # 457 "/usr/include/stdlib.h" 3 4 extern _Float32x strtof32x_l (const char *__restrict __nptr, char **__restrict __endptr, locale_t __loc) noexcept (true) __attribute__ ((__nonnull__ (1, 3))); extern _Float64x strtof64x_l (const char *__restrict __nptr, char **__restrict __endptr, locale_t __loc) noexcept (true) __attribute__ ((__nonnull__ (1, 3))); # 480 "/usr/include/stdlib.h" 3 4 extern __inline __attribute__ ((__gnu_inline__)) int atoi (const char *__nptr) noexcept (true) { return (int) strtol (__nptr, (char **) __null, 10); } extern __inline __attribute__ ((__gnu_inline__)) long int atol (const char *__nptr) noexcept (true) { return strtol (__nptr, (char **) __null, 10); } __extension__ extern __inline __attribute__ ((__gnu_inline__)) long long int atoll (const char *__nptr) noexcept (true) { return strtoll (__nptr, (char **) __null, 10); } # 505 "/usr/include/stdlib.h" 3 4 extern char *l64a (long int __n) noexcept (true) ; extern long int a64l (const char *__s) noexcept (true) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ; # 1 "/usr/include/sys/types.h" 1 3 4 # 27 "/usr/include/sys/types.h" 3 4 extern "C" { typedef __u_char u_char; typedef __u_short u_short; typedef __u_int u_int; typedef __u_long u_long; typedef __quad_t quad_t; typedef __u_quad_t u_quad_t; typedef __fsid_t fsid_t; typedef __loff_t loff_t; typedef __ino_t ino_t; typedef __ino64_t ino64_t; typedef __dev_t dev_t; # 69 "/usr/include/sys/types.h" 3 4 typedef __mode_t mode_t; typedef __nlink_t nlink_t; # 103 "/usr/include/sys/types.h" 3 4 typedef __id_t id_t; # 114 "/usr/include/sys/types.h" 3 4 typedef __daddr_t daddr_t; typedef __caddr_t caddr_t; typedef __key_t key_t; # 1 "/usr/include/bits/types/clock_t.h" 1 3 4 typedef __clock_t clock_t; # 127 "/usr/include/sys/types.h" 2 3 4 # 1 "/usr/include/bits/types/clockid_t.h" 1 3 4 typedef __clockid_t clockid_t; # 129 "/usr/include/sys/types.h" 2 3 4 # 1 "/usr/include/bits/types/time_t.h" 1 3 4 # 10 "/usr/include/bits/types/time_t.h" 3 4 typedef __time_t time_t; # 130 "/usr/include/sys/types.h" 2 3 4 # 1 "/usr/include/bits/types/timer_t.h" 1 3 4 typedef __timer_t timer_t; # 131 "/usr/include/sys/types.h" 2 3 4 typedef __suseconds_t suseconds_t; # 1 "/usr/bin/../lib/clang/18/include/stddef.h" 1 3 4 # 77 "/usr/bin/../lib/clang/18/include/stddef.h" 3 4 # 1 "/usr/bin/../lib/clang/18/include/__stddef_size_t.h" 1 3 4 # 18 "/usr/bin/../lib/clang/18/include/__stddef_size_t.h" 3 4 typedef long unsigned int size_t; # 78 "/usr/bin/../lib/clang/18/include/stddef.h" 2 3 4 # 145 "/usr/include/sys/types.h" 2 3 4 typedef unsigned long int ulong; typedef unsigned short int ushort; typedef unsigned int uint; # 1 "/usr/include/bits/stdint-intn.h" 1 3 4 # 24 "/usr/include/bits/stdint-intn.h" 3 4 typedef __int8_t int8_t; typedef __int16_t int16_t; typedef __int32_t int32_t; typedef __int64_t int64_t; # 156 "/usr/include/sys/types.h" 2 3 4 typedef __uint8_t u_int8_t; typedef __uint16_t u_int16_t; typedef __uint32_t u_int32_t; typedef __uint64_t u_int64_t; typedef int register_t __attribute__ ((__mode__ (__word__))); # 176 "/usr/include/sys/types.h" 3 4 # 1 "/usr/include/endian.h" 1 3 4 # 24 "/usr/include/endian.h" 3 4 # 1 "/usr/include/bits/endian.h" 1 3 4 # 35 "/usr/include/bits/endian.h" 3 4 # 1 "/usr/include/bits/endianness.h" 1 3 4 # 36 "/usr/include/bits/endian.h" 2 3 4 # 25 "/usr/include/endian.h" 2 3 4 # 35 "/usr/include/endian.h" 3 4 # 1 "/usr/include/bits/byteswap.h" 1 3 4 # 33 "/usr/include/bits/byteswap.h" 3 4 static __inline __uint16_t __bswap_16 (__uint16_t __bsx) { return ((__uint16_t) ((((__bsx) >> 8) & 0xff) | (((__bsx) & 0xff) << 8))); } static __inline __uint32_t __bswap_32 (__uint32_t __bsx) { return ((((__bsx) & 0xff000000u) >> 24) | (((__bsx) & 0x00ff0000u) >> 8) | (((__bsx) & 0x0000ff00u) << 8) | (((__bsx) & 0x000000ffu) << 24)); } # 69 "/usr/include/bits/byteswap.h" 3 4 __extension__ static __inline __uint64_t __bswap_64 (__uint64_t __bsx) { return ((((__bsx) & 0xff00000000000000ull) >> 56) | (((__bsx) & 0x00ff000000000000ull) >> 40) | (((__bsx) & 0x0000ff0000000000ull) >> 24) | (((__bsx) & 0x000000ff00000000ull) >> 8) | (((__bsx) & 0x00000000ff000000ull) << 8) | (((__bsx) & 0x0000000000ff0000ull) << 24) | (((__bsx) & 0x000000000000ff00ull) << 40) | (((__bsx) & 0x00000000000000ffull) << 56)); } # 36 "/usr/include/endian.h" 2 3 4 # 1 "/usr/include/bits/uintn-identity.h" 1 3 4 # 32 "/usr/include/bits/uintn-identity.h" 3 4 static __inline __uint16_t __uint16_identity (__uint16_t __x) { return __x; } static __inline __uint32_t __uint32_identity (__uint32_t __x) { return __x; } static __inline __uint64_t __uint64_identity (__uint64_t __x) { return __x; } # 37 "/usr/include/endian.h" 2 3 4 # 177 "/usr/include/sys/types.h" 2 3 4 # 1 "/usr/include/sys/select.h" 1 3 4 # 30 "/usr/include/sys/select.h" 3 4 # 1 "/usr/include/bits/select.h" 1 3 4 # 31 "/usr/include/sys/select.h" 2 3 4 # 1 "/usr/include/bits/types/sigset_t.h" 1 3 4 # 1 "/usr/include/bits/types/__sigset_t.h" 1 3 4 typedef struct { unsigned long int __val[(1024 / (8 * sizeof (unsigned long int)))]; } __sigset_t; # 5 "/usr/include/bits/types/sigset_t.h" 2 3 4 typedef __sigset_t sigset_t; # 34 "/usr/include/sys/select.h" 2 3 4 # 1 "/usr/include/bits/types/struct_timeval.h" 1 3 4 struct timeval { __time_t tv_sec; __suseconds_t tv_usec; }; # 38 "/usr/include/sys/select.h" 2 3 4 # 1 "/usr/include/bits/types/struct_timespec.h" 1 3 4 # 11 "/usr/include/bits/types/struct_timespec.h" 3 4 struct timespec { __time_t tv_sec; __syscall_slong_t tv_nsec; # 31 "/usr/include/bits/types/struct_timespec.h" 3 4 }; # 40 "/usr/include/sys/select.h" 2 3 4 # 49 "/usr/include/sys/select.h" 3 4 typedef long int __fd_mask; # 59 "/usr/include/sys/select.h" 3 4 typedef struct { __fd_mask fds_bits[1024 / (8 * (int) sizeof (__fd_mask))]; } fd_set; typedef __fd_mask fd_mask; # 91 "/usr/include/sys/select.h" 3 4 extern "C" { # 102 "/usr/include/sys/select.h" 3 4 extern int select (int __nfds, fd_set *__restrict __readfds, fd_set *__restrict __writefds, fd_set *__restrict __exceptfds, struct timeval *__restrict __timeout); # 127 "/usr/include/sys/select.h" 3 4 extern int pselect (int __nfds, fd_set *__restrict __readfds, fd_set *__restrict __writefds, fd_set *__restrict __exceptfds, const struct timespec *__restrict __timeout, const __sigset_t *__restrict __sigmask); # 153 "/usr/include/sys/select.h" 3 4 } # 180 "/usr/include/sys/types.h" 2 3 4 typedef __blksize_t blksize_t; typedef __blkcnt_t blkcnt_t; typedef __fsblkcnt_t fsblkcnt_t; typedef __fsfilcnt_t fsfilcnt_t; # 219 "/usr/include/sys/types.h" 3 4 typedef __blkcnt64_t blkcnt64_t; typedef __fsblkcnt64_t fsblkcnt64_t; typedef __fsfilcnt64_t fsfilcnt64_t; # 1 "/usr/include/bits/pthreadtypes.h" 1 3 4 # 23 "/usr/include/bits/pthreadtypes.h" 3 4 # 1 "/usr/include/bits/thread-shared-types.h" 1 3 4 # 44 "/usr/include/bits/thread-shared-types.h" 3 4 # 1 "/usr/include/bits/pthreadtypes-arch.h" 1 3 4 # 21 "/usr/include/bits/pthreadtypes-arch.h" 3 4 # 1 "/usr/include/bits/wordsize.h" 1 3 4 # 22 "/usr/include/bits/pthreadtypes-arch.h" 2 3 4 # 45 "/usr/include/bits/thread-shared-types.h" 2 3 4 # 1 "/usr/include/bits/atomic_wide_counter.h" 1 3 4 # 25 "/usr/include/bits/atomic_wide_counter.h" 3 4 typedef union { __extension__ unsigned long long int __value64; struct { unsigned int __low; unsigned int __high; } __value32; } __atomic_wide_counter; # 47 "/usr/include/bits/thread-shared-types.h" 2 3 4 typedef struct __pthread_internal_list { struct __pthread_internal_list *__prev; struct __pthread_internal_list *__next; } __pthread_list_t; typedef struct __pthread_internal_slist { struct __pthread_internal_slist *__next; } __pthread_slist_t; # 76 "/usr/include/bits/thread-shared-types.h" 3 4 # 1 "/usr/include/bits/struct_mutex.h" 1 3 4 # 22 "/usr/include/bits/struct_mutex.h" 3 4 struct __pthread_mutex_s { int __lock; unsigned int __count; int __owner; unsigned int __nusers; int __kind; short __spins; short __elision; __pthread_list_t __list; # 53 "/usr/include/bits/struct_mutex.h" 3 4 }; # 77 "/usr/include/bits/thread-shared-types.h" 2 3 4 # 89 "/usr/include/bits/thread-shared-types.h" 3 4 # 1 "/usr/include/bits/struct_rwlock.h" 1 3 4 # 23 "/usr/include/bits/struct_rwlock.h" 3 4 struct __pthread_rwlock_arch_t { unsigned int __readers; unsigned int __writers; unsigned int __wrphase_futex; unsigned int __writers_futex; unsigned int __pad3; unsigned int __pad4; int __cur_writer; int __shared; signed char __rwelision; unsigned char __pad1[7]; unsigned long int __pad2; unsigned int __flags; # 55 "/usr/include/bits/struct_rwlock.h" 3 4 }; # 90 "/usr/include/bits/thread-shared-types.h" 2 3 4 struct __pthread_cond_s { __atomic_wide_counter __wseq; __atomic_wide_counter __g1_start; unsigned int __g_refs[2] ; unsigned int __g_size[2]; unsigned int __g1_orig_size; unsigned int __wrefs; unsigned int __g_signals[2]; }; typedef unsigned int __tss_t; typedef unsigned long int __thrd_t; typedef struct { int __data ; } __once_flag; # 24 "/usr/include/bits/pthreadtypes.h" 2 3 4 typedef unsigned long int pthread_t; typedef union { char __size[4]; int __align; } pthread_mutexattr_t; typedef union { char __size[4]; int __align; } pthread_condattr_t; typedef unsigned int pthread_key_t; typedef int pthread_once_t; union pthread_attr_t { char __size[56]; long int __align; }; typedef union pthread_attr_t pthread_attr_t; typedef union { struct __pthread_mutex_s __data; char __size[40]; long int __align; } pthread_mutex_t; typedef union { struct __pthread_cond_s __data; char __size[48]; __extension__ long long int __align; } pthread_cond_t; typedef union { struct __pthread_rwlock_arch_t __data; char __size[56]; long int __align; } pthread_rwlock_t; typedef union { char __size[8]; long int __align; } pthread_rwlockattr_t; typedef volatile int pthread_spinlock_t; typedef union { char __size[32]; long int __align; } pthread_barrier_t; typedef union { char __size[4]; int __align; } pthread_barrierattr_t; # 228 "/usr/include/sys/types.h" 2 3 4 } # 515 "/usr/include/stdlib.h" 2 3 4 extern long int random (void) noexcept (true); extern void srandom (unsigned int __seed) noexcept (true); extern char *initstate (unsigned int __seed, char *__statebuf, size_t __statelen) noexcept (true) __attribute__ ((__nonnull__ (2))); extern char *setstate (char *__statebuf) noexcept (true) __attribute__ ((__nonnull__ (1))); struct random_data { int32_t *fptr; int32_t *rptr; int32_t *state; int rand_type; int rand_deg; int rand_sep; int32_t *end_ptr; }; extern int random_r (struct random_data *__restrict __buf, int32_t *__restrict __result) noexcept (true) __attribute__ ((__nonnull__ (1, 2))); extern int srandom_r (unsigned int __seed, struct random_data *__buf) noexcept (true) __attribute__ ((__nonnull__ (2))); extern int initstate_r (unsigned int __seed, char *__restrict __statebuf, size_t __statelen, struct random_data *__restrict __buf) noexcept (true) __attribute__ ((__nonnull__ (2, 4))); extern int setstate_r (char *__restrict __statebuf, struct random_data *__restrict __buf) noexcept (true) __attribute__ ((__nonnull__ (1, 2))); extern int rand (void) noexcept (true); extern void srand (unsigned int __seed) noexcept (true); extern int rand_r (unsigned int *__seed) noexcept (true); extern double drand48 (void) noexcept (true); extern double erand48 (unsigned short int __xsubi[3]) noexcept (true) __attribute__ ((__nonnull__ (1))); extern long int lrand48 (void) noexcept (true); extern long int nrand48 (unsigned short int __xsubi[3]) noexcept (true) __attribute__ ((__nonnull__ (1))); extern long int mrand48 (void) noexcept (true); extern long int jrand48 (unsigned short int __xsubi[3]) noexcept (true) __attribute__ ((__nonnull__ (1))); extern void srand48 (long int __seedval) noexcept (true); extern unsigned short int *seed48 (unsigned short int __seed16v[3]) noexcept (true) __attribute__ ((__nonnull__ (1))); extern void lcong48 (unsigned short int __param[7]) noexcept (true) __attribute__ ((__nonnull__ (1))); struct drand48_data { unsigned short int __x[3]; unsigned short int __old_x[3]; unsigned short int __c; unsigned short int __init; __extension__ unsigned long long int __a; }; extern int drand48_r (struct drand48_data *__restrict __buffer, double *__restrict __result) noexcept (true) __attribute__ ((__nonnull__ (1, 2))); extern int erand48_r (unsigned short int __xsubi[3], struct drand48_data *__restrict __buffer, double *__restrict __result) noexcept (true) __attribute__ ((__nonnull__ (1, 2))); extern int lrand48_r (struct drand48_data *__restrict __buffer, long int *__restrict __result) noexcept (true) __attribute__ ((__nonnull__ (1, 2))); extern int nrand48_r (unsigned short int __xsubi[3], struct drand48_data *__restrict __buffer, long int *__restrict __result) noexcept (true) __attribute__ ((__nonnull__ (1, 2))); extern int mrand48_r (struct drand48_data *__restrict __buffer, long int *__restrict __result) noexcept (true) __attribute__ ((__nonnull__ (1, 2))); extern int jrand48_r (unsigned short int __xsubi[3], struct drand48_data *__restrict __buffer, long int *__restrict __result) noexcept (true) __attribute__ ((__nonnull__ (1, 2))); extern int srand48_r (long int __seedval, struct drand48_data *__buffer) noexcept (true) __attribute__ ((__nonnull__ (2))); extern int seed48_r (unsigned short int __seed16v[3], struct drand48_data *__buffer) noexcept (true) __attribute__ ((__nonnull__ (1, 2))); extern int lcong48_r (unsigned short int __param[7], struct drand48_data *__buffer) noexcept (true) __attribute__ ((__nonnull__ (1, 2))); extern __uint32_t arc4random (void) noexcept (true) ; extern void arc4random_buf (void *__buf, size_t __size) noexcept (true) __attribute__ ((__nonnull__ (1))); extern __uint32_t arc4random_uniform (__uint32_t __upper_bound) noexcept (true) ; extern void *malloc (size_t __size) noexcept (true) __attribute__ ((__malloc__)) ; extern void *calloc (size_t __nmemb, size_t __size) noexcept (true) __attribute__ ((__malloc__)) ; extern void *realloc (void *__ptr, size_t __size) noexcept (true) __attribute__ ((__warn_unused_result__)) ; extern void free (void *__ptr) noexcept (true); extern void *reallocarray (void *__ptr, size_t __nmemb, size_t __size) noexcept (true) __attribute__ ((__warn_unused_result__)) ; extern void *reallocarray (void *__ptr, size_t __nmemb, size_t __size) noexcept (true) ; # 1 "/usr/include/alloca.h" 1 3 4 # 24 "/usr/include/alloca.h" 3 4 # 1 "/usr/bin/../lib/clang/18/include/stddef.h" 1 3 4 # 77 "/usr/bin/../lib/clang/18/include/stddef.h" 3 4 # 1 "/usr/bin/../lib/clang/18/include/__stddef_size_t.h" 1 3 4 # 18 "/usr/bin/../lib/clang/18/include/__stddef_size_t.h" 3 4 typedef long unsigned int size_t; # 78 "/usr/bin/../lib/clang/18/include/stddef.h" 2 3 4 # 25 "/usr/include/alloca.h" 2 3 4 extern "C" { extern void *alloca (size_t __size) noexcept (true); } # 707 "/usr/include/stdlib.h" 2 3 4 extern void *valloc (size_t __size) noexcept (true) __attribute__ ((__malloc__)) ; extern int posix_memalign (void **__memptr, size_t __alignment, size_t __size) noexcept (true) __attribute__ ((__nonnull__ (1))) ; extern void *aligned_alloc (size_t __alignment, size_t __size) noexcept (true) __attribute__ ((__malloc__)) __attribute__ ((__alloc_align__ (1))) ; extern void abort (void) noexcept (true) __attribute__ ((__noreturn__)); extern int atexit (void (*__func) (void)) noexcept (true) __attribute__ ((__nonnull__ (1))); extern "C++" int at_quick_exit (void (*__func) (void)) noexcept (true) __asm ("at_quick_exit") __attribute__ ((__nonnull__ (1))); # 749 "/usr/include/stdlib.h" 3 4 extern int on_exit (void (*__func) (int __status, void *__arg), void *__arg) noexcept (true) __attribute__ ((__nonnull__ (1))); extern void exit (int __status) noexcept (true) __attribute__ ((__noreturn__)); extern void quick_exit (int __status) noexcept (true) __attribute__ ((__noreturn__)); extern void _Exit (int __status) noexcept (true) __attribute__ ((__noreturn__)); extern char *getenv (const char *__name) noexcept (true) __attribute__ ((__nonnull__ (1))) ; extern char *secure_getenv (const char *__name) noexcept (true) __attribute__ ((__nonnull__ (1))) ; extern int putenv (char *__string) noexcept (true) __attribute__ ((__nonnull__ (1))); extern int setenv (const char *__name, const char *__value, int __replace) noexcept (true) __attribute__ ((__nonnull__ (2))); extern int unsetenv (const char *__name) noexcept (true) __attribute__ ((__nonnull__ (1))); extern int clearenv (void) noexcept (true); # 814 "/usr/include/stdlib.h" 3 4 extern char *mktemp (char *__template) noexcept (true) __attribute__ ((__nonnull__ (1))); # 827 "/usr/include/stdlib.h" 3 4 extern int mkstemp (char *__template) __attribute__ ((__nonnull__ (1))) ; # 837 "/usr/include/stdlib.h" 3 4 extern int mkstemp64 (char *__template) __attribute__ ((__nonnull__ (1))) ; # 849 "/usr/include/stdlib.h" 3 4 extern int mkstemps (char *__template, int __suffixlen) __attribute__ ((__nonnull__ (1))) ; # 859 "/usr/include/stdlib.h" 3 4 extern int mkstemps64 (char *__template, int __suffixlen) __attribute__ ((__nonnull__ (1))) ; # 870 "/usr/include/stdlib.h" 3 4 extern char *mkdtemp (char *__template) noexcept (true) __attribute__ ((__nonnull__ (1))) ; # 881 "/usr/include/stdlib.h" 3 4 extern int mkostemp (char *__template, int __flags) __attribute__ ((__nonnull__ (1))) ; # 891 "/usr/include/stdlib.h" 3 4 extern int mkostemp64 (char *__template, int __flags) __attribute__ ((__nonnull__ (1))) ; # 901 "/usr/include/stdlib.h" 3 4 extern int mkostemps (char *__template, int __suffixlen, int __flags) __attribute__ ((__nonnull__ (1))) ; # 913 "/usr/include/stdlib.h" 3 4 extern int mkostemps64 (char *__template, int __suffixlen, int __flags) __attribute__ ((__nonnull__ (1))) ; # 923 "/usr/include/stdlib.h" 3 4 extern int system (const char *__command) ; extern char *canonicalize_file_name (const char *__name) noexcept (true) __attribute__ ((__nonnull__ (1))) __attribute__ ((__malloc__)) ; # 940 "/usr/include/stdlib.h" 3 4 extern char *realpath (const char *__restrict __name, char *__restrict __resolved) noexcept (true) ; typedef int (*__compar_fn_t) (const void *, const void *); typedef __compar_fn_t comparison_fn_t; typedef int (*__compar_d_fn_t) (const void *, const void *, void *); extern void *bsearch (const void *__key, const void *__base, size_t __nmemb, size_t __size, __compar_fn_t __compar) __attribute__ ((__nonnull__ (1, 2, 5))) ; # 1 "/usr/include/bits/stdlib-bsearch.h" 1 3 4 # 19 "/usr/include/bits/stdlib-bsearch.h" 3 4 extern __inline __attribute__ ((__gnu_inline__)) void * bsearch (const void *__key, const void *__base, size_t __nmemb, size_t __size, __compar_fn_t __compar) { size_t __l, __u, __idx; const void *__p; int __comparison; __l = 0; __u = __nmemb; while (__l < __u) { __idx = (__l + __u) / 2; __p = (const void *) (((const char *) __base) + (__idx * __size)); __comparison = (*__compar) (__key, __p); if (__comparison < 0) __u = __idx; else if (__comparison > 0) __l = __idx + 1; else { return (void *) __p; } } return __null; } # 966 "/usr/include/stdlib.h" 2 3 4 extern void qsort (void *__base, size_t __nmemb, size_t __size, __compar_fn_t __compar) __attribute__ ((__nonnull__ (1, 4))); extern void qsort_r (void *__base, size_t __nmemb, size_t __size, __compar_d_fn_t __compar, void *__arg) __attribute__ ((__nonnull__ (1, 4))); extern int abs (int __x) noexcept (true) __attribute__ ((__const__)) ; extern long int labs (long int __x) noexcept (true) __attribute__ ((__const__)) ; __extension__ extern long long int llabs (long long int __x) noexcept (true) __attribute__ ((__const__)) ; extern div_t div (int __numer, int __denom) noexcept (true) __attribute__ ((__const__)) ; extern ldiv_t ldiv (long int __numer, long int __denom) noexcept (true) __attribute__ ((__const__)) ; __extension__ extern lldiv_t lldiv (long long int __numer, long long int __denom) noexcept (true) __attribute__ ((__const__)) ; # 1012 "/usr/include/stdlib.h" 3 4 extern char *ecvt (double __value, int __ndigit, int *__restrict __decpt, int *__restrict __sign) noexcept (true) __attribute__ ((__nonnull__ (3, 4))) ; extern char *fcvt (double __value, int __ndigit, int *__restrict __decpt, int *__restrict __sign) noexcept (true) __attribute__ ((__nonnull__ (3, 4))) ; extern char *gcvt (double __value, int __ndigit, char *__buf) noexcept (true) __attribute__ ((__nonnull__ (3))) ; extern char *qecvt (long double __value, int __ndigit, int *__restrict __decpt, int *__restrict __sign) noexcept (true) __attribute__ ((__nonnull__ (3, 4))) ; extern char *qfcvt (long double __value, int __ndigit, int *__restrict __decpt, int *__restrict __sign) noexcept (true) __attribute__ ((__nonnull__ (3, 4))) ; extern char *qgcvt (long double __value, int __ndigit, char *__buf) noexcept (true) __attribute__ ((__nonnull__ (3))) ; extern int ecvt_r (double __value, int __ndigit, int *__restrict __decpt, int *__restrict __sign, char *__restrict __buf, size_t __len) noexcept (true) __attribute__ ((__nonnull__ (3, 4, 5))); extern int fcvt_r (double __value, int __ndigit, int *__restrict __decpt, int *__restrict __sign, char *__restrict __buf, size_t __len) noexcept (true) __attribute__ ((__nonnull__ (3, 4, 5))); extern int qecvt_r (long double __value, int __ndigit, int *__restrict __decpt, int *__restrict __sign, char *__restrict __buf, size_t __len) noexcept (true) __attribute__ ((__nonnull__ (3, 4, 5))); extern int qfcvt_r (long double __value, int __ndigit, int *__restrict __decpt, int *__restrict __sign, char *__restrict __buf, size_t __len) noexcept (true) __attribute__ ((__nonnull__ (3, 4, 5))); extern int mblen (const char *__s, size_t __n) noexcept (true); extern int mbtowc (wchar_t *__restrict __pwc, const char *__restrict __s, size_t __n) noexcept (true); extern int wctomb (char *__s, wchar_t __wchar) noexcept (true); extern size_t mbstowcs (wchar_t *__restrict __pwcs, const char *__restrict __s, size_t __n) noexcept (true) ; extern size_t wcstombs (char *__restrict __s, const wchar_t *__restrict __pwcs, size_t __n) noexcept (true) ; extern int rpmatch (const char *__response) noexcept (true) __attribute__ ((__nonnull__ (1))) ; # 1099 "/usr/include/stdlib.h" 3 4 extern int getsubopt (char **__restrict __optionp, char *const *__restrict __tokens, char **__restrict __valuep) noexcept (true) __attribute__ ((__nonnull__ (1, 2, 3))) ; extern int posix_openpt (int __oflag) ; extern int grantpt (int __fd) noexcept (true); extern int unlockpt (int __fd) noexcept (true); extern char *ptsname (int __fd) noexcept (true) ; extern int ptsname_r (int __fd, char *__buf, size_t __buflen) noexcept (true) __attribute__ ((__nonnull__ (2))) ; extern int getpt (void); extern int getloadavg (double __loadavg[], int __nelem) noexcept (true) __attribute__ ((__nonnull__ (1))); # 1155 "/usr/include/stdlib.h" 3 4 # 1 "/usr/include/bits/stdlib-float.h" 1 3 4 # 24 "/usr/include/bits/stdlib-float.h" 3 4 extern __inline __attribute__ ((__gnu_inline__)) double atof (const char *__nptr) noexcept (true) { return strtod (__nptr, (char **) __null); } # 1156 "/usr/include/stdlib.h" 2 3 4 # 1167 "/usr/include/stdlib.h" 3 4 } # 80 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/cstdlib" 2 3 # 1 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/std_abs.h" 1 3 # 34 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/std_abs.h" 3 # 46 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/std_abs.h" 3 extern "C++" { namespace std __attribute__ ((__visibility__ ("default"))) { using ::abs; inline long abs(long __i) { return __builtin_labs(__i); } inline long long abs(long long __x) { return __builtin_llabs (__x); } # 70 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/std_abs.h" 3 inline constexpr double abs(double __x) { return __builtin_fabs(__x); } inline constexpr float abs(float __x) { return __builtin_fabsf(__x); } inline constexpr long double abs(long double __x) { return __builtin_fabsl(__x); } __extension__ inline constexpr __int128 abs(__int128 __x) { return __x >= 0 ? __x : -__x; } # 135 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/std_abs.h" 3 __extension__ inline constexpr __float128 abs(__float128 __x) { return __builtin_fabsf128(__x); } } } # 82 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/cstdlib" 2 3 # 125 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/cstdlib" 3 extern "C++" { namespace std __attribute__ ((__visibility__ ("default"))) { using ::div_t; using ::ldiv_t; using ::abort; using ::aligned_alloc; using ::atexit; using ::at_quick_exit; using ::atof; using ::atoi; using ::atol; using ::bsearch; using ::calloc; using ::div; using ::exit; using ::free; using ::getenv; using ::labs; using ::ldiv; using ::malloc; using ::mblen; using ::mbstowcs; using ::mbtowc; using ::qsort; using ::quick_exit; using ::rand; using ::realloc; using ::srand; using ::strtod; using ::strtol; using ::strtoul; using ::system; using ::wcstombs; using ::wctomb; inline ldiv_t div(long __i, long __j) noexcept { return ldiv(__i, __j); } } # 199 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/cstdlib" 3 namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) { using ::lldiv_t; using ::_Exit; using ::llabs; inline lldiv_t div(long long __n, long long __d) { lldiv_t __q; __q.quot = __n / __d; __q.rem = __n % __d; return __q; } using ::lldiv; # 231 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/cstdlib" 3 using ::atoll; using ::strtoll; using ::strtoull; using ::strtof; using ::strtold; } namespace std { using ::__gnu_cxx::lldiv_t; using ::__gnu_cxx::_Exit; using ::__gnu_cxx::llabs; using ::__gnu_cxx::div; using ::__gnu_cxx::lldiv; using ::__gnu_cxx::atoll; using ::__gnu_cxx::strtof; using ::__gnu_cxx::strtoll; using ::__gnu_cxx::strtoull; using ::__gnu_cxx::strtold; } # 275 "/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/cstdlib" 3 } # 16 "/usr/include/boost/config/platform/linux.hpp" 2 3 4 # 75 "/usr/include/boost/config/platform/linux.hpp" 3 4 # 1 "/usr/include/boost/config/detail/posix_features.hpp" 1 3 4 # 76 "/usr/include/boost/config/platform/linux.hpp" 2 3 4 # 58 "/usr/include/boost/config.hpp" 2 3 4 # 1 "/usr/include/boost/config/detail/suffix.hpp" 1 3 4 # 35 "/usr/include/boost/config/detail/suffix.hpp" 3 # 510 "/usr/include/boost/config/detail/suffix.hpp" 3 namespace boost{ __extension__ typedef long long long_long_type; __extension__ typedef unsigned long long ulong_long_type; } namespace boost{ __extension__ typedef __int128 int128_type; __extension__ typedef unsigned __int128 uint128_type; } # 572 "/usr/include/boost/config/detail/suffix.hpp" 3 # 1 "/usr/include/boost/config/helper_macros.hpp" 1 3 4 # 573 "/usr/include/boost/config/detail/suffix.hpp" 2 3 # 1282 "/usr/include/boost/config/detail/suffix.hpp" 3 # 1 "/usr/include/boost/config/detail/cxx_composite.hpp" 1 3 4 # 1283 "/usr/include/boost/config/detail/suffix.hpp" 2 3 # 62 "/usr/include/boost/config.hpp" 2 3 4 # 15 "/usr/include/boost/intrusive/detail/config_begin.hpp" 2 3 4 # 18 "/usr/include/boost/intrusive/list.hpp" 2 3 4 # 1 "/usr/include/boost/intrusive/intrusive_fwd.hpp" 1 3 4 # 21 "/usr/include/boost/intrusive/intrusive_fwd.hpp" 3 4 # 1 "/usr/include/boost/cstdint.hpp" 1 3 4 # 47 "/usr/include/boost/cstdint.hpp" 3 # 71 "/usr/include/boost/cstdint.hpp" 3 # 1 "/usr/bin/../lib/clang/18/include/stdint.h" 1 3 # 52 "/usr/bin/../lib/clang/18/include/stdint.h" 3 # 1 "/usr/include/stdint.h" 1 3 4 # 26 "/usr/include/stdint.h" 3 4 # 1 "/usr/include/bits/libc-header-start.h" 1 3 4 # 27 "/usr/include/stdint.h" 2 3 4 # 1 "/usr/include/bits/wchar.h" 1 3 4 # 29 "/usr/include/stdint.h" 2 3 4 # 1 "/usr/include/bits/wordsize.h" 1 3 4 # 30 "/usr/include/stdint.h" 2 3 4 # 1 "/usr/include/bits/stdint-uintn.h" 1 3 4 # 24 "/usr/include/bits/stdint-uintn.h" 3 4 typedef __uint8_t uint8_t; typedef __uint16_t uint16_t; typedef __uint32_t uint32_t; typedef __uint64_t uint64_t; # 38 "/usr/include/stdint.h" 2 3 4 # 1 "/usr/include/bits/stdint-least.h" 1 3 4 # 25 "/usr/include/bits/stdint-least.h" 3 4 typedef __int_least8_t int_least8_t; typedef __int_least16_t int_least16_t; typedef __int_least32_t int_least32_t; typedef __int_least64_t int_least64_t; typedef __uint_least8_t uint_least8_t; typedef __uint_least16_t uint_least16_t; typedef __uint_least32_t uint_least32_t; typedef __uint_least64_t uint_least64_t; # 42 "/usr/include/stdint.h" 2 3 4 typedef signed char int_fast8_t; typedef long int int_fast16_t; typedef long int int_fast32_t; typedef long int int_fast64_t; # 60 "/usr/include/stdint.h" 3 4 typedef unsigned char uint_fast8_t; typedef unsigned long int uint_fast16_t; typedef unsigned long int uint_fast32_t; typedef unsigned long int uint_fast64_t; # 79 "/usr/include/stdint.h" 3 4 typedef unsigned long int uintptr_t; # 90 "/usr/include/stdint.h" 3 4 typedef __intmax_t intmax_t; typedef __uintmax_t uintmax_t; # 53 "/usr/bin/../lib/clang/18/include/stdint.h" 2 3 # 72 "/usr/include/boost/cstdint.hpp" 2 3 # 114 "/usr/include/boost/cstdint.hpp" 3 namespace boost { using ::int8_t; using ::int_least8_t; using ::int_fast8_t; using ::uint8_t; using ::uint_least8_t; using ::uint_fast8_t; using ::int16_t; using ::int_least16_t; using ::int_fast16_t; using ::uint16_t; using ::uint_least16_t; using ::uint_fast16_t; using ::int32_t; using ::int_least32_t; using ::int_fast32_t; using ::uint32_t; using ::uint_least32_t; using ::uint_fast32_t; using ::int64_t; using ::int_least64_t; using ::int_fast64_t; using ::uint64_t; using ::uint_least64_t; using ::uint_fast64_t; using ::intmax_t; using ::uintmax_t; } # 387 "/usr/include/boost/cstdint.hpp" 3 namespace boost { using ::intptr_t; using ::uintptr_t; } # 22 "/usr/include/boost/intrusive/intrusive_fwd.hpp" 2 3 4 # 66 "/usr/include/boost/intrusive/intrusive_fwd.hpp" 3 4 # 1 "/usr/include/boost/intrusive/link_mode.hpp" 1 3 4 # 20 "/usr/include/boost/intrusive/link_mode.hpp" 3 4 namespace boost { namespace intrusive { enum link_mode_type{ normal_link, safe_link, auto_unlink }; template struct is_safe_autounlink { static const bool value = (int)link_mode == (int)auto_unlink || (int)link_mode == (int)safe_link; }; } } # 67 "/usr/include/boost/intrusive/intrusive_fwd.hpp" 2 3 4 # 1 "/usr/include/boost/intrusive/detail/workaround.hpp" 1 3 4 # 68 "/usr/include/boost/intrusive/intrusive_fwd.hpp" 2 3 4 namespace boost { namespace intrusive { using ::boost::uintptr_t; # 85 "/usr/include/boost/intrusive/intrusive_fwd.hpp" 3 4 template class circular_list_algorithms; template class circular_slist_algorithms; template class linear_slist_algorithms; template class bstree_algorithms; template class rbtree_algorithms; template class avltree_algorithms; template class sgtree_algorithms; template class splaytree_algorithms; template class treap_algorithms; # 128 "/usr/include/boost/intrusive/intrusive_fwd.hpp" 3 4 template class slist; # 139 "/usr/include/boost/intrusive/intrusive_fwd.hpp" 3 4 template class slist_base_hook; # 150 "/usr/include/boost/intrusive/intrusive_fwd.hpp" 3 4 template class slist_member_hook; # 164 "/usr/include/boost/intrusive/intrusive_fwd.hpp" 3 4 template class list; # 175 "/usr/include/boost/intrusive/intrusive_fwd.hpp" 3 4 template class list_base_hook; # 186 "/usr/include/boost/intrusive/intrusive_fwd.hpp" 3 4 template class list_member_hook; # 202 "/usr/include/boost/intrusive/intrusive_fwd.hpp" 3 4 template class rbtree; # 217 "/usr/include/boost/intrusive/intrusive_fwd.hpp" 3 4 template class set; # 232 "/usr/include/boost/intrusive/intrusive_fwd.hpp" 3 4 template class multiset; # 244 "/usr/include/boost/intrusive/intrusive_fwd.hpp" 3 4 template class set_base_hook; # 256 "/usr/include/boost/intrusive/intrusive_fwd.hpp" 3 4 template class set_member_hook; # 272 "/usr/include/boost/intrusive/intrusive_fwd.hpp" 3 4 template class splaytree; # 287 "/usr/include/boost/intrusive/intrusive_fwd.hpp" 3 4 template class splay_set; # 302 "/usr/include/boost/intrusive/intrusive_fwd.hpp" 3 4 template class splay_multiset; # 318 "/usr/include/boost/intrusive/intrusive_fwd.hpp" 3 4 template class avltree; # 333 "/usr/include/boost/intrusive/intrusive_fwd.hpp" 3 4 template class avl_set; # 348 "/usr/include/boost/intrusive/intrusive_fwd.hpp" 3 4 template class avl_multiset; # 360 "/usr/include/boost/intrusive/intrusive_fwd.hpp" 3 4 template class avl_set_base_hook; # 372 "/usr/include/boost/intrusive/intrusive_fwd.hpp" 3 4 template class avl_set_member_hook; # 390 "/usr/include/boost/intrusive/intrusive_fwd.hpp" 3 4 template class treap; # 406 "/usr/include/boost/intrusive/intrusive_fwd.hpp" 3 4 template class treap_set; # 422 "/usr/include/boost/intrusive/intrusive_fwd.hpp" 3 4 template class treap_multiset; # 438 "/usr/include/boost/intrusive/intrusive_fwd.hpp" 3 4 template class sgtree; # 453 "/usr/include/boost/intrusive/intrusive_fwd.hpp" 3 4 template class sg_set; # 468 "/usr/include/boost/intrusive/intrusive_fwd.hpp" 3 4 template class sg_multiset; # 483 "/usr/include/boost/intrusive/intrusive_fwd.hpp" 3 4 template class bstree; # 498 "/usr/include/boost/intrusive/intrusive_fwd.hpp" 3 4 template class bs_set; # 513 "/usr/include/boost/intrusive/intrusive_fwd.hpp" 3 4 template class bs_multiset; # 524 "/usr/include/boost/intrusive/intrusive_fwd.hpp" 3 4 template class bs_set_base_hook; # 535 "/usr/include/boost/intrusive/intrusive_fwd.hpp" 3 4 template class bs_set_member_hook; # 556 "/usr/include/boost/intrusive/intrusive_fwd.hpp" 3 4 template class hashtable; # 576 "/usr/include/boost/intrusive/intrusive_fwd.hpp" 3 4 template class unordered_set; # 596 "/usr/include/boost/intrusive/intrusive_fwd.hpp" 3 4 template class unordered_multiset; # 608 "/usr/include/boost/intrusive/intrusive_fwd.hpp" 3 4 template class unordered_set_base_hook; # 620 "/usr/include/boost/intrusive/intrusive_fwd.hpp" 3 4 template class unordered_set_member_hook; # 631 "/usr/include/boost/intrusive/intrusive_fwd.hpp" 3 4 template class any_base_hook; # 642 "/usr/include/boost/intrusive/intrusive_fwd.hpp" 3 4 template class any_member_hook; template struct constant_time_size; template struct size_type; template struct compare; template struct floating_point; template struct equal; template struct priority; template struct hash; template struct value_traits; template< typename Parent , typename MemberHook , MemberHook Parent::* PtrToMember> struct member_hook; template struct function_hook; template struct base_hook; template struct void_pointer; template struct tag; template struct link_mode; template struct optimize_size; template struct linear; template struct cache_last; template struct bucket_traits; template struct store_hash; template struct optimize_multikey; template struct power_2_buckets; template struct cache_begin; template struct compare_hash; template struct incremental; template struct value_traits; template< typename Parent , typename MemberHook , MemberHook Parent::* PtrToMember> struct member_hook; template< typename Functor> struct function_hook; template struct base_hook; template struct derivation_value_traits; template struct trivial_value_traits; template struct max_pointer_plus_bits; template struct max_pointer_plus_bits; template struct pointer_plus_bits; template struct pointer_plus_bits; template struct pointer_traits; template struct pointer_traits; } } # 19 "/usr/include/boost/intrusive/list.hpp" 2 3 4 # 1 "/usr/include/boost/intrusive/detail/assert.hpp" 1 3 4 # 25 "/usr/include/boost/intrusive/detail/assert.hpp" 3 4 # 1 "/usr/include/boost/assert.hpp" 1 3 4 # 58 "/usr/include/boost/assert.hpp" 3 4 # 1 "/usr/include/assert.h" 1 3 4 # 64 "/usr/include/assert.h" 3 4 extern "C" { extern void __assert_fail (const char *__assertion, const char *__file, unsigned int __line, const char *__function) noexcept (true) __attribute__ ((__noreturn__)); extern void __assert_perror_fail (int __errnum, const char *__file, unsigned int __line, const char *__function) noexcept (true) __attribute__ ((__noreturn__)); extern void __assert (const char *__assertion, const char *__file, int __line) noexcept (true) __attribute__ ((__noreturn__)); } # 59 "/usr/include/boost/assert.hpp" 2 3 4 # 26 "/usr/include/boost/intrusive/detail/assert.hpp" 2 3 4 # 1 "/usr/include/boost/assert.hpp" 1 3 4 # 58 "/usr/include/boost/assert.hpp" 3 4 # 1 "/usr/include/assert.h" 1 3 4 # 64 "/usr/include/assert.h" 3 4 extern "C" { extern void __assert_fail (const char *__assertion, const char *__file, unsigned int __line, const char *__function) noexcept (true) __attribute__ ((__noreturn__)); extern void __assert_perror_fail (int __errnum, const char *__file, unsigned int __line, const char *__function) noexcept (true) __attribute__ ((__noreturn__)); extern void __assert (const char *__assertion, const char *__file, int __line) noexcept (true) __attribute__ ((__noreturn__)); } # 59 "/usr/include/boost/assert.hpp" 2 3 4 # 33 "/usr/include/boost/intrusive/detail/assert.hpp" 2 3 4 # 1 "/usr/include/boost/assert.hpp" 1 3 4 # 58 "/usr/include/boost/assert.hpp" 3 4 # 1 "/usr/include/assert.h" 1 3 4 # 64 "/usr/include/assert.h" 3 4 extern "C" { extern void __assert_fail (const char *__assertion, const char *__file, unsigned int __line, const char *__function) noexcept (true) __attribute__ ((__noreturn__)); extern void __assert_perror_fail (int __errnum, const char *__file, unsigned int __line, const char *__function) noexcept (true) __attribute__ ((__noreturn__)); extern void __assert (const char *__assertion, const char *__file, int __line) noexcept (true) __attribute__ ((__noreturn__)); } # 59 "/usr/include/boost/assert.hpp" 2 3 4 # 40 "/usr/include/boost/intrusive/detail/assert.hpp" 2 3 4 # 20 "/usr/include/boost/intrusive/list.hpp" 2 3 4 # 1 "/usr/include/boost/intrusive/list_hook.hpp" 1 3 4 # 17 "/usr/include/boost/intrusive/list_hook.hpp" 3 4 # 1 "/usr/include/boost/intrusive/detail/config_begin.hpp" 1 3 4 # 18 "/usr/include/boost/intrusive/list_hook.hpp" 2 3 4 # 1 "/usr/include/boost/intrusive/detail/list_node.hpp" 1 3 4 # 26 "/usr/include/boost/intrusive/detail/list_node.hpp" 3 4 # 1 "/usr/include/boost/intrusive/pointer_rebind.hpp" 1 3 4 # 26 "/usr/include/boost/intrusive/pointer_rebind.hpp" 3 4 namespace boost { namespace intrusive { template struct pointer_has_rebind { template struct any { any(const V&) { } }; template static char test(int, typename X::template rebind*); template static int test(any, void*); static const bool value = (1 == sizeof(test(0, 0))); }; template struct pointer_has_rebind_other { template struct any { any(const V&) { } }; template static char test(int, typename X::template rebind::other*); template static int test(any, void*); static const bool value = (1 == sizeof(test(0, 0))); }; template struct pointer_rebind_mode { static const unsigned int rebind = (unsigned int)pointer_has_rebind::value; static const unsigned int rebind_other = (unsigned int)pointer_has_rebind_other::value; static const unsigned int mode = rebind + rebind*rebind_other; }; template struct pointer_rebinder; template struct pointer_rebinder< Ptr, U, 2u > { typedef typename Ptr::template rebind::other type; }; template struct pointer_rebinder< Ptr, U, 1u > { typedef typename Ptr::template rebind type; }; # 99 "/usr/include/boost/intrusive/pointer_rebind.hpp" 3 4 template