19#ifndef BOOST_PFR_CONFIG_HPP
20#define BOOST_PFR_CONFIG_HPP
22#if __cplusplus >= 201402L || (defined(_MSC_VER) && defined(_MSVC_LANG) && _MSC_VER > 1900)
37#ifdef BOOST_PFR_NOT_SUPPORTED
38# error Please, do not set BOOST_PFR_NOT_SUPPORTED value manually, use '-DBOOST_PFR_ENABLED=0' instead of it
42# if !defined(_MSVC_LANG) || _MSC_VER <= 1900
43# define BOOST_PFR_NOT_SUPPORTED 1
45#elif __cplusplus < 201402L
46# define BOOST_PFR_NOT_SUPPORTED 1
49#ifndef BOOST_PFR_USE_LOOPHOLE
52# define BOOST_PFR_USE_LOOPHOLE 1
54# define BOOST_PFR_USE_LOOPHOLE 0
56# elif defined(__clang_major__) && __clang_major__ >= 8
57# define BOOST_PFR_USE_LOOPHOLE 0
59# define BOOST_PFR_USE_LOOPHOLE 1
63#ifndef BOOST_PFR_USE_CPP17
64# ifdef __cpp_structured_bindings
65# define BOOST_PFR_USE_CPP17 1
66# elif defined(_MSVC_LANG)
67# if _MSVC_LANG >= 201703L
68# define BOOST_PFR_USE_CPP17 1
70# define BOOST_PFR_USE_CPP17 0
73# define BOOST_PFR_USE_CPP17 0
77#if (!BOOST_PFR_USE_CPP17 && !BOOST_PFR_USE_LOOPHOLE)
78# if (defined(_MSC_VER) && _MSC_VER < 1916)
79# define BOOST_PFR_NOT_SUPPORTED 1
83#ifndef BOOST_PFR_USE_STD_MAKE_INTEGRAL_SEQUENCE
85# if defined( __GLIBCXX__) && __GLIBCXX__ >= 20180101
86# define BOOST_PFR_USE_STD_MAKE_INTEGRAL_SEQUENCE 1
87# elif defined(_MSC_VER)
88# define BOOST_PFR_USE_STD_MAKE_INTEGRAL_SEQUENCE 1
91# define BOOST_PFR_USE_STD_MAKE_INTEGRAL_SEQUENCE 0
95#ifndef BOOST_PFR_HAS_GUARANTEED_COPY_ELISION
96# if defined(__cpp_guaranteed_copy_elision) && (!defined(_MSC_VER) || _MSC_VER > 1928)
97# define BOOST_PFR_HAS_GUARANTEED_COPY_ELISION 1
99# define BOOST_PFR_HAS_GUARANTEED_COPY_ELISION 0
103#ifndef BOOST_PFR_ENABLE_IMPLICIT_REFLECTION
104# if defined(__cpp_lib_is_aggregate)
105# define BOOST_PFR_ENABLE_IMPLICIT_REFLECTION 1
108# define BOOST_PFR_ENABLE_IMPLICIT_REFLECTION 0
112#ifndef BOOST_PFR_CORE_NAME_ENABLED
113# if (__cplusplus >= 202002L) || (defined(_MSVC_LANG) && (_MSVC_LANG >= 202002L))
114# if (defined(__cpp_nontype_template_args) && __cpp_nontype_template_args >= 201911) \
115 || (defined(__clang_major__) && __clang_major__ >= 12)
116# define BOOST_PFR_CORE_NAME_ENABLED 1
118# define BOOST_PFR_CORE_NAME_ENABLED 0
121# define BOOST_PFR_CORE_NAME_ENABLED 0
126#ifndef BOOST_PFR_CORE_NAME_PARSING
127# if defined(_MSC_VER)
128# define BOOST_PFR_CORE_NAME_PARSING (sizeof("auto __cdecl boost::pfr::detail::name_of_field_impl<") - 1, sizeof(">(void) noexcept") - 1, backward("->"))
129# elif defined(__clang__)
130# define BOOST_PFR_CORE_NAME_PARSING (sizeof("auto boost::pfr::detail::name_of_field_impl() [MsvcWorkaround = ") - 1, sizeof("}]") - 1, backward("."))
131# elif defined(__GNUC__)
132# define BOOST_PFR_CORE_NAME_PARSING (sizeof("consteval auto boost::pfr::detail::name_of_field_impl() [with MsvcWorkaround = ") - 1, sizeof(")]") - 1, backward("::"))
135# define BOOST_PFR_CORE_NAME_PARSING (0, 0, "")
139#if defined(__has_cpp_attribute)
140# if __has_cpp_attribute(maybe_unused)
141# define BOOST_PFR_MAYBE_UNUSED [[maybe_unused]]
145#ifndef BOOST_PFR_MAYBE_UNUSED
146# define BOOST_PFR_MAYBE_UNUSED
149#ifndef BOOST_PFR_ENABLED
150# ifdef BOOST_PFR_NOT_SUPPORTED
151# define BOOST_PFR_ENABLED 0
153# define BOOST_PFR_ENABLED 1
157#undef BOOST_PFR_NOT_SUPPORTED
165#ifndef BOOST_PFR_CORE_HPP
166#define BOOST_PFR_CORE_HPP
174#ifndef BOOST_PFR_DETAIL_CONFIG_HPP
175#define BOOST_PFR_DETAIL_CONFIG_HPP
178#if !BOOST_PFR_ENABLED
180#error Boost.PFR library is not supported in your environment. \
181 Try one of the possible solutions: \
182 1. try to take away an '-DBOOST_PFR_ENABLED=0', if it exists \
185 4. update your compiler; \
186 or disable this error by '-DBOOST_PFR_ENABLED=1' if you really know what are you doing.
198#ifndef BOOST_PFR_DETAIL_CORE_HPP
199#define BOOST_PFR_DETAIL_CORE_HPP
206#if BOOST_PFR_USE_CPP17
213#ifndef BOOST_PFR_DETAIL_CORE17_HPP
214#define BOOST_PFR_DETAIL_CORE17_HPP
228#ifndef BOOST_PFR_DETAIL_CORE17_GENERATED_HPP
229#define BOOST_PFR_DETAIL_CORE17_GENERATED_HPP
231#if !BOOST_PFR_USE_CPP17
232# error C++17 is required for this header.
240#ifndef BOOST_PFR_DETAIL_SEQUENCE_TUPLE_HPP
241#define BOOST_PFR_DETAIL_SEQUENCE_TUPLE_HPP
249#ifndef BOOST_PFR_DETAIL_MAKE_INTEGER_SEQUENCE_HPP
250#define BOOST_PFR_DETAIL_MAKE_INTEGER_SEQUENCE_HPP
253#include <type_traits>
257namespace boost {
namespace pfr {
namespace detail {
259#if BOOST_PFR_USE_STD_MAKE_INTEGRAL_SEQUENCE == 0
262# if __has_builtin(__make_integer_seq)
263# define BOOST_PFR_USE_MAKE_INTEGER_SEQ_BUILTIN
267#ifdef BOOST_PFR_USE_MAKE_INTEGER_SEQ_BUILTIN
269using std::integer_sequence;
272template <
typename T, T N>
273using make_integer_sequence = __make_integer_seq<integer_sequence, T, N>;
275#undef BOOST_PFR_USE_MAKE_INTEGER_SEQ_BUILTIN
279template <
typename T,
typename U>
280struct join_sequences;
282template <
typename T, T... A, T... B>
283struct join_sequences<std::integer_sequence<T, A...>, std::integer_sequence<T, B...>> {
284 using type = std::integer_sequence<T, A..., B...>;
287template <
typename T, T Min, T Max>
288struct build_sequence_impl {
289 static_assert(Min < Max,
"Start of range must be less than its end");
290 static constexpr T size = Max - Min;
291 using type =
typename join_sequences<
292 typename build_sequence_impl<T, Min, Min + size / 2>::type,
293 typename build_sequence_impl<T, Min + size / 2 + 1, Max>::type
297template <
typename T, T V>
298struct build_sequence_impl<T, V, V> {
299 using type = std::integer_sequence<T, V>;
302template <
typename T, std::
size_t N>
303struct make_integer_sequence_impl : build_sequence_impl<T, 0, N - 1> {};
306struct make_integer_sequence_impl<T, 0> {
307 using type = std::integer_sequence<T>;
310template <
typename T, T N>
311using make_integer_sequence =
typename make_integer_sequence_impl<T, N>::type;
316template <
typename T, T N>
317using make_integer_sequence = std::make_integer_sequence<T, N>;
321template <std::
size_t N>
322using make_index_sequence = make_integer_sequence<std::size_t, N>;
324template <
typename... T>
325using index_sequence_for = make_index_sequence<
sizeof...(T)>;
336namespace boost {
namespace pfr {
namespace detail {
namespace sequence_tuple {
338template <std::
size_t N,
class T>
339struct base_from_member {
343template <
class I,
class ...Tail>
348template <std::size_t... I,
class ...Tail>
349struct tuple_base< std::index_sequence<I...>, Tail... >
350 : base_from_member<I , Tail>...
352 static constexpr std::size_t size_v =
sizeof...(I);
356 constexpr tuple_base() =
default;
357 constexpr tuple_base(tuple_base&&) =
default;
358 constexpr tuple_base(
const tuple_base&) =
default;
360 constexpr tuple_base(Tail... v) noexcept
361 : base_from_member<I, Tail>{ v }...
366struct tuple_base<std::index_sequence<> > {
367 static constexpr std::size_t size_v = 0;
370template <std::
size_t N,
class T>
371constexpr T& get_impl(base_from_member<N, T>& t)
noexcept {
376template <std::
size_t N,
class T>
377constexpr const T& get_impl(
const base_from_member<N, T>& t)
noexcept {
382template <std::
size_t N,
class T>
383constexpr volatile T& get_impl(
volatile base_from_member<N, T>& t)
noexcept {
388template <std::
size_t N,
class T>
389constexpr const volatile T& get_impl(
const volatile base_from_member<N, T>& t)
noexcept {
394template <std::
size_t N,
class T>
395constexpr T&& get_impl(base_from_member<N, T>&& t)
noexcept {
397 return std::forward<T>(t.value);
401template <
class T, std::
size_t N>
402constexpr T& get_by_type_impl(base_from_member<N, T>& t)
noexcept {
407template <
class T, std::
size_t N>
408constexpr const T& get_by_type_impl(
const base_from_member<N, T>& t)
noexcept {
413template <
class T, std::
size_t N>
414constexpr volatile T& get_by_type_impl(
volatile base_from_member<N, T>& t)
noexcept {
419template <
class T, std::
size_t N>
420constexpr const volatile T& get_by_type_impl(
const volatile base_from_member<N, T>& t)
noexcept {
425template <
class T, std::
size_t N>
426constexpr T&& get_by_type_impl(base_from_member<N, T>&& t)
noexcept {
428 return std::forward<T>(t.value);
431template <
class T, std::
size_t N>
432constexpr const T&& get_by_type_impl(
const base_from_member<N, T>&& t)
noexcept {
434 return std::forward<T>(t.value);
440template <
class ...Values>
441struct tuple: tuple_base<
442 detail::index_sequence_for<Values...>,
446 detail::index_sequence_for<Values...>,
450 constexpr static std::size_t size() noexcept {
return sizeof...(Values); }
451 constexpr static bool empty() noexcept {
return size() == 0; }
455template <std::size_t N,
class ...T>
456constexpr decltype(
auto) get(tuple<T...>& t)
noexcept {
457 static_assert(N < tuple<T...>::size_v,
"====================> Boost.PFR: Tuple index out of bounds");
458 return sequence_tuple::get_impl<N>(t);
461template <std::size_t N,
class ...T>
462constexpr decltype(
auto) get(
const tuple<T...>& t)
noexcept {
463 static_assert(N < tuple<T...>::size_v,
"====================> Boost.PFR: Tuple index out of bounds");
464 return sequence_tuple::get_impl<N>(t);
467template <std::size_t N,
class ...T>
468constexpr decltype(
auto) get(
const volatile tuple<T...>& t)
noexcept {
469 static_assert(N < tuple<T...>::size_v,
"====================> Boost.PFR: Tuple index out of bounds");
470 return sequence_tuple::get_impl<N>(t);
473template <std::size_t N,
class ...T>
474constexpr decltype(
auto) get(
volatile tuple<T...>& t)
noexcept {
475 static_assert(N < tuple<T...>::size_v,
"====================> Boost.PFR: Tuple index out of bounds");
476 return sequence_tuple::get_impl<N>(t);
479template <std::size_t N,
class ...T>
480constexpr decltype(
auto) get(tuple<T...>&& t)
noexcept {
481 static_assert(N < tuple<T...>::size_v,
"====================> Boost.PFR: Tuple index out of bounds");
482 return sequence_tuple::get_impl<N>(std::move(t));
485template <std::
size_t I,
class T>
486using tuple_element = std::remove_reference<
decltype(
487 ::boost::pfr::detail::sequence_tuple::get<I>( std::declval<T>() )
490template <
class... Args>
491constexpr auto make_sequence_tuple(Args... args)
noexcept {
492 return ::boost::pfr::detail::sequence_tuple::tuple<Args...>{ args... };
503#ifndef BOOST_PFR_DETAIL_SIZE_T_HPP
504#define BOOST_PFR_DETAIL_SIZE_T_HPP
506namespace boost {
namespace pfr {
namespace detail {
509template <std::
size_t Index>
510using size_t_ = std::integral_constant<std::size_t, Index >;
515#include <type_traits>
517namespace boost {
namespace pfr {
namespace detail {
519template <
class... Args>
520constexpr auto make_tuple_of_references(Args&&... args)
noexcept {
521 return sequence_tuple::tuple<Args&...>{ args... };
524template<
typename T,
typename Arg>
525constexpr decltype(
auto) add_cv_like(Arg& arg)
noexcept {
526 if constexpr (std::is_const<T>::value && std::is_volatile<T>::value) {
527 return const_cast<const volatile Arg&
>(arg);
529 else if constexpr (std::is_const<T>::value) {
530 return const_cast<const Arg&
>(arg);
532 else if constexpr (std::is_volatile<T>::value) {
533 return const_cast<volatile Arg&
>(arg);
536 return const_cast<Arg&
>(arg);
541template<
typename T,
typename Sb,
typename Arg>
542constexpr decltype(
auto) workaround_cast(Arg& arg)
noexcept {
543 using output_arg_t = std::conditional_t<!std::is_reference<Sb>(),
decltype(detail::add_cv_like<T>(arg)), Sb>;
544 return const_cast<output_arg_t
>(arg);
548constexpr auto tie_as_tuple(T& , size_t_<0>)
noexcept {
549 return sequence_tuple::tuple<>{};
553constexpr auto tie_as_tuple(T& val, size_t_<1>, std::enable_if_t<std::is_class< std::remove_cv_t<T> >::value>* =
nullptr) noexcept {
554 auto& [a] =
const_cast<std::remove_cv_t<T>&
>(val);
555 return ::boost::pfr::detail::make_tuple_of_references(detail::workaround_cast<T,
decltype(a)>(a));
560constexpr auto tie_as_tuple(T& val, size_t_<1>, std::enable_if_t<!std::is_class< std::remove_cv_t<T> >::value>* =
nullptr) noexcept {
561 return ::boost::pfr::detail::make_tuple_of_references( val );
566constexpr auto tie_as_tuple(T& val, size_t_<2>)
noexcept {
567 auto& [a,b] =
const_cast<std::remove_cv_t<T>&
>(val);
568 return ::boost::pfr::detail::make_tuple_of_references(detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b));
572constexpr auto tie_as_tuple(T& val, size_t_<3>)
noexcept {
573 auto& [a,b,c] =
const_cast<std::remove_cv_t<T>&
>(val);
575 return ::boost::pfr::detail::make_tuple_of_references(
576 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c)
581constexpr auto tie_as_tuple(T& val, size_t_<4>)
noexcept {
582 auto& [a,b,c,d] =
const_cast<std::remove_cv_t<T>&
>(val);
584 return ::boost::pfr::detail::make_tuple_of_references(
585 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
586 detail::workaround_cast<T,
decltype(d)>(d)
591constexpr auto tie_as_tuple(T& val, size_t_<5>)
noexcept {
592 auto& [a,b,c,d,e] =
const_cast<std::remove_cv_t<T>&
>(val);
594 return ::boost::pfr::detail::make_tuple_of_references(
595 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
596 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e)
601constexpr auto tie_as_tuple(T& val, size_t_<6>)
noexcept {
602 auto& [a,b,c,d,e,f] =
const_cast<std::remove_cv_t<T>&
>(val);
604 return ::boost::pfr::detail::make_tuple_of_references(
605 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
606 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f)
611constexpr auto tie_as_tuple(T& val, size_t_<7>)
noexcept {
612 auto& [a,b,c,d,e,f,g] =
const_cast<std::remove_cv_t<T>&
>(val);
614 return ::boost::pfr::detail::make_tuple_of_references(
615 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
616 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
617 detail::workaround_cast<T,
decltype(g)>(g)
622constexpr auto tie_as_tuple(T& val, size_t_<8>)
noexcept {
623 auto& [a,b,c,d,e,f,g,h] =
const_cast<std::remove_cv_t<T>&
>(val);
625 return ::boost::pfr::detail::make_tuple_of_references(
626 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
627 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
628 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h)
633constexpr auto tie_as_tuple(T& val, size_t_<9>)
noexcept {
634 auto& [a,b,c,d,e,f,g,h,j] =
const_cast<std::remove_cv_t<T>&
>(val);
636 return ::boost::pfr::detail::make_tuple_of_references(
637 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
638 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
639 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j)
644constexpr auto tie_as_tuple(T& val, size_t_<10>)
noexcept {
645 auto& [a,b,c,d,e,f,g,h,j,k] =
const_cast<std::remove_cv_t<T>&
>(val);
647 return ::boost::pfr::detail::make_tuple_of_references(
648 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
649 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
650 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
651 detail::workaround_cast<T,
decltype(k)>(k)
656constexpr auto tie_as_tuple(T& val, size_t_<11>)
noexcept {
657 auto& [a,b,c,d,e,f,g,h,j,k,l] =
const_cast<std::remove_cv_t<T>&
>(val);
659 return ::boost::pfr::detail::make_tuple_of_references(
660 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
661 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
662 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
663 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l)
668constexpr auto tie_as_tuple(T& val, size_t_<12>)
noexcept {
669 auto& [a,b,c,d,e,f,g,h,j,k,l,m] =
const_cast<std::remove_cv_t<T>&
>(val);
671 return ::boost::pfr::detail::make_tuple_of_references(
672 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
673 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
674 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
675 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m)
680constexpr auto tie_as_tuple(T& val, size_t_<13>)
noexcept {
681 auto& [a,b,c,d,e,f,g,h,j,k,l,m,n] =
const_cast<std::remove_cv_t<T>&
>(val);
683 return ::boost::pfr::detail::make_tuple_of_references(
684 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
685 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
686 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
687 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
688 detail::workaround_cast<T,
decltype(n)>(n)
693constexpr auto tie_as_tuple(T& val, size_t_<14>)
noexcept {
694 auto& [a,b,c,d,e,f,g,h,j,k,l,m,n,p] =
const_cast<std::remove_cv_t<T>&
>(val);
696 return ::boost::pfr::detail::make_tuple_of_references(
697 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
698 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
699 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
700 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
701 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p)
706constexpr auto tie_as_tuple(T& val, size_t_<15>)
noexcept {
707 auto& [a,b,c,d,e,f,g,h,j,k,l,m,n,p,q] =
const_cast<std::remove_cv_t<T>&
>(val);
709 return ::boost::pfr::detail::make_tuple_of_references(
710 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
711 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
712 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
713 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
714 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q)
719constexpr auto tie_as_tuple(T& val, size_t_<16>)
noexcept {
720 auto& [a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r] =
const_cast<std::remove_cv_t<T>&
>(val);
722 return ::boost::pfr::detail::make_tuple_of_references(
723 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
724 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
725 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
726 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
727 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
728 detail::workaround_cast<T,
decltype(r)>(r)
733constexpr auto tie_as_tuple(T& val, size_t_<17>)
noexcept {
734 auto& [a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r,s] =
const_cast<std::remove_cv_t<T>&
>(val);
736 return ::boost::pfr::detail::make_tuple_of_references(
737 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
738 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
739 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
740 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
741 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
742 detail::workaround_cast<T,
decltype(r)>(r),detail::workaround_cast<T,
decltype(s)>(s)
747constexpr auto tie_as_tuple(T& val, size_t_<18>)
noexcept {
748 auto& [a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r,s,t] =
const_cast<std::remove_cv_t<T>&
>(val);
750 return ::boost::pfr::detail::make_tuple_of_references(
751 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
752 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
753 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
754 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
755 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
756 detail::workaround_cast<T,
decltype(r)>(r),detail::workaround_cast<T,
decltype(s)>(s),detail::workaround_cast<T,
decltype(t)>(t)
761constexpr auto tie_as_tuple(T& val, size_t_<19>)
noexcept {
762 auto& [a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r,s,t,u] =
const_cast<std::remove_cv_t<T>&
>(val);
764 return ::boost::pfr::detail::make_tuple_of_references(
765 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
766 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
767 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
768 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
769 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
770 detail::workaround_cast<T,
decltype(r)>(r),detail::workaround_cast<T,
decltype(s)>(s),detail::workaround_cast<T,
decltype(t)>(t),
771 detail::workaround_cast<T,
decltype(u)>(u)
776constexpr auto tie_as_tuple(T& val, size_t_<20>)
noexcept {
777 auto& [a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r,s,t,u,v] =
const_cast<std::remove_cv_t<T>&
>(val);
779 return ::boost::pfr::detail::make_tuple_of_references(
780 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
781 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
782 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
783 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
784 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
785 detail::workaround_cast<T,
decltype(r)>(r),detail::workaround_cast<T,
decltype(s)>(s),detail::workaround_cast<T,
decltype(t)>(t),
786 detail::workaround_cast<T,
decltype(u)>(u),detail::workaround_cast<T,
decltype(v)>(v)
791constexpr auto tie_as_tuple(T& val, size_t_<21>)
noexcept {
792 auto& [a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r,s,t,u,v,w] =
const_cast<std::remove_cv_t<T>&
>(val);
794 return ::boost::pfr::detail::make_tuple_of_references(
795 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
796 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
797 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
798 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
799 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
800 detail::workaround_cast<T,
decltype(r)>(r),detail::workaround_cast<T,
decltype(s)>(s),detail::workaround_cast<T,
decltype(t)>(t),
801 detail::workaround_cast<T,
decltype(u)>(u),detail::workaround_cast<T,
decltype(v)>(v),detail::workaround_cast<T,
decltype(w)>(w)
806constexpr auto tie_as_tuple(T& val, size_t_<22>)
noexcept {
807 auto& [a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r,s,t,u,v,w,x] =
const_cast<std::remove_cv_t<T>&
>(val);
809 return ::boost::pfr::detail::make_tuple_of_references(
810 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
811 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
812 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
813 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
814 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
815 detail::workaround_cast<T,
decltype(r)>(r),detail::workaround_cast<T,
decltype(s)>(s),detail::workaround_cast<T,
decltype(t)>(t),
816 detail::workaround_cast<T,
decltype(u)>(u),detail::workaround_cast<T,
decltype(v)>(v),detail::workaround_cast<T,
decltype(w)>(w),
817 detail::workaround_cast<T,
decltype(x)>(x)
822constexpr auto tie_as_tuple(T& val, size_t_<23>)
noexcept {
823 auto& [a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r,s,t,u,v,w,x,y] =
const_cast<std::remove_cv_t<T>&
>(val);
825 return ::boost::pfr::detail::make_tuple_of_references(
826 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
827 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
828 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
829 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
830 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
831 detail::workaround_cast<T,
decltype(r)>(r),detail::workaround_cast<T,
decltype(s)>(s),detail::workaround_cast<T,
decltype(t)>(t),
832 detail::workaround_cast<T,
decltype(u)>(u),detail::workaround_cast<T,
decltype(v)>(v),detail::workaround_cast<T,
decltype(w)>(w),
833 detail::workaround_cast<T,
decltype(x)>(x),detail::workaround_cast<T,
decltype(y)>(y)
838constexpr auto tie_as_tuple(T& val, size_t_<24>)
noexcept {
839 auto& [a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r,s,t,u,v,w,x,y,z] =
const_cast<std::remove_cv_t<T>&
>(val);
841 return ::boost::pfr::detail::make_tuple_of_references(
842 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
843 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
844 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
845 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
846 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
847 detail::workaround_cast<T,
decltype(r)>(r),detail::workaround_cast<T,
decltype(s)>(s),detail::workaround_cast<T,
decltype(t)>(t),
848 detail::workaround_cast<T,
decltype(u)>(u),detail::workaround_cast<T,
decltype(v)>(v),detail::workaround_cast<T,
decltype(w)>(w),
849 detail::workaround_cast<T,
decltype(x)>(x),detail::workaround_cast<T,
decltype(y)>(y),detail::workaround_cast<T,
decltype(z)>(z)
854constexpr auto tie_as_tuple(T& val, size_t_<25>)
noexcept {
855 auto& [a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r,s,t,u,v,w,x,y,z,A] =
const_cast<std::remove_cv_t<T>&
>(val);
857 return ::boost::pfr::detail::make_tuple_of_references(
858 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
859 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
860 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
861 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
862 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
863 detail::workaround_cast<T,
decltype(r)>(r),detail::workaround_cast<T,
decltype(s)>(s),detail::workaround_cast<T,
decltype(t)>(t),
864 detail::workaround_cast<T,
decltype(u)>(u),detail::workaround_cast<T,
decltype(v)>(v),detail::workaround_cast<T,
decltype(w)>(w),
865 detail::workaround_cast<T,
decltype(x)>(x),detail::workaround_cast<T,
decltype(y)>(y),detail::workaround_cast<T,
decltype(z)>(z),
866 detail::workaround_cast<T,
decltype(A)>(A)
871constexpr auto tie_as_tuple(T& val, size_t_<26>)
noexcept {
872 auto& [a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B] =
const_cast<std::remove_cv_t<T>&
>(val);
874 return ::boost::pfr::detail::make_tuple_of_references(
875 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
876 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
877 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
878 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
879 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
880 detail::workaround_cast<T,
decltype(r)>(r),detail::workaround_cast<T,
decltype(s)>(s),detail::workaround_cast<T,
decltype(t)>(t),
881 detail::workaround_cast<T,
decltype(u)>(u),detail::workaround_cast<T,
decltype(v)>(v),detail::workaround_cast<T,
decltype(w)>(w),
882 detail::workaround_cast<T,
decltype(x)>(x),detail::workaround_cast<T,
decltype(y)>(y),detail::workaround_cast<T,
decltype(z)>(z),
883 detail::workaround_cast<T,
decltype(A)>(A),detail::workaround_cast<T,
decltype(B)>(B)
888constexpr auto tie_as_tuple(T& val, size_t_<27>)
noexcept {
889 auto& [a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B,C] =
const_cast<std::remove_cv_t<T>&
>(val);
891 return ::boost::pfr::detail::make_tuple_of_references(
892 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
893 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
894 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
895 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
896 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
897 detail::workaround_cast<T,
decltype(r)>(r),detail::workaround_cast<T,
decltype(s)>(s),detail::workaround_cast<T,
decltype(t)>(t),
898 detail::workaround_cast<T,
decltype(u)>(u),detail::workaround_cast<T,
decltype(v)>(v),detail::workaround_cast<T,
decltype(w)>(w),
899 detail::workaround_cast<T,
decltype(x)>(x),detail::workaround_cast<T,
decltype(y)>(y),detail::workaround_cast<T,
decltype(z)>(z),
900 detail::workaround_cast<T,
decltype(A)>(A),detail::workaround_cast<T,
decltype(B)>(B),detail::workaround_cast<T,
decltype(C)>(C)
905constexpr auto tie_as_tuple(T& val, size_t_<28>)
noexcept {
906 auto& [a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D] =
const_cast<std::remove_cv_t<T>&
>(val);
908 return ::boost::pfr::detail::make_tuple_of_references(
909 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
910 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
911 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
912 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
913 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
914 detail::workaround_cast<T,
decltype(r)>(r),detail::workaround_cast<T,
decltype(s)>(s),detail::workaround_cast<T,
decltype(t)>(t),
915 detail::workaround_cast<T,
decltype(u)>(u),detail::workaround_cast<T,
decltype(v)>(v),detail::workaround_cast<T,
decltype(w)>(w),
916 detail::workaround_cast<T,
decltype(x)>(x),detail::workaround_cast<T,
decltype(y)>(y),detail::workaround_cast<T,
decltype(z)>(z),
917 detail::workaround_cast<T,
decltype(A)>(A),detail::workaround_cast<T,
decltype(B)>(B),detail::workaround_cast<T,
decltype(C)>(C),
918 detail::workaround_cast<T,
decltype(D)>(D)
923constexpr auto tie_as_tuple(T& val, size_t_<29>)
noexcept {
924 auto& [a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E] =
const_cast<std::remove_cv_t<T>&
>(val);
926 return ::boost::pfr::detail::make_tuple_of_references(
927 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
928 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
929 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
930 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
931 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
932 detail::workaround_cast<T,
decltype(r)>(r),detail::workaround_cast<T,
decltype(s)>(s),detail::workaround_cast<T,
decltype(t)>(t),
933 detail::workaround_cast<T,
decltype(u)>(u),detail::workaround_cast<T,
decltype(v)>(v),detail::workaround_cast<T,
decltype(w)>(w),
934 detail::workaround_cast<T,
decltype(x)>(x),detail::workaround_cast<T,
decltype(y)>(y),detail::workaround_cast<T,
decltype(z)>(z),
935 detail::workaround_cast<T,
decltype(A)>(A),detail::workaround_cast<T,
decltype(B)>(B),detail::workaround_cast<T,
decltype(C)>(C),
936 detail::workaround_cast<T,
decltype(D)>(D),detail::workaround_cast<T,
decltype(E)>(E)
941constexpr auto tie_as_tuple(T& val, size_t_<30>)
noexcept {
942 auto& [a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F] =
const_cast<std::remove_cv_t<T>&
>(val);
944 return ::boost::pfr::detail::make_tuple_of_references(
945 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
946 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
947 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
948 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
949 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
950 detail::workaround_cast<T,
decltype(r)>(r),detail::workaround_cast<T,
decltype(s)>(s),detail::workaround_cast<T,
decltype(t)>(t),
951 detail::workaround_cast<T,
decltype(u)>(u),detail::workaround_cast<T,
decltype(v)>(v),detail::workaround_cast<T,
decltype(w)>(w),
952 detail::workaround_cast<T,
decltype(x)>(x),detail::workaround_cast<T,
decltype(y)>(y),detail::workaround_cast<T,
decltype(z)>(z),
953 detail::workaround_cast<T,
decltype(A)>(A),detail::workaround_cast<T,
decltype(B)>(B),detail::workaround_cast<T,
decltype(C)>(C),
954 detail::workaround_cast<T,
decltype(D)>(D),detail::workaround_cast<T,
decltype(E)>(E),detail::workaround_cast<T,
decltype(F)>(F)
959constexpr auto tie_as_tuple(T& val, size_t_<31>)
noexcept {
960 auto& [a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G] =
const_cast<std::remove_cv_t<T>&
>(val);
962 return ::boost::pfr::detail::make_tuple_of_references(
963 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
964 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
965 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
966 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
967 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
968 detail::workaround_cast<T,
decltype(r)>(r),detail::workaround_cast<T,
decltype(s)>(s),detail::workaround_cast<T,
decltype(t)>(t),
969 detail::workaround_cast<T,
decltype(u)>(u),detail::workaround_cast<T,
decltype(v)>(v),detail::workaround_cast<T,
decltype(w)>(w),
970 detail::workaround_cast<T,
decltype(x)>(x),detail::workaround_cast<T,
decltype(y)>(y),detail::workaround_cast<T,
decltype(z)>(z),
971 detail::workaround_cast<T,
decltype(A)>(A),detail::workaround_cast<T,
decltype(B)>(B),detail::workaround_cast<T,
decltype(C)>(C),
972 detail::workaround_cast<T,
decltype(D)>(D),detail::workaround_cast<T,
decltype(E)>(E),detail::workaround_cast<T,
decltype(F)>(F),
973 detail::workaround_cast<T,
decltype(G)>(G)
978constexpr auto tie_as_tuple(T& val, size_t_<32>)
noexcept {
979 auto& [a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H] =
const_cast<std::remove_cv_t<T>&
>(val);
981 return ::boost::pfr::detail::make_tuple_of_references(
982 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
983 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
984 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
985 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
986 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
987 detail::workaround_cast<T,
decltype(r)>(r),detail::workaround_cast<T,
decltype(s)>(s),detail::workaround_cast<T,
decltype(t)>(t),
988 detail::workaround_cast<T,
decltype(u)>(u),detail::workaround_cast<T,
decltype(v)>(v),detail::workaround_cast<T,
decltype(w)>(w),
989 detail::workaround_cast<T,
decltype(x)>(x),detail::workaround_cast<T,
decltype(y)>(y),detail::workaround_cast<T,
decltype(z)>(z),
990 detail::workaround_cast<T,
decltype(A)>(A),detail::workaround_cast<T,
decltype(B)>(B),detail::workaround_cast<T,
decltype(C)>(C),
991 detail::workaround_cast<T,
decltype(D)>(D),detail::workaround_cast<T,
decltype(E)>(E),detail::workaround_cast<T,
decltype(F)>(F),
992 detail::workaround_cast<T,
decltype(G)>(G),detail::workaround_cast<T,
decltype(H)>(H)
997constexpr auto tie_as_tuple(T& val, size_t_<33>)
noexcept {
998 auto& [a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,J] =
const_cast<std::remove_cv_t<T>&
>(val);
1000 return ::boost::pfr::detail::make_tuple_of_references(
1001 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
1002 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
1003 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
1004 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
1005 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
1006 detail::workaround_cast<T,
decltype(r)>(r),detail::workaround_cast<T,
decltype(s)>(s),detail::workaround_cast<T,
decltype(t)>(t),
1007 detail::workaround_cast<T,
decltype(u)>(u),detail::workaround_cast<T,
decltype(v)>(v),detail::workaround_cast<T,
decltype(w)>(w),
1008 detail::workaround_cast<T,
decltype(x)>(x),detail::workaround_cast<T,
decltype(y)>(y),detail::workaround_cast<T,
decltype(z)>(z),
1009 detail::workaround_cast<T,
decltype(A)>(A),detail::workaround_cast<T,
decltype(B)>(B),detail::workaround_cast<T,
decltype(C)>(C),
1010 detail::workaround_cast<T,
decltype(D)>(D),detail::workaround_cast<T,
decltype(E)>(E),detail::workaround_cast<T,
decltype(F)>(F),
1011 detail::workaround_cast<T,
decltype(G)>(G),detail::workaround_cast<T,
decltype(H)>(H),detail::workaround_cast<T,
decltype(J)>(J)
1016constexpr auto tie_as_tuple(T& val, size_t_<34>)
noexcept {
1017 auto& [a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,J,K] =
const_cast<std::remove_cv_t<T>&
>(val);
1019 return ::boost::pfr::detail::make_tuple_of_references(
1020 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
1021 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
1022 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
1023 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
1024 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
1025 detail::workaround_cast<T,
decltype(r)>(r),detail::workaround_cast<T,
decltype(s)>(s),detail::workaround_cast<T,
decltype(t)>(t),
1026 detail::workaround_cast<T,
decltype(u)>(u),detail::workaround_cast<T,
decltype(v)>(v),detail::workaround_cast<T,
decltype(w)>(w),
1027 detail::workaround_cast<T,
decltype(x)>(x),detail::workaround_cast<T,
decltype(y)>(y),detail::workaround_cast<T,
decltype(z)>(z),
1028 detail::workaround_cast<T,
decltype(A)>(A),detail::workaround_cast<T,
decltype(B)>(B),detail::workaround_cast<T,
decltype(C)>(C),
1029 detail::workaround_cast<T,
decltype(D)>(D),detail::workaround_cast<T,
decltype(E)>(E),detail::workaround_cast<T,
decltype(F)>(F),
1030 detail::workaround_cast<T,
decltype(G)>(G),detail::workaround_cast<T,
decltype(H)>(H),detail::workaround_cast<T,
decltype(J)>(J),
1031 detail::workaround_cast<T,
decltype(K)>(K)
1036constexpr auto tie_as_tuple(T& val, size_t_<35>)
noexcept {
1037 auto& [a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,J,K,L] =
const_cast<std::remove_cv_t<T>&
>(val);
1039 return ::boost::pfr::detail::make_tuple_of_references(
1040 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
1041 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
1042 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
1043 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
1044 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
1045 detail::workaround_cast<T,
decltype(r)>(r),detail::workaround_cast<T,
decltype(s)>(s),detail::workaround_cast<T,
decltype(t)>(t),
1046 detail::workaround_cast<T,
decltype(u)>(u),detail::workaround_cast<T,
decltype(v)>(v),detail::workaround_cast<T,
decltype(w)>(w),
1047 detail::workaround_cast<T,
decltype(x)>(x),detail::workaround_cast<T,
decltype(y)>(y),detail::workaround_cast<T,
decltype(z)>(z),
1048 detail::workaround_cast<T,
decltype(A)>(A),detail::workaround_cast<T,
decltype(B)>(B),detail::workaround_cast<T,
decltype(C)>(C),
1049 detail::workaround_cast<T,
decltype(D)>(D),detail::workaround_cast<T,
decltype(E)>(E),detail::workaround_cast<T,
decltype(F)>(F),
1050 detail::workaround_cast<T,
decltype(G)>(G),detail::workaround_cast<T,
decltype(H)>(H),detail::workaround_cast<T,
decltype(J)>(J),
1051 detail::workaround_cast<T,
decltype(K)>(K),detail::workaround_cast<T,
decltype(L)>(L)
1056constexpr auto tie_as_tuple(T& val, size_t_<36>)
noexcept {
1057 auto& [a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,J,K,L,M] =
const_cast<std::remove_cv_t<T>&
>(val);
1059 return ::boost::pfr::detail::make_tuple_of_references(
1060 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
1061 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
1062 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
1063 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
1064 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
1065 detail::workaround_cast<T,
decltype(r)>(r),detail::workaround_cast<T,
decltype(s)>(s),detail::workaround_cast<T,
decltype(t)>(t),
1066 detail::workaround_cast<T,
decltype(u)>(u),detail::workaround_cast<T,
decltype(v)>(v),detail::workaround_cast<T,
decltype(w)>(w),
1067 detail::workaround_cast<T,
decltype(x)>(x),detail::workaround_cast<T,
decltype(y)>(y),detail::workaround_cast<T,
decltype(z)>(z),
1068 detail::workaround_cast<T,
decltype(A)>(A),detail::workaround_cast<T,
decltype(B)>(B),detail::workaround_cast<T,
decltype(C)>(C),
1069 detail::workaround_cast<T,
decltype(D)>(D),detail::workaround_cast<T,
decltype(E)>(E),detail::workaround_cast<T,
decltype(F)>(F),
1070 detail::workaround_cast<T,
decltype(G)>(G),detail::workaround_cast<T,
decltype(H)>(H),detail::workaround_cast<T,
decltype(J)>(J),
1071 detail::workaround_cast<T,
decltype(K)>(K),detail::workaround_cast<T,
decltype(L)>(L),detail::workaround_cast<T,
decltype(M)>(M)
1076constexpr auto tie_as_tuple(T& val, size_t_<37>)
noexcept {
1077 auto& [a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,J,K,L,M,N] =
const_cast<std::remove_cv_t<T>&
>(val);
1079 return ::boost::pfr::detail::make_tuple_of_references(
1080 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
1081 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
1082 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
1083 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
1084 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
1085 detail::workaround_cast<T,
decltype(r)>(r),detail::workaround_cast<T,
decltype(s)>(s),detail::workaround_cast<T,
decltype(t)>(t),
1086 detail::workaround_cast<T,
decltype(u)>(u),detail::workaround_cast<T,
decltype(v)>(v),detail::workaround_cast<T,
decltype(w)>(w),
1087 detail::workaround_cast<T,
decltype(x)>(x),detail::workaround_cast<T,
decltype(y)>(y),detail::workaround_cast<T,
decltype(z)>(z),
1088 detail::workaround_cast<T,
decltype(A)>(A),detail::workaround_cast<T,
decltype(B)>(B),detail::workaround_cast<T,
decltype(C)>(C),
1089 detail::workaround_cast<T,
decltype(D)>(D),detail::workaround_cast<T,
decltype(E)>(E),detail::workaround_cast<T,
decltype(F)>(F),
1090 detail::workaround_cast<T,
decltype(G)>(G),detail::workaround_cast<T,
decltype(H)>(H),detail::workaround_cast<T,
decltype(J)>(J),
1091 detail::workaround_cast<T,
decltype(K)>(K),detail::workaround_cast<T,
decltype(L)>(L),detail::workaround_cast<T,
decltype(M)>(M),
1092 detail::workaround_cast<T,
decltype(N)>(N)
1097constexpr auto tie_as_tuple(T& val, size_t_<38>)
noexcept {
1098 auto& [a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,J,K,L,M,N,P] =
const_cast<std::remove_cv_t<T>&
>(val);
1100 return ::boost::pfr::detail::make_tuple_of_references(
1101 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
1102 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
1103 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
1104 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
1105 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
1106 detail::workaround_cast<T,
decltype(r)>(r),detail::workaround_cast<T,
decltype(s)>(s),detail::workaround_cast<T,
decltype(t)>(t),
1107 detail::workaround_cast<T,
decltype(u)>(u),detail::workaround_cast<T,
decltype(v)>(v),detail::workaround_cast<T,
decltype(w)>(w),
1108 detail::workaround_cast<T,
decltype(x)>(x),detail::workaround_cast<T,
decltype(y)>(y),detail::workaround_cast<T,
decltype(z)>(z),
1109 detail::workaround_cast<T,
decltype(A)>(A),detail::workaround_cast<T,
decltype(B)>(B),detail::workaround_cast<T,
decltype(C)>(C),
1110 detail::workaround_cast<T,
decltype(D)>(D),detail::workaround_cast<T,
decltype(E)>(E),detail::workaround_cast<T,
decltype(F)>(F),
1111 detail::workaround_cast<T,
decltype(G)>(G),detail::workaround_cast<T,
decltype(H)>(H),detail::workaround_cast<T,
decltype(J)>(J),
1112 detail::workaround_cast<T,
decltype(K)>(K),detail::workaround_cast<T,
decltype(L)>(L),detail::workaround_cast<T,
decltype(M)>(M),
1113 detail::workaround_cast<T,
decltype(N)>(N),detail::workaround_cast<T,
decltype(P)>(P)
1118constexpr auto tie_as_tuple(T& val, size_t_<39>)
noexcept {
1119 auto& [a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q] =
const_cast<std::remove_cv_t<T>&
>(val);
1121 return ::boost::pfr::detail::make_tuple_of_references(
1122 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
1123 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
1124 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
1125 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
1126 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
1127 detail::workaround_cast<T,
decltype(r)>(r),detail::workaround_cast<T,
decltype(s)>(s),detail::workaround_cast<T,
decltype(t)>(t),
1128 detail::workaround_cast<T,
decltype(u)>(u),detail::workaround_cast<T,
decltype(v)>(v),detail::workaround_cast<T,
decltype(w)>(w),
1129 detail::workaround_cast<T,
decltype(x)>(x),detail::workaround_cast<T,
decltype(y)>(y),detail::workaround_cast<T,
decltype(z)>(z),
1130 detail::workaround_cast<T,
decltype(A)>(A),detail::workaround_cast<T,
decltype(B)>(B),detail::workaround_cast<T,
decltype(C)>(C),
1131 detail::workaround_cast<T,
decltype(D)>(D),detail::workaround_cast<T,
decltype(E)>(E),detail::workaround_cast<T,
decltype(F)>(F),
1132 detail::workaround_cast<T,
decltype(G)>(G),detail::workaround_cast<T,
decltype(H)>(H),detail::workaround_cast<T,
decltype(J)>(J),
1133 detail::workaround_cast<T,
decltype(K)>(K),detail::workaround_cast<T,
decltype(L)>(L),detail::workaround_cast<T,
decltype(M)>(M),
1134 detail::workaround_cast<T,
decltype(N)>(N),detail::workaround_cast<T,
decltype(P)>(P),detail::workaround_cast<T,
decltype(Q)>(Q)
1139constexpr auto tie_as_tuple(T& val, size_t_<40>)
noexcept {
1140 auto& [a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R] =
const_cast<std::remove_cv_t<T>&
>(val);
1142 return ::boost::pfr::detail::make_tuple_of_references(
1143 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
1144 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
1145 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
1146 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
1147 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
1148 detail::workaround_cast<T,
decltype(r)>(r),detail::workaround_cast<T,
decltype(s)>(s),detail::workaround_cast<T,
decltype(t)>(t),
1149 detail::workaround_cast<T,
decltype(u)>(u),detail::workaround_cast<T,
decltype(v)>(v),detail::workaround_cast<T,
decltype(w)>(w),
1150 detail::workaround_cast<T,
decltype(x)>(x),detail::workaround_cast<T,
decltype(y)>(y),detail::workaround_cast<T,
decltype(z)>(z),
1151 detail::workaround_cast<T,
decltype(A)>(A),detail::workaround_cast<T,
decltype(B)>(B),detail::workaround_cast<T,
decltype(C)>(C),
1152 detail::workaround_cast<T,
decltype(D)>(D),detail::workaround_cast<T,
decltype(E)>(E),detail::workaround_cast<T,
decltype(F)>(F),
1153 detail::workaround_cast<T,
decltype(G)>(G),detail::workaround_cast<T,
decltype(H)>(H),detail::workaround_cast<T,
decltype(J)>(J),
1154 detail::workaround_cast<T,
decltype(K)>(K),detail::workaround_cast<T,
decltype(L)>(L),detail::workaround_cast<T,
decltype(M)>(M),
1155 detail::workaround_cast<T,
decltype(N)>(N),detail::workaround_cast<T,
decltype(P)>(P),detail::workaround_cast<T,
decltype(Q)>(Q),
1156 detail::workaround_cast<T,
decltype(R)>(R)
1161constexpr auto tie_as_tuple(T& val, size_t_<41>)
noexcept {
1162 auto& [a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,S] =
const_cast<std::remove_cv_t<T>&
>(val);
1164 return ::boost::pfr::detail::make_tuple_of_references(
1165 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
1166 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
1167 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
1168 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
1169 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
1170 detail::workaround_cast<T,
decltype(r)>(r),detail::workaround_cast<T,
decltype(s)>(s),detail::workaround_cast<T,
decltype(t)>(t),
1171 detail::workaround_cast<T,
decltype(u)>(u),detail::workaround_cast<T,
decltype(v)>(v),detail::workaround_cast<T,
decltype(w)>(w),
1172 detail::workaround_cast<T,
decltype(x)>(x),detail::workaround_cast<T,
decltype(y)>(y),detail::workaround_cast<T,
decltype(z)>(z),
1173 detail::workaround_cast<T,
decltype(A)>(A),detail::workaround_cast<T,
decltype(B)>(B),detail::workaround_cast<T,
decltype(C)>(C),
1174 detail::workaround_cast<T,
decltype(D)>(D),detail::workaround_cast<T,
decltype(E)>(E),detail::workaround_cast<T,
decltype(F)>(F),
1175 detail::workaround_cast<T,
decltype(G)>(G),detail::workaround_cast<T,
decltype(H)>(H),detail::workaround_cast<T,
decltype(J)>(J),
1176 detail::workaround_cast<T,
decltype(K)>(K),detail::workaround_cast<T,
decltype(L)>(L),detail::workaround_cast<T,
decltype(M)>(M),
1177 detail::workaround_cast<T,
decltype(N)>(N),detail::workaround_cast<T,
decltype(P)>(P),detail::workaround_cast<T,
decltype(Q)>(Q),
1178 detail::workaround_cast<T,
decltype(R)>(R),detail::workaround_cast<T,
decltype(S)>(S)
1183constexpr auto tie_as_tuple(T& val, size_t_<42>)
noexcept {
1184 auto& [a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,S,U] =
const_cast<std::remove_cv_t<T>&
>(val);
1186 return ::boost::pfr::detail::make_tuple_of_references(
1187 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
1188 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
1189 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
1190 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
1191 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
1192 detail::workaround_cast<T,
decltype(r)>(r),detail::workaround_cast<T,
decltype(s)>(s),detail::workaround_cast<T,
decltype(t)>(t),
1193 detail::workaround_cast<T,
decltype(u)>(u),detail::workaround_cast<T,
decltype(v)>(v),detail::workaround_cast<T,
decltype(w)>(w),
1194 detail::workaround_cast<T,
decltype(x)>(x),detail::workaround_cast<T,
decltype(y)>(y),detail::workaround_cast<T,
decltype(z)>(z),
1195 detail::workaround_cast<T,
decltype(A)>(A),detail::workaround_cast<T,
decltype(B)>(B),detail::workaround_cast<T,
decltype(C)>(C),
1196 detail::workaround_cast<T,
decltype(D)>(D),detail::workaround_cast<T,
decltype(E)>(E),detail::workaround_cast<T,
decltype(F)>(F),
1197 detail::workaround_cast<T,
decltype(G)>(G),detail::workaround_cast<T,
decltype(H)>(H),detail::workaround_cast<T,
decltype(J)>(J),
1198 detail::workaround_cast<T,
decltype(K)>(K),detail::workaround_cast<T,
decltype(L)>(L),detail::workaround_cast<T,
decltype(M)>(M),
1199 detail::workaround_cast<T,
decltype(N)>(N),detail::workaround_cast<T,
decltype(P)>(P),detail::workaround_cast<T,
decltype(Q)>(Q),
1200 detail::workaround_cast<T,
decltype(R)>(R),detail::workaround_cast<T,
decltype(S)>(S),detail::workaround_cast<T,
decltype(U)>(U)
1205constexpr auto tie_as_tuple(T& val, size_t_<43>)
noexcept {
1206 auto& [a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,S,U,V] =
const_cast<std::remove_cv_t<T>&
>(val);
1208 return ::boost::pfr::detail::make_tuple_of_references(
1209 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
1210 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
1211 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
1212 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
1213 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
1214 detail::workaround_cast<T,
decltype(r)>(r),detail::workaround_cast<T,
decltype(s)>(s),detail::workaround_cast<T,
decltype(t)>(t),
1215 detail::workaround_cast<T,
decltype(u)>(u),detail::workaround_cast<T,
decltype(v)>(v),detail::workaround_cast<T,
decltype(w)>(w),
1216 detail::workaround_cast<T,
decltype(x)>(x),detail::workaround_cast<T,
decltype(y)>(y),detail::workaround_cast<T,
decltype(z)>(z),
1217 detail::workaround_cast<T,
decltype(A)>(A),detail::workaround_cast<T,
decltype(B)>(B),detail::workaround_cast<T,
decltype(C)>(C),
1218 detail::workaround_cast<T,
decltype(D)>(D),detail::workaround_cast<T,
decltype(E)>(E),detail::workaround_cast<T,
decltype(F)>(F),
1219 detail::workaround_cast<T,
decltype(G)>(G),detail::workaround_cast<T,
decltype(H)>(H),detail::workaround_cast<T,
decltype(J)>(J),
1220 detail::workaround_cast<T,
decltype(K)>(K),detail::workaround_cast<T,
decltype(L)>(L),detail::workaround_cast<T,
decltype(M)>(M),
1221 detail::workaround_cast<T,
decltype(N)>(N),detail::workaround_cast<T,
decltype(P)>(P),detail::workaround_cast<T,
decltype(Q)>(Q),
1222 detail::workaround_cast<T,
decltype(R)>(R),detail::workaround_cast<T,
decltype(S)>(S),detail::workaround_cast<T,
decltype(U)>(U),
1223 detail::workaround_cast<T,
decltype(V)>(V)
1228constexpr auto tie_as_tuple(T& val, size_t_<44>)
noexcept {
1229 auto& [a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,S,U,V,W] =
const_cast<std::remove_cv_t<T>&
>(val);
1231 return ::boost::pfr::detail::make_tuple_of_references(
1232 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
1233 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
1234 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
1235 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
1236 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
1237 detail::workaround_cast<T,
decltype(r)>(r),detail::workaround_cast<T,
decltype(s)>(s),detail::workaround_cast<T,
decltype(t)>(t),
1238 detail::workaround_cast<T,
decltype(u)>(u),detail::workaround_cast<T,
decltype(v)>(v),detail::workaround_cast<T,
decltype(w)>(w),
1239 detail::workaround_cast<T,
decltype(x)>(x),detail::workaround_cast<T,
decltype(y)>(y),detail::workaround_cast<T,
decltype(z)>(z),
1240 detail::workaround_cast<T,
decltype(A)>(A),detail::workaround_cast<T,
decltype(B)>(B),detail::workaround_cast<T,
decltype(C)>(C),
1241 detail::workaround_cast<T,
decltype(D)>(D),detail::workaround_cast<T,
decltype(E)>(E),detail::workaround_cast<T,
decltype(F)>(F),
1242 detail::workaround_cast<T,
decltype(G)>(G),detail::workaround_cast<T,
decltype(H)>(H),detail::workaround_cast<T,
decltype(J)>(J),
1243 detail::workaround_cast<T,
decltype(K)>(K),detail::workaround_cast<T,
decltype(L)>(L),detail::workaround_cast<T,
decltype(M)>(M),
1244 detail::workaround_cast<T,
decltype(N)>(N),detail::workaround_cast<T,
decltype(P)>(P),detail::workaround_cast<T,
decltype(Q)>(Q),
1245 detail::workaround_cast<T,
decltype(R)>(R),detail::workaround_cast<T,
decltype(S)>(S),detail::workaround_cast<T,
decltype(U)>(U),
1246 detail::workaround_cast<T,
decltype(V)>(V),detail::workaround_cast<T,
decltype(W)>(W)
1251constexpr auto tie_as_tuple(T& val, size_t_<45>)
noexcept {
1252 auto& [a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,S,U,V,W,X] =
const_cast<std::remove_cv_t<T>&
>(val);
1254 return ::boost::pfr::detail::make_tuple_of_references(
1255 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
1256 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
1257 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
1258 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
1259 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
1260 detail::workaround_cast<T,
decltype(r)>(r),detail::workaround_cast<T,
decltype(s)>(s),detail::workaround_cast<T,
decltype(t)>(t),
1261 detail::workaround_cast<T,
decltype(u)>(u),detail::workaround_cast<T,
decltype(v)>(v),detail::workaround_cast<T,
decltype(w)>(w),
1262 detail::workaround_cast<T,
decltype(x)>(x),detail::workaround_cast<T,
decltype(y)>(y),detail::workaround_cast<T,
decltype(z)>(z),
1263 detail::workaround_cast<T,
decltype(A)>(A),detail::workaround_cast<T,
decltype(B)>(B),detail::workaround_cast<T,
decltype(C)>(C),
1264 detail::workaround_cast<T,
decltype(D)>(D),detail::workaround_cast<T,
decltype(E)>(E),detail::workaround_cast<T,
decltype(F)>(F),
1265 detail::workaround_cast<T,
decltype(G)>(G),detail::workaround_cast<T,
decltype(H)>(H),detail::workaround_cast<T,
decltype(J)>(J),
1266 detail::workaround_cast<T,
decltype(K)>(K),detail::workaround_cast<T,
decltype(L)>(L),detail::workaround_cast<T,
decltype(M)>(M),
1267 detail::workaround_cast<T,
decltype(N)>(N),detail::workaround_cast<T,
decltype(P)>(P),detail::workaround_cast<T,
decltype(Q)>(Q),
1268 detail::workaround_cast<T,
decltype(R)>(R),detail::workaround_cast<T,
decltype(S)>(S),detail::workaround_cast<T,
decltype(U)>(U),
1269 detail::workaround_cast<T,
decltype(V)>(V),detail::workaround_cast<T,
decltype(W)>(W),detail::workaround_cast<T,
decltype(X)>(X)
1274constexpr auto tie_as_tuple(T& val, size_t_<46>)
noexcept {
1275 auto& [a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,S,U,V,W,X,Y] =
const_cast<std::remove_cv_t<T>&
>(val);
1277 return ::boost::pfr::detail::make_tuple_of_references(
1278 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
1279 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
1280 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
1281 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
1282 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
1283 detail::workaround_cast<T,
decltype(r)>(r),detail::workaround_cast<T,
decltype(s)>(s),detail::workaround_cast<T,
decltype(t)>(t),
1284 detail::workaround_cast<T,
decltype(u)>(u),detail::workaround_cast<T,
decltype(v)>(v),detail::workaround_cast<T,
decltype(w)>(w),
1285 detail::workaround_cast<T,
decltype(x)>(x),detail::workaround_cast<T,
decltype(y)>(y),detail::workaround_cast<T,
decltype(z)>(z),
1286 detail::workaround_cast<T,
decltype(A)>(A),detail::workaround_cast<T,
decltype(B)>(B),detail::workaround_cast<T,
decltype(C)>(C),
1287 detail::workaround_cast<T,
decltype(D)>(D),detail::workaround_cast<T,
decltype(E)>(E),detail::workaround_cast<T,
decltype(F)>(F),
1288 detail::workaround_cast<T,
decltype(G)>(G),detail::workaround_cast<T,
decltype(H)>(H),detail::workaround_cast<T,
decltype(J)>(J),
1289 detail::workaround_cast<T,
decltype(K)>(K),detail::workaround_cast<T,
decltype(L)>(L),detail::workaround_cast<T,
decltype(M)>(M),
1290 detail::workaround_cast<T,
decltype(N)>(N),detail::workaround_cast<T,
decltype(P)>(P),detail::workaround_cast<T,
decltype(Q)>(Q),
1291 detail::workaround_cast<T,
decltype(R)>(R),detail::workaround_cast<T,
decltype(S)>(S),detail::workaround_cast<T,
decltype(U)>(U),
1292 detail::workaround_cast<T,
decltype(V)>(V),detail::workaround_cast<T,
decltype(W)>(W),detail::workaround_cast<T,
decltype(X)>(X),
1293 detail::workaround_cast<T,
decltype(Y)>(Y)
1298constexpr auto tie_as_tuple(T& val, size_t_<47>)
noexcept {
1299 auto& [a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,S,U,V,W,X,Y,Z] =
const_cast<std::remove_cv_t<T>&
>(val);
1301 return ::boost::pfr::detail::make_tuple_of_references(
1302 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
1303 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
1304 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
1305 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
1306 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
1307 detail::workaround_cast<T,
decltype(r)>(r),detail::workaround_cast<T,
decltype(s)>(s),detail::workaround_cast<T,
decltype(t)>(t),
1308 detail::workaround_cast<T,
decltype(u)>(u),detail::workaround_cast<T,
decltype(v)>(v),detail::workaround_cast<T,
decltype(w)>(w),
1309 detail::workaround_cast<T,
decltype(x)>(x),detail::workaround_cast<T,
decltype(y)>(y),detail::workaround_cast<T,
decltype(z)>(z),
1310 detail::workaround_cast<T,
decltype(A)>(A),detail::workaround_cast<T,
decltype(B)>(B),detail::workaround_cast<T,
decltype(C)>(C),
1311 detail::workaround_cast<T,
decltype(D)>(D),detail::workaround_cast<T,
decltype(E)>(E),detail::workaround_cast<T,
decltype(F)>(F),
1312 detail::workaround_cast<T,
decltype(G)>(G),detail::workaround_cast<T,
decltype(H)>(H),detail::workaround_cast<T,
decltype(J)>(J),
1313 detail::workaround_cast<T,
decltype(K)>(K),detail::workaround_cast<T,
decltype(L)>(L),detail::workaround_cast<T,
decltype(M)>(M),
1314 detail::workaround_cast<T,
decltype(N)>(N),detail::workaround_cast<T,
decltype(P)>(P),detail::workaround_cast<T,
decltype(Q)>(Q),
1315 detail::workaround_cast<T,
decltype(R)>(R),detail::workaround_cast<T,
decltype(S)>(S),detail::workaround_cast<T,
decltype(U)>(U),
1316 detail::workaround_cast<T,
decltype(V)>(V),detail::workaround_cast<T,
decltype(W)>(W),detail::workaround_cast<T,
decltype(X)>(X),
1317 detail::workaround_cast<T,
decltype(Y)>(Y),detail::workaround_cast<T,
decltype(Z)>(Z)
1322constexpr auto tie_as_tuple(T& val, size_t_<48>)
noexcept {
1324 a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,S,U,V,W,X,Y,Z,
1326 ] =
const_cast<std::remove_cv_t<T>&
>(val);
1328 return ::boost::pfr::detail::make_tuple_of_references(
1329 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
1330 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
1331 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
1332 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
1333 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
1334 detail::workaround_cast<T,
decltype(r)>(r),detail::workaround_cast<T,
decltype(s)>(s),detail::workaround_cast<T,
decltype(t)>(t),
1335 detail::workaround_cast<T,
decltype(u)>(u),detail::workaround_cast<T,
decltype(v)>(v),detail::workaround_cast<T,
decltype(w)>(w),
1336 detail::workaround_cast<T,
decltype(x)>(x),detail::workaround_cast<T,
decltype(y)>(y),detail::workaround_cast<T,
decltype(z)>(z),
1337 detail::workaround_cast<T,
decltype(A)>(A),detail::workaround_cast<T,
decltype(B)>(B),detail::workaround_cast<T,
decltype(C)>(C),
1338 detail::workaround_cast<T,
decltype(D)>(D),detail::workaround_cast<T,
decltype(E)>(E),detail::workaround_cast<T,
decltype(F)>(F),
1339 detail::workaround_cast<T,
decltype(G)>(G),detail::workaround_cast<T,
decltype(H)>(H),detail::workaround_cast<T,
decltype(J)>(J),
1340 detail::workaround_cast<T,
decltype(K)>(K),detail::workaround_cast<T,
decltype(L)>(L),detail::workaround_cast<T,
decltype(M)>(M),
1341 detail::workaround_cast<T,
decltype(N)>(N),detail::workaround_cast<T,
decltype(P)>(P),detail::workaround_cast<T,
decltype(Q)>(Q),
1342 detail::workaround_cast<T,
decltype(R)>(R),detail::workaround_cast<T,
decltype(S)>(S),detail::workaround_cast<T,
decltype(U)>(U),
1343 detail::workaround_cast<T,
decltype(V)>(V),detail::workaround_cast<T,
decltype(W)>(W),detail::workaround_cast<T,
decltype(X)>(X),
1344 detail::workaround_cast<T,
decltype(Y)>(Y),detail::workaround_cast<T,
decltype(Z)>(Z),detail::workaround_cast<T,
decltype(aa)>(aa)
1349constexpr auto tie_as_tuple(T& val, size_t_<49>)
noexcept {
1351 a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,S,U,V,W,X,Y,Z,
1353 ] =
const_cast<std::remove_cv_t<T>&
>(val);
1355 return ::boost::pfr::detail::make_tuple_of_references(
1356 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
1357 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
1358 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
1359 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
1360 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
1361 detail::workaround_cast<T,
decltype(r)>(r),detail::workaround_cast<T,
decltype(s)>(s),detail::workaround_cast<T,
decltype(t)>(t),
1362 detail::workaround_cast<T,
decltype(u)>(u),detail::workaround_cast<T,
decltype(v)>(v),detail::workaround_cast<T,
decltype(w)>(w),
1363 detail::workaround_cast<T,
decltype(x)>(x),detail::workaround_cast<T,
decltype(y)>(y),detail::workaround_cast<T,
decltype(z)>(z),
1364 detail::workaround_cast<T,
decltype(A)>(A),detail::workaround_cast<T,
decltype(B)>(B),detail::workaround_cast<T,
decltype(C)>(C),
1365 detail::workaround_cast<T,
decltype(D)>(D),detail::workaround_cast<T,
decltype(E)>(E),detail::workaround_cast<T,
decltype(F)>(F),
1366 detail::workaround_cast<T,
decltype(G)>(G),detail::workaround_cast<T,
decltype(H)>(H),detail::workaround_cast<T,
decltype(J)>(J),
1367 detail::workaround_cast<T,
decltype(K)>(K),detail::workaround_cast<T,
decltype(L)>(L),detail::workaround_cast<T,
decltype(M)>(M),
1368 detail::workaround_cast<T,
decltype(N)>(N),detail::workaround_cast<T,
decltype(P)>(P),detail::workaround_cast<T,
decltype(Q)>(Q),
1369 detail::workaround_cast<T,
decltype(R)>(R),detail::workaround_cast<T,
decltype(S)>(S),detail::workaround_cast<T,
decltype(U)>(U),
1370 detail::workaround_cast<T,
decltype(V)>(V),detail::workaround_cast<T,
decltype(W)>(W),detail::workaround_cast<T,
decltype(X)>(X),
1371 detail::workaround_cast<T,
decltype(Y)>(Y),detail::workaround_cast<T,
decltype(Z)>(Z),detail::workaround_cast<T,
decltype(aa)>(aa),
1372 detail::workaround_cast<T,
decltype(ab)>(ab)
1377constexpr auto tie_as_tuple(T& val, size_t_<50>)
noexcept {
1379 a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,S,U,V,W,X,Y,Z,
1381 ] =
const_cast<std::remove_cv_t<T>&
>(val);
1383 return ::boost::pfr::detail::make_tuple_of_references(
1384 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
1385 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
1386 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
1387 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
1388 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
1389 detail::workaround_cast<T,
decltype(r)>(r),detail::workaround_cast<T,
decltype(s)>(s),detail::workaround_cast<T,
decltype(t)>(t),
1390 detail::workaround_cast<T,
decltype(u)>(u),detail::workaround_cast<T,
decltype(v)>(v),detail::workaround_cast<T,
decltype(w)>(w),
1391 detail::workaround_cast<T,
decltype(x)>(x),detail::workaround_cast<T,
decltype(y)>(y),detail::workaround_cast<T,
decltype(z)>(z),
1392 detail::workaround_cast<T,
decltype(A)>(A),detail::workaround_cast<T,
decltype(B)>(B),detail::workaround_cast<T,
decltype(C)>(C),
1393 detail::workaround_cast<T,
decltype(D)>(D),detail::workaround_cast<T,
decltype(E)>(E),detail::workaround_cast<T,
decltype(F)>(F),
1394 detail::workaround_cast<T,
decltype(G)>(G),detail::workaround_cast<T,
decltype(H)>(H),detail::workaround_cast<T,
decltype(J)>(J),
1395 detail::workaround_cast<T,
decltype(K)>(K),detail::workaround_cast<T,
decltype(L)>(L),detail::workaround_cast<T,
decltype(M)>(M),
1396 detail::workaround_cast<T,
decltype(N)>(N),detail::workaround_cast<T,
decltype(P)>(P),detail::workaround_cast<T,
decltype(Q)>(Q),
1397 detail::workaround_cast<T,
decltype(R)>(R),detail::workaround_cast<T,
decltype(S)>(S),detail::workaround_cast<T,
decltype(U)>(U),
1398 detail::workaround_cast<T,
decltype(V)>(V),detail::workaround_cast<T,
decltype(W)>(W),detail::workaround_cast<T,
decltype(X)>(X),
1399 detail::workaround_cast<T,
decltype(Y)>(Y),detail::workaround_cast<T,
decltype(Z)>(Z),detail::workaround_cast<T,
decltype(aa)>(aa),
1400 detail::workaround_cast<T,
decltype(ab)>(ab),detail::workaround_cast<T,
decltype(ac)>(ac)
1405constexpr auto tie_as_tuple(T& val, size_t_<51>)
noexcept {
1407 a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,S,U,V,W,X,Y,Z,
1409 ] =
const_cast<std::remove_cv_t<T>&
>(val);
1411 return ::boost::pfr::detail::make_tuple_of_references(
1412 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
1413 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
1414 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
1415 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
1416 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
1417 detail::workaround_cast<T,
decltype(r)>(r),detail::workaround_cast<T,
decltype(s)>(s),detail::workaround_cast<T,
decltype(t)>(t),
1418 detail::workaround_cast<T,
decltype(u)>(u),detail::workaround_cast<T,
decltype(v)>(v),detail::workaround_cast<T,
decltype(w)>(w),
1419 detail::workaround_cast<T,
decltype(x)>(x),detail::workaround_cast<T,
decltype(y)>(y),detail::workaround_cast<T,
decltype(z)>(z),
1420 detail::workaround_cast<T,
decltype(A)>(A),detail::workaround_cast<T,
decltype(B)>(B),detail::workaround_cast<T,
decltype(C)>(C),
1421 detail::workaround_cast<T,
decltype(D)>(D),detail::workaround_cast<T,
decltype(E)>(E),detail::workaround_cast<T,
decltype(F)>(F),
1422 detail::workaround_cast<T,
decltype(G)>(G),detail::workaround_cast<T,
decltype(H)>(H),detail::workaround_cast<T,
decltype(J)>(J),
1423 detail::workaround_cast<T,
decltype(K)>(K),detail::workaround_cast<T,
decltype(L)>(L),detail::workaround_cast<T,
decltype(M)>(M),
1424 detail::workaround_cast<T,
decltype(N)>(N),detail::workaround_cast<T,
decltype(P)>(P),detail::workaround_cast<T,
decltype(Q)>(Q),
1425 detail::workaround_cast<T,
decltype(R)>(R),detail::workaround_cast<T,
decltype(S)>(S),detail::workaround_cast<T,
decltype(U)>(U),
1426 detail::workaround_cast<T,
decltype(V)>(V),detail::workaround_cast<T,
decltype(W)>(W),detail::workaround_cast<T,
decltype(X)>(X),
1427 detail::workaround_cast<T,
decltype(Y)>(Y),detail::workaround_cast<T,
decltype(Z)>(Z),detail::workaround_cast<T,
decltype(aa)>(aa),
1428 detail::workaround_cast<T,
decltype(ab)>(ab),detail::workaround_cast<T,
decltype(ac)>(ac),detail::workaround_cast<T,
decltype(ad)>(ad)
1433constexpr auto tie_as_tuple(T& val, size_t_<52>)
noexcept {
1435 a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,S,U,V,W,X,Y,Z,
1437 ] =
const_cast<std::remove_cv_t<T>&
>(val);
1439 return ::boost::pfr::detail::make_tuple_of_references(
1440 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
1441 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
1442 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
1443 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
1444 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
1445 detail::workaround_cast<T,
decltype(r)>(r),detail::workaround_cast<T,
decltype(s)>(s),detail::workaround_cast<T,
decltype(t)>(t),
1446 detail::workaround_cast<T,
decltype(u)>(u),detail::workaround_cast<T,
decltype(v)>(v),detail::workaround_cast<T,
decltype(w)>(w),
1447 detail::workaround_cast<T,
decltype(x)>(x),detail::workaround_cast<T,
decltype(y)>(y),detail::workaround_cast<T,
decltype(z)>(z),
1448 detail::workaround_cast<T,
decltype(A)>(A),detail::workaround_cast<T,
decltype(B)>(B),detail::workaround_cast<T,
decltype(C)>(C),
1449 detail::workaround_cast<T,
decltype(D)>(D),detail::workaround_cast<T,
decltype(E)>(E),detail::workaround_cast<T,
decltype(F)>(F),
1450 detail::workaround_cast<T,
decltype(G)>(G),detail::workaround_cast<T,
decltype(H)>(H),detail::workaround_cast<T,
decltype(J)>(J),
1451 detail::workaround_cast<T,
decltype(K)>(K),detail::workaround_cast<T,
decltype(L)>(L),detail::workaround_cast<T,
decltype(M)>(M),
1452 detail::workaround_cast<T,
decltype(N)>(N),detail::workaround_cast<T,
decltype(P)>(P),detail::workaround_cast<T,
decltype(Q)>(Q),
1453 detail::workaround_cast<T,
decltype(R)>(R),detail::workaround_cast<T,
decltype(S)>(S),detail::workaround_cast<T,
decltype(U)>(U),
1454 detail::workaround_cast<T,
decltype(V)>(V),detail::workaround_cast<T,
decltype(W)>(W),detail::workaround_cast<T,
decltype(X)>(X),
1455 detail::workaround_cast<T,
decltype(Y)>(Y),detail::workaround_cast<T,
decltype(Z)>(Z),detail::workaround_cast<T,
decltype(aa)>(aa),
1456 detail::workaround_cast<T,
decltype(ab)>(ab),detail::workaround_cast<T,
decltype(ac)>(ac),detail::workaround_cast<T,
decltype(ad)>(ad),
1457 detail::workaround_cast<T,
decltype(ae)>(ae)
1462constexpr auto tie_as_tuple(T& val, size_t_<53>)
noexcept {
1464 a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,S,U,V,W,X,Y,Z,
1466 ] =
const_cast<std::remove_cv_t<T>&
>(val);
1468 return ::boost::pfr::detail::make_tuple_of_references(
1469 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
1470 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
1471 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
1472 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
1473 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
1474 detail::workaround_cast<T,
decltype(r)>(r),detail::workaround_cast<T,
decltype(s)>(s),detail::workaround_cast<T,
decltype(t)>(t),
1475 detail::workaround_cast<T,
decltype(u)>(u),detail::workaround_cast<T,
decltype(v)>(v),detail::workaround_cast<T,
decltype(w)>(w),
1476 detail::workaround_cast<T,
decltype(x)>(x),detail::workaround_cast<T,
decltype(y)>(y),detail::workaround_cast<T,
decltype(z)>(z),
1477 detail::workaround_cast<T,
decltype(A)>(A),detail::workaround_cast<T,
decltype(B)>(B),detail::workaround_cast<T,
decltype(C)>(C),
1478 detail::workaround_cast<T,
decltype(D)>(D),detail::workaround_cast<T,
decltype(E)>(E),detail::workaround_cast<T,
decltype(F)>(F),
1479 detail::workaround_cast<T,
decltype(G)>(G),detail::workaround_cast<T,
decltype(H)>(H),detail::workaround_cast<T,
decltype(J)>(J),
1480 detail::workaround_cast<T,
decltype(K)>(K),detail::workaround_cast<T,
decltype(L)>(L),detail::workaround_cast<T,
decltype(M)>(M),
1481 detail::workaround_cast<T,
decltype(N)>(N),detail::workaround_cast<T,
decltype(P)>(P),detail::workaround_cast<T,
decltype(Q)>(Q),
1482 detail::workaround_cast<T,
decltype(R)>(R),detail::workaround_cast<T,
decltype(S)>(S),detail::workaround_cast<T,
decltype(U)>(U),
1483 detail::workaround_cast<T,
decltype(V)>(V),detail::workaround_cast<T,
decltype(W)>(W),detail::workaround_cast<T,
decltype(X)>(X),
1484 detail::workaround_cast<T,
decltype(Y)>(Y),detail::workaround_cast<T,
decltype(Z)>(Z),detail::workaround_cast<T,
decltype(aa)>(aa),
1485 detail::workaround_cast<T,
decltype(ab)>(ab),detail::workaround_cast<T,
decltype(ac)>(ac),detail::workaround_cast<T,
decltype(ad)>(ad),
1486 detail::workaround_cast<T,
decltype(ae)>(ae),detail::workaround_cast<T,
decltype(af)>(af)
1491constexpr auto tie_as_tuple(T& val, size_t_<54>)
noexcept {
1493 a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,S,U,V,W,X,Y,Z,
1494 aa,ab,ac,ad,ae,af,ag
1495 ] =
const_cast<std::remove_cv_t<T>&
>(val);
1497 return ::boost::pfr::detail::make_tuple_of_references(
1498 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
1499 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
1500 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
1501 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
1502 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
1503 detail::workaround_cast<T,
decltype(r)>(r),detail::workaround_cast<T,
decltype(s)>(s),detail::workaround_cast<T,
decltype(t)>(t),
1504 detail::workaround_cast<T,
decltype(u)>(u),detail::workaround_cast<T,
decltype(v)>(v),detail::workaround_cast<T,
decltype(w)>(w),
1505 detail::workaround_cast<T,
decltype(x)>(x),detail::workaround_cast<T,
decltype(y)>(y),detail::workaround_cast<T,
decltype(z)>(z),
1506 detail::workaround_cast<T,
decltype(A)>(A),detail::workaround_cast<T,
decltype(B)>(B),detail::workaround_cast<T,
decltype(C)>(C),
1507 detail::workaround_cast<T,
decltype(D)>(D),detail::workaround_cast<T,
decltype(E)>(E),detail::workaround_cast<T,
decltype(F)>(F),
1508 detail::workaround_cast<T,
decltype(G)>(G),detail::workaround_cast<T,
decltype(H)>(H),detail::workaround_cast<T,
decltype(J)>(J),
1509 detail::workaround_cast<T,
decltype(K)>(K),detail::workaround_cast<T,
decltype(L)>(L),detail::workaround_cast<T,
decltype(M)>(M),
1510 detail::workaround_cast<T,
decltype(N)>(N),detail::workaround_cast<T,
decltype(P)>(P),detail::workaround_cast<T,
decltype(Q)>(Q),
1511 detail::workaround_cast<T,
decltype(R)>(R),detail::workaround_cast<T,
decltype(S)>(S),detail::workaround_cast<T,
decltype(U)>(U),
1512 detail::workaround_cast<T,
decltype(V)>(V),detail::workaround_cast<T,
decltype(W)>(W),detail::workaround_cast<T,
decltype(X)>(X),
1513 detail::workaround_cast<T,
decltype(Y)>(Y),detail::workaround_cast<T,
decltype(Z)>(Z),detail::workaround_cast<T,
decltype(aa)>(aa),
1514 detail::workaround_cast<T,
decltype(ab)>(ab),detail::workaround_cast<T,
decltype(ac)>(ac),detail::workaround_cast<T,
decltype(ad)>(ad),
1515 detail::workaround_cast<T,
decltype(ae)>(ae),detail::workaround_cast<T,
decltype(af)>(af),detail::workaround_cast<T,
decltype(ag)>(ag)
1520constexpr auto tie_as_tuple(T& val, size_t_<55>)
noexcept {
1522 a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,S,U,V,W,X,Y,Z,
1523 aa,ab,ac,ad,ae,af,ag,ah
1524 ] =
const_cast<std::remove_cv_t<T>&
>(val);
1526 return ::boost::pfr::detail::make_tuple_of_references(
1527 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
1528 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
1529 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
1530 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
1531 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
1532 detail::workaround_cast<T,
decltype(r)>(r),detail::workaround_cast<T,
decltype(s)>(s),detail::workaround_cast<T,
decltype(t)>(t),
1533 detail::workaround_cast<T,
decltype(u)>(u),detail::workaround_cast<T,
decltype(v)>(v),detail::workaround_cast<T,
decltype(w)>(w),
1534 detail::workaround_cast<T,
decltype(x)>(x),detail::workaround_cast<T,
decltype(y)>(y),detail::workaround_cast<T,
decltype(z)>(z),
1535 detail::workaround_cast<T,
decltype(A)>(A),detail::workaround_cast<T,
decltype(B)>(B),detail::workaround_cast<T,
decltype(C)>(C),
1536 detail::workaround_cast<T,
decltype(D)>(D),detail::workaround_cast<T,
decltype(E)>(E),detail::workaround_cast<T,
decltype(F)>(F),
1537 detail::workaround_cast<T,
decltype(G)>(G),detail::workaround_cast<T,
decltype(H)>(H),detail::workaround_cast<T,
decltype(J)>(J),
1538 detail::workaround_cast<T,
decltype(K)>(K),detail::workaround_cast<T,
decltype(L)>(L),detail::workaround_cast<T,
decltype(M)>(M),
1539 detail::workaround_cast<T,
decltype(N)>(N),detail::workaround_cast<T,
decltype(P)>(P),detail::workaround_cast<T,
decltype(Q)>(Q),
1540 detail::workaround_cast<T,
decltype(R)>(R),detail::workaround_cast<T,
decltype(S)>(S),detail::workaround_cast<T,
decltype(U)>(U),
1541 detail::workaround_cast<T,
decltype(V)>(V),detail::workaround_cast<T,
decltype(W)>(W),detail::workaround_cast<T,
decltype(X)>(X),
1542 detail::workaround_cast<T,
decltype(Y)>(Y),detail::workaround_cast<T,
decltype(Z)>(Z),detail::workaround_cast<T,
decltype(aa)>(aa),
1543 detail::workaround_cast<T,
decltype(ab)>(ab),detail::workaround_cast<T,
decltype(ac)>(ac),detail::workaround_cast<T,
decltype(ad)>(ad),
1544 detail::workaround_cast<T,
decltype(ae)>(ae),detail::workaround_cast<T,
decltype(af)>(af),detail::workaround_cast<T,
decltype(ag)>(ag),
1545 detail::workaround_cast<T,
decltype(ah)>(ah)
1550constexpr auto tie_as_tuple(T& val, size_t_<56>)
noexcept {
1552 a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,S,U,V,W,X,Y,Z,
1553 aa,ab,ac,ad,ae,af,ag,ah,aj
1554 ] =
const_cast<std::remove_cv_t<T>&
>(val);
1556 return ::boost::pfr::detail::make_tuple_of_references(
1557 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
1558 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
1559 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
1560 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
1561 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
1562 detail::workaround_cast<T,
decltype(r)>(r),detail::workaround_cast<T,
decltype(s)>(s),detail::workaround_cast<T,
decltype(t)>(t),
1563 detail::workaround_cast<T,
decltype(u)>(u),detail::workaround_cast<T,
decltype(v)>(v),detail::workaround_cast<T,
decltype(w)>(w),
1564 detail::workaround_cast<T,
decltype(x)>(x),detail::workaround_cast<T,
decltype(y)>(y),detail::workaround_cast<T,
decltype(z)>(z),
1565 detail::workaround_cast<T,
decltype(A)>(A),detail::workaround_cast<T,
decltype(B)>(B),detail::workaround_cast<T,
decltype(C)>(C),
1566 detail::workaround_cast<T,
decltype(D)>(D),detail::workaround_cast<T,
decltype(E)>(E),detail::workaround_cast<T,
decltype(F)>(F),
1567 detail::workaround_cast<T,
decltype(G)>(G),detail::workaround_cast<T,
decltype(H)>(H),detail::workaround_cast<T,
decltype(J)>(J),
1568 detail::workaround_cast<T,
decltype(K)>(K),detail::workaround_cast<T,
decltype(L)>(L),detail::workaround_cast<T,
decltype(M)>(M),
1569 detail::workaround_cast<T,
decltype(N)>(N),detail::workaround_cast<T,
decltype(P)>(P),detail::workaround_cast<T,
decltype(Q)>(Q),
1570 detail::workaround_cast<T,
decltype(R)>(R),detail::workaround_cast<T,
decltype(S)>(S),detail::workaround_cast<T,
decltype(U)>(U),
1571 detail::workaround_cast<T,
decltype(V)>(V),detail::workaround_cast<T,
decltype(W)>(W),detail::workaround_cast<T,
decltype(X)>(X),
1572 detail::workaround_cast<T,
decltype(Y)>(Y),detail::workaround_cast<T,
decltype(Z)>(Z),detail::workaround_cast<T,
decltype(aa)>(aa),
1573 detail::workaround_cast<T,
decltype(ab)>(ab),detail::workaround_cast<T,
decltype(ac)>(ac),detail::workaround_cast<T,
decltype(ad)>(ad),
1574 detail::workaround_cast<T,
decltype(ae)>(ae),detail::workaround_cast<T,
decltype(af)>(af),detail::workaround_cast<T,
decltype(ag)>(ag),
1575 detail::workaround_cast<T,
decltype(ah)>(ah),detail::workaround_cast<T,
decltype(aj)>(aj)
1580constexpr auto tie_as_tuple(T& val, size_t_<57>)
noexcept {
1582 a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,S,U,V,W,X,Y,Z,
1583 aa,ab,ac,ad,ae,af,ag,ah,aj,ak
1584 ] =
const_cast<std::remove_cv_t<T>&
>(val);
1586 return ::boost::pfr::detail::make_tuple_of_references(
1587 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
1588 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
1589 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
1590 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
1591 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
1592 detail::workaround_cast<T,
decltype(r)>(r),detail::workaround_cast<T,
decltype(s)>(s),detail::workaround_cast<T,
decltype(t)>(t),
1593 detail::workaround_cast<T,
decltype(u)>(u),detail::workaround_cast<T,
decltype(v)>(v),detail::workaround_cast<T,
decltype(w)>(w),
1594 detail::workaround_cast<T,
decltype(x)>(x),detail::workaround_cast<T,
decltype(y)>(y),detail::workaround_cast<T,
decltype(z)>(z),
1595 detail::workaround_cast<T,
decltype(A)>(A),detail::workaround_cast<T,
decltype(B)>(B),detail::workaround_cast<T,
decltype(C)>(C),
1596 detail::workaround_cast<T,
decltype(D)>(D),detail::workaround_cast<T,
decltype(E)>(E),detail::workaround_cast<T,
decltype(F)>(F),
1597 detail::workaround_cast<T,
decltype(G)>(G),detail::workaround_cast<T,
decltype(H)>(H),detail::workaround_cast<T,
decltype(J)>(J),
1598 detail::workaround_cast<T,
decltype(K)>(K),detail::workaround_cast<T,
decltype(L)>(L),detail::workaround_cast<T,
decltype(M)>(M),
1599 detail::workaround_cast<T,
decltype(N)>(N),detail::workaround_cast<T,
decltype(P)>(P),detail::workaround_cast<T,
decltype(Q)>(Q),
1600 detail::workaround_cast<T,
decltype(R)>(R),detail::workaround_cast<T,
decltype(S)>(S),detail::workaround_cast<T,
decltype(U)>(U),
1601 detail::workaround_cast<T,
decltype(V)>(V),detail::workaround_cast<T,
decltype(W)>(W),detail::workaround_cast<T,
decltype(X)>(X),
1602 detail::workaround_cast<T,
decltype(Y)>(Y),detail::workaround_cast<T,
decltype(Z)>(Z),detail::workaround_cast<T,
decltype(aa)>(aa),
1603 detail::workaround_cast<T,
decltype(ab)>(ab),detail::workaround_cast<T,
decltype(ac)>(ac),detail::workaround_cast<T,
decltype(ad)>(ad),
1604 detail::workaround_cast<T,
decltype(ae)>(ae),detail::workaround_cast<T,
decltype(af)>(af),detail::workaround_cast<T,
decltype(ag)>(ag),
1605 detail::workaround_cast<T,
decltype(ah)>(ah),detail::workaround_cast<T,
decltype(aj)>(aj),detail::workaround_cast<T,
decltype(ak)>(ak)
1610constexpr auto tie_as_tuple(T& val, size_t_<58>)
noexcept {
1612 a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,S,U,V,W,X,Y,Z,
1613 aa,ab,ac,ad,ae,af,ag,ah,aj,ak,al
1614 ] =
const_cast<std::remove_cv_t<T>&
>(val);
1616 return ::boost::pfr::detail::make_tuple_of_references(
1617 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
1618 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
1619 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
1620 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
1621 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
1622 detail::workaround_cast<T,
decltype(r)>(r),detail::workaround_cast<T,
decltype(s)>(s),detail::workaround_cast<T,
decltype(t)>(t),
1623 detail::workaround_cast<T,
decltype(u)>(u),detail::workaround_cast<T,
decltype(v)>(v),detail::workaround_cast<T,
decltype(w)>(w),
1624 detail::workaround_cast<T,
decltype(x)>(x),detail::workaround_cast<T,
decltype(y)>(y),detail::workaround_cast<T,
decltype(z)>(z),
1625 detail::workaround_cast<T,
decltype(A)>(A),detail::workaround_cast<T,
decltype(B)>(B),detail::workaround_cast<T,
decltype(C)>(C),
1626 detail::workaround_cast<T,
decltype(D)>(D),detail::workaround_cast<T,
decltype(E)>(E),detail::workaround_cast<T,
decltype(F)>(F),
1627 detail::workaround_cast<T,
decltype(G)>(G),detail::workaround_cast<T,
decltype(H)>(H),detail::workaround_cast<T,
decltype(J)>(J),
1628 detail::workaround_cast<T,
decltype(K)>(K),detail::workaround_cast<T,
decltype(L)>(L),detail::workaround_cast<T,
decltype(M)>(M),
1629 detail::workaround_cast<T,
decltype(N)>(N),detail::workaround_cast<T,
decltype(P)>(P),detail::workaround_cast<T,
decltype(Q)>(Q),
1630 detail::workaround_cast<T,
decltype(R)>(R),detail::workaround_cast<T,
decltype(S)>(S),detail::workaround_cast<T,
decltype(U)>(U),
1631 detail::workaround_cast<T,
decltype(V)>(V),detail::workaround_cast<T,
decltype(W)>(W),detail::workaround_cast<T,
decltype(X)>(X),
1632 detail::workaround_cast<T,
decltype(Y)>(Y),detail::workaround_cast<T,
decltype(Z)>(Z),detail::workaround_cast<T,
decltype(aa)>(aa),
1633 detail::workaround_cast<T,
decltype(ab)>(ab),detail::workaround_cast<T,
decltype(ac)>(ac),detail::workaround_cast<T,
decltype(ad)>(ad),
1634 detail::workaround_cast<T,
decltype(ae)>(ae),detail::workaround_cast<T,
decltype(af)>(af),detail::workaround_cast<T,
decltype(ag)>(ag),
1635 detail::workaround_cast<T,
decltype(ah)>(ah),detail::workaround_cast<T,
decltype(aj)>(aj),detail::workaround_cast<T,
decltype(ak)>(ak),
1636 detail::workaround_cast<T,
decltype(al)>(al)
1641constexpr auto tie_as_tuple(T& val, size_t_<59>)
noexcept {
1643 a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,S,U,V,W,X,Y,Z,
1644 aa,ab,ac,ad,ae,af,ag,ah,aj,ak,al,am
1645 ] =
const_cast<std::remove_cv_t<T>&
>(val);
1647 return ::boost::pfr::detail::make_tuple_of_references(
1648 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
1649 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
1650 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
1651 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
1652 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
1653 detail::workaround_cast<T,
decltype(r)>(r),detail::workaround_cast<T,
decltype(s)>(s),detail::workaround_cast<T,
decltype(t)>(t),
1654 detail::workaround_cast<T,
decltype(u)>(u),detail::workaround_cast<T,
decltype(v)>(v),detail::workaround_cast<T,
decltype(w)>(w),
1655 detail::workaround_cast<T,
decltype(x)>(x),detail::workaround_cast<T,
decltype(y)>(y),detail::workaround_cast<T,
decltype(z)>(z),
1656 detail::workaround_cast<T,
decltype(A)>(A),detail::workaround_cast<T,
decltype(B)>(B),detail::workaround_cast<T,
decltype(C)>(C),
1657 detail::workaround_cast<T,
decltype(D)>(D),detail::workaround_cast<T,
decltype(E)>(E),detail::workaround_cast<T,
decltype(F)>(F),
1658 detail::workaround_cast<T,
decltype(G)>(G),detail::workaround_cast<T,
decltype(H)>(H),detail::workaround_cast<T,
decltype(J)>(J),
1659 detail::workaround_cast<T,
decltype(K)>(K),detail::workaround_cast<T,
decltype(L)>(L),detail::workaround_cast<T,
decltype(M)>(M),
1660 detail::workaround_cast<T,
decltype(N)>(N),detail::workaround_cast<T,
decltype(P)>(P),detail::workaround_cast<T,
decltype(Q)>(Q),
1661 detail::workaround_cast<T,
decltype(R)>(R),detail::workaround_cast<T,
decltype(S)>(S),detail::workaround_cast<T,
decltype(U)>(U),
1662 detail::workaround_cast<T,
decltype(V)>(V),detail::workaround_cast<T,
decltype(W)>(W),detail::workaround_cast<T,
decltype(X)>(X),
1663 detail::workaround_cast<T,
decltype(Y)>(Y),detail::workaround_cast<T,
decltype(Z)>(Z),detail::workaround_cast<T,
decltype(aa)>(aa),
1664 detail::workaround_cast<T,
decltype(ab)>(ab),detail::workaround_cast<T,
decltype(ac)>(ac),detail::workaround_cast<T,
decltype(ad)>(ad),
1665 detail::workaround_cast<T,
decltype(ae)>(ae),detail::workaround_cast<T,
decltype(af)>(af),detail::workaround_cast<T,
decltype(ag)>(ag),
1666 detail::workaround_cast<T,
decltype(ah)>(ah),detail::workaround_cast<T,
decltype(aj)>(aj),detail::workaround_cast<T,
decltype(ak)>(ak),
1667 detail::workaround_cast<T,
decltype(al)>(al),detail::workaround_cast<T,
decltype(am)>(am)
1672constexpr auto tie_as_tuple(T& val, size_t_<60>)
noexcept {
1674 a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,S,U,V,W,X,Y,Z,
1675 aa,ab,ac,ad,ae,af,ag,ah,aj,ak,al,am,an
1676 ] =
const_cast<std::remove_cv_t<T>&
>(val);
1678 return ::boost::pfr::detail::make_tuple_of_references(
1679 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
1680 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
1681 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
1682 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
1683 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
1684 detail::workaround_cast<T,
decltype(r)>(r),detail::workaround_cast<T,
decltype(s)>(s),detail::workaround_cast<T,
decltype(t)>(t),
1685 detail::workaround_cast<T,
decltype(u)>(u),detail::workaround_cast<T,
decltype(v)>(v),detail::workaround_cast<T,
decltype(w)>(w),
1686 detail::workaround_cast<T,
decltype(x)>(x),detail::workaround_cast<T,
decltype(y)>(y),detail::workaround_cast<T,
decltype(z)>(z),
1687 detail::workaround_cast<T,
decltype(A)>(A),detail::workaround_cast<T,
decltype(B)>(B),detail::workaround_cast<T,
decltype(C)>(C),
1688 detail::workaround_cast<T,
decltype(D)>(D),detail::workaround_cast<T,
decltype(E)>(E),detail::workaround_cast<T,
decltype(F)>(F),
1689 detail::workaround_cast<T,
decltype(G)>(G),detail::workaround_cast<T,
decltype(H)>(H),detail::workaround_cast<T,
decltype(J)>(J),
1690 detail::workaround_cast<T,
decltype(K)>(K),detail::workaround_cast<T,
decltype(L)>(L),detail::workaround_cast<T,
decltype(M)>(M),
1691 detail::workaround_cast<T,
decltype(N)>(N),detail::workaround_cast<T,
decltype(P)>(P),detail::workaround_cast<T,
decltype(Q)>(Q),
1692 detail::workaround_cast<T,
decltype(R)>(R),detail::workaround_cast<T,
decltype(S)>(S),detail::workaround_cast<T,
decltype(U)>(U),
1693 detail::workaround_cast<T,
decltype(V)>(V),detail::workaround_cast<T,
decltype(W)>(W),detail::workaround_cast<T,
decltype(X)>(X),
1694 detail::workaround_cast<T,
decltype(Y)>(Y),detail::workaround_cast<T,
decltype(Z)>(Z),detail::workaround_cast<T,
decltype(aa)>(aa),
1695 detail::workaround_cast<T,
decltype(ab)>(ab),detail::workaround_cast<T,
decltype(ac)>(ac),detail::workaround_cast<T,
decltype(ad)>(ad),
1696 detail::workaround_cast<T,
decltype(ae)>(ae),detail::workaround_cast<T,
decltype(af)>(af),detail::workaround_cast<T,
decltype(ag)>(ag),
1697 detail::workaround_cast<T,
decltype(ah)>(ah),detail::workaround_cast<T,
decltype(aj)>(aj),detail::workaround_cast<T,
decltype(ak)>(ak),
1698 detail::workaround_cast<T,
decltype(al)>(al),detail::workaround_cast<T,
decltype(am)>(am),detail::workaround_cast<T,
decltype(an)>(an)
1703constexpr auto tie_as_tuple(T& val, size_t_<61>)
noexcept {
1705 a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,S,U,V,W,X,Y,Z,
1706 aa,ab,ac,ad,ae,af,ag,ah,aj,ak,al,am,an,ap
1707 ] =
const_cast<std::remove_cv_t<T>&
>(val);
1709 return ::boost::pfr::detail::make_tuple_of_references(
1710 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
1711 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
1712 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
1713 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
1714 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
1715 detail::workaround_cast<T,
decltype(r)>(r),detail::workaround_cast<T,
decltype(s)>(s),detail::workaround_cast<T,
decltype(t)>(t),
1716 detail::workaround_cast<T,
decltype(u)>(u),detail::workaround_cast<T,
decltype(v)>(v),detail::workaround_cast<T,
decltype(w)>(w),
1717 detail::workaround_cast<T,
decltype(x)>(x),detail::workaround_cast<T,
decltype(y)>(y),detail::workaround_cast<T,
decltype(z)>(z),
1718 detail::workaround_cast<T,
decltype(A)>(A),detail::workaround_cast<T,
decltype(B)>(B),detail::workaround_cast<T,
decltype(C)>(C),
1719 detail::workaround_cast<T,
decltype(D)>(D),detail::workaround_cast<T,
decltype(E)>(E),detail::workaround_cast<T,
decltype(F)>(F),
1720 detail::workaround_cast<T,
decltype(G)>(G),detail::workaround_cast<T,
decltype(H)>(H),detail::workaround_cast<T,
decltype(J)>(J),
1721 detail::workaround_cast<T,
decltype(K)>(K),detail::workaround_cast<T,
decltype(L)>(L),detail::workaround_cast<T,
decltype(M)>(M),
1722 detail::workaround_cast<T,
decltype(N)>(N),detail::workaround_cast<T,
decltype(P)>(P),detail::workaround_cast<T,
decltype(Q)>(Q),
1723 detail::workaround_cast<T,
decltype(R)>(R),detail::workaround_cast<T,
decltype(S)>(S),detail::workaround_cast<T,
decltype(U)>(U),
1724 detail::workaround_cast<T,
decltype(V)>(V),detail::workaround_cast<T,
decltype(W)>(W),detail::workaround_cast<T,
decltype(X)>(X),
1725 detail::workaround_cast<T,
decltype(Y)>(Y),detail::workaround_cast<T,
decltype(Z)>(Z),detail::workaround_cast<T,
decltype(aa)>(aa),
1726 detail::workaround_cast<T,
decltype(ab)>(ab),detail::workaround_cast<T,
decltype(ac)>(ac),detail::workaround_cast<T,
decltype(ad)>(ad),
1727 detail::workaround_cast<T,
decltype(ae)>(ae),detail::workaround_cast<T,
decltype(af)>(af),detail::workaround_cast<T,
decltype(ag)>(ag),
1728 detail::workaround_cast<T,
decltype(ah)>(ah),detail::workaround_cast<T,
decltype(aj)>(aj),detail::workaround_cast<T,
decltype(ak)>(ak),
1729 detail::workaround_cast<T,
decltype(al)>(al),detail::workaround_cast<T,
decltype(am)>(am),detail::workaround_cast<T,
decltype(an)>(an),
1730 detail::workaround_cast<T,
decltype(ap)>(ap)
1735constexpr auto tie_as_tuple(T& val, size_t_<62>)
noexcept {
1737 a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,S,U,V,W,X,Y,Z,
1738 aa,ab,ac,ad,ae,af,ag,ah,aj,ak,al,am,an,ap,aq
1739 ] =
const_cast<std::remove_cv_t<T>&
>(val);
1741 return ::boost::pfr::detail::make_tuple_of_references(
1742 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
1743 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
1744 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
1745 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
1746 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
1747 detail::workaround_cast<T,
decltype(r)>(r),detail::workaround_cast<T,
decltype(s)>(s),detail::workaround_cast<T,
decltype(t)>(t),
1748 detail::workaround_cast<T,
decltype(u)>(u),detail::workaround_cast<T,
decltype(v)>(v),detail::workaround_cast<T,
decltype(w)>(w),
1749 detail::workaround_cast<T,
decltype(x)>(x),detail::workaround_cast<T,
decltype(y)>(y),detail::workaround_cast<T,
decltype(z)>(z),
1750 detail::workaround_cast<T,
decltype(A)>(A),detail::workaround_cast<T,
decltype(B)>(B),detail::workaround_cast<T,
decltype(C)>(C),
1751 detail::workaround_cast<T,
decltype(D)>(D),detail::workaround_cast<T,
decltype(E)>(E),detail::workaround_cast<T,
decltype(F)>(F),
1752 detail::workaround_cast<T,
decltype(G)>(G),detail::workaround_cast<T,
decltype(H)>(H),detail::workaround_cast<T,
decltype(J)>(J),
1753 detail::workaround_cast<T,
decltype(K)>(K),detail::workaround_cast<T,
decltype(L)>(L),detail::workaround_cast<T,
decltype(M)>(M),
1754 detail::workaround_cast<T,
decltype(N)>(N),detail::workaround_cast<T,
decltype(P)>(P),detail::workaround_cast<T,
decltype(Q)>(Q),
1755 detail::workaround_cast<T,
decltype(R)>(R),detail::workaround_cast<T,
decltype(S)>(S),detail::workaround_cast<T,
decltype(U)>(U),
1756 detail::workaround_cast<T,
decltype(V)>(V),detail::workaround_cast<T,
decltype(W)>(W),detail::workaround_cast<T,
decltype(X)>(X),
1757 detail::workaround_cast<T,
decltype(Y)>(Y),detail::workaround_cast<T,
decltype(Z)>(Z),detail::workaround_cast<T,
decltype(aa)>(aa),
1758 detail::workaround_cast<T,
decltype(ab)>(ab),detail::workaround_cast<T,
decltype(ac)>(ac),detail::workaround_cast<T,
decltype(ad)>(ad),
1759 detail::workaround_cast<T,
decltype(ae)>(ae),detail::workaround_cast<T,
decltype(af)>(af),detail::workaround_cast<T,
decltype(ag)>(ag),
1760 detail::workaround_cast<T,
decltype(ah)>(ah),detail::workaround_cast<T,
decltype(aj)>(aj),detail::workaround_cast<T,
decltype(ak)>(ak),
1761 detail::workaround_cast<T,
decltype(al)>(al),detail::workaround_cast<T,
decltype(am)>(am),detail::workaround_cast<T,
decltype(an)>(an),
1762 detail::workaround_cast<T,
decltype(ap)>(ap),detail::workaround_cast<T,
decltype(aq)>(aq)
1767constexpr auto tie_as_tuple(T& val, size_t_<63>)
noexcept {
1769 a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,S,U,V,W,X,Y,Z,
1770 aa,ab,ac,ad,ae,af,ag,ah,aj,ak,al,am,an,ap,aq,ar
1771 ] =
const_cast<std::remove_cv_t<T>&
>(val);
1773 return ::boost::pfr::detail::make_tuple_of_references(
1774 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
1775 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
1776 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
1777 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
1778 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
1779 detail::workaround_cast<T,
decltype(r)>(r),detail::workaround_cast<T,
decltype(s)>(s),detail::workaround_cast<T,
decltype(t)>(t),
1780 detail::workaround_cast<T,
decltype(u)>(u),detail::workaround_cast<T,
decltype(v)>(v),detail::workaround_cast<T,
decltype(w)>(w),
1781 detail::workaround_cast<T,
decltype(x)>(x),detail::workaround_cast<T,
decltype(y)>(y),detail::workaround_cast<T,
decltype(z)>(z),
1782 detail::workaround_cast<T,
decltype(A)>(A),detail::workaround_cast<T,
decltype(B)>(B),detail::workaround_cast<T,
decltype(C)>(C),
1783 detail::workaround_cast<T,
decltype(D)>(D),detail::workaround_cast<T,
decltype(E)>(E),detail::workaround_cast<T,
decltype(F)>(F),
1784 detail::workaround_cast<T,
decltype(G)>(G),detail::workaround_cast<T,
decltype(H)>(H),detail::workaround_cast<T,
decltype(J)>(J),
1785 detail::workaround_cast<T,
decltype(K)>(K),detail::workaround_cast<T,
decltype(L)>(L),detail::workaround_cast<T,
decltype(M)>(M),
1786 detail::workaround_cast<T,
decltype(N)>(N),detail::workaround_cast<T,
decltype(P)>(P),detail::workaround_cast<T,
decltype(Q)>(Q),
1787 detail::workaround_cast<T,
decltype(R)>(R),detail::workaround_cast<T,
decltype(S)>(S),detail::workaround_cast<T,
decltype(U)>(U),
1788 detail::workaround_cast<T,
decltype(V)>(V),detail::workaround_cast<T,
decltype(W)>(W),detail::workaround_cast<T,
decltype(X)>(X),
1789 detail::workaround_cast<T,
decltype(Y)>(Y),detail::workaround_cast<T,
decltype(Z)>(Z),detail::workaround_cast<T,
decltype(aa)>(aa),
1790 detail::workaround_cast<T,
decltype(ab)>(ab),detail::workaround_cast<T,
decltype(ac)>(ac),detail::workaround_cast<T,
decltype(ad)>(ad),
1791 detail::workaround_cast<T,
decltype(ae)>(ae),detail::workaround_cast<T,
decltype(af)>(af),detail::workaround_cast<T,
decltype(ag)>(ag),
1792 detail::workaround_cast<T,
decltype(ah)>(ah),detail::workaround_cast<T,
decltype(aj)>(aj),detail::workaround_cast<T,
decltype(ak)>(ak),
1793 detail::workaround_cast<T,
decltype(al)>(al),detail::workaround_cast<T,
decltype(am)>(am),detail::workaround_cast<T,
decltype(an)>(an),
1794 detail::workaround_cast<T,
decltype(ap)>(ap),detail::workaround_cast<T,
decltype(aq)>(aq),detail::workaround_cast<T,
decltype(ar)>(ar)
1799constexpr auto tie_as_tuple(T& val, size_t_<64>)
noexcept {
1801 a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,S,U,V,W,X,Y,Z,
1802 aa,ab,ac,ad,ae,af,ag,ah,aj,ak,al,am,an,ap,aq,ar,as
1803 ] =
const_cast<std::remove_cv_t<T>&
>(val);
1805 return ::boost::pfr::detail::make_tuple_of_references(
1806 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
1807 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
1808 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
1809 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
1810 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
1811 detail::workaround_cast<T,
decltype(r)>(r),detail::workaround_cast<T,
decltype(s)>(s),detail::workaround_cast<T,
decltype(t)>(t),
1812 detail::workaround_cast<T,
decltype(u)>(u),detail::workaround_cast<T,
decltype(v)>(v),detail::workaround_cast<T,
decltype(w)>(w),
1813 detail::workaround_cast<T,
decltype(x)>(x),detail::workaround_cast<T,
decltype(y)>(y),detail::workaround_cast<T,
decltype(z)>(z),
1814 detail::workaround_cast<T,
decltype(A)>(A),detail::workaround_cast<T,
decltype(B)>(B),detail::workaround_cast<T,
decltype(C)>(C),
1815 detail::workaround_cast<T,
decltype(D)>(D),detail::workaround_cast<T,
decltype(E)>(E),detail::workaround_cast<T,
decltype(F)>(F),
1816 detail::workaround_cast<T,
decltype(G)>(G),detail::workaround_cast<T,
decltype(H)>(H),detail::workaround_cast<T,
decltype(J)>(J),
1817 detail::workaround_cast<T,
decltype(K)>(K),detail::workaround_cast<T,
decltype(L)>(L),detail::workaround_cast<T,
decltype(M)>(M),
1818 detail::workaround_cast<T,
decltype(N)>(N),detail::workaround_cast<T,
decltype(P)>(P),detail::workaround_cast<T,
decltype(Q)>(Q),
1819 detail::workaround_cast<T,
decltype(R)>(R),detail::workaround_cast<T,
decltype(S)>(S),detail::workaround_cast<T,
decltype(U)>(U),
1820 detail::workaround_cast<T,
decltype(V)>(V),detail::workaround_cast<T,
decltype(W)>(W),detail::workaround_cast<T,
decltype(X)>(X),
1821 detail::workaround_cast<T,
decltype(Y)>(Y),detail::workaround_cast<T,
decltype(Z)>(Z),detail::workaround_cast<T,
decltype(aa)>(aa),
1822 detail::workaround_cast<T,
decltype(ab)>(ab),detail::workaround_cast<T,
decltype(ac)>(ac),detail::workaround_cast<T,
decltype(ad)>(ad),
1823 detail::workaround_cast<T,
decltype(ae)>(ae),detail::workaround_cast<T,
decltype(af)>(af),detail::workaround_cast<T,
decltype(ag)>(ag),
1824 detail::workaround_cast<T,
decltype(ah)>(ah),detail::workaround_cast<T,
decltype(aj)>(aj),detail::workaround_cast<T,
decltype(ak)>(ak),
1825 detail::workaround_cast<T,
decltype(al)>(al),detail::workaround_cast<T,
decltype(am)>(am),detail::workaround_cast<T,
decltype(an)>(an),
1826 detail::workaround_cast<T,
decltype(ap)>(ap),detail::workaround_cast<T,
decltype(aq)>(aq),detail::workaround_cast<T,
decltype(ar)>(ar),
1827 detail::workaround_cast<T,
decltype(as)>(as)
1832constexpr auto tie_as_tuple(T& val, size_t_<65>)
noexcept {
1834 a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,S,U,V,W,X,Y,Z,
1835 aa,ab,ac,ad,ae,af,ag,ah,aj,ak,al,am,an,ap,aq,ar,as,at
1836 ] =
const_cast<std::remove_cv_t<T>&
>(val);
1838 return ::boost::pfr::detail::make_tuple_of_references(
1839 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
1840 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
1841 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
1842 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
1843 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
1844 detail::workaround_cast<T,
decltype(r)>(r),detail::workaround_cast<T,
decltype(s)>(s),detail::workaround_cast<T,
decltype(t)>(t),
1845 detail::workaround_cast<T,
decltype(u)>(u),detail::workaround_cast<T,
decltype(v)>(v),detail::workaround_cast<T,
decltype(w)>(w),
1846 detail::workaround_cast<T,
decltype(x)>(x),detail::workaround_cast<T,
decltype(y)>(y),detail::workaround_cast<T,
decltype(z)>(z),
1847 detail::workaround_cast<T,
decltype(A)>(A),detail::workaround_cast<T,
decltype(B)>(B),detail::workaround_cast<T,
decltype(C)>(C),
1848 detail::workaround_cast<T,
decltype(D)>(D),detail::workaround_cast<T,
decltype(E)>(E),detail::workaround_cast<T,
decltype(F)>(F),
1849 detail::workaround_cast<T,
decltype(G)>(G),detail::workaround_cast<T,
decltype(H)>(H),detail::workaround_cast<T,
decltype(J)>(J),
1850 detail::workaround_cast<T,
decltype(K)>(K),detail::workaround_cast<T,
decltype(L)>(L),detail::workaround_cast<T,
decltype(M)>(M),
1851 detail::workaround_cast<T,
decltype(N)>(N),detail::workaround_cast<T,
decltype(P)>(P),detail::workaround_cast<T,
decltype(Q)>(Q),
1852 detail::workaround_cast<T,
decltype(R)>(R),detail::workaround_cast<T,
decltype(S)>(S),detail::workaround_cast<T,
decltype(U)>(U),
1853 detail::workaround_cast<T,
decltype(V)>(V),detail::workaround_cast<T,
decltype(W)>(W),detail::workaround_cast<T,
decltype(X)>(X),
1854 detail::workaround_cast<T,
decltype(Y)>(Y),detail::workaround_cast<T,
decltype(Z)>(Z),detail::workaround_cast<T,
decltype(aa)>(aa),
1855 detail::workaround_cast<T,
decltype(ab)>(ab),detail::workaround_cast<T,
decltype(ac)>(ac),detail::workaround_cast<T,
decltype(ad)>(ad),
1856 detail::workaround_cast<T,
decltype(ae)>(ae),detail::workaround_cast<T,
decltype(af)>(af),detail::workaround_cast<T,
decltype(ag)>(ag),
1857 detail::workaround_cast<T,
decltype(ah)>(ah),detail::workaround_cast<T,
decltype(aj)>(aj),detail::workaround_cast<T,
decltype(ak)>(ak),
1858 detail::workaround_cast<T,
decltype(al)>(al),detail::workaround_cast<T,
decltype(am)>(am),detail::workaround_cast<T,
decltype(an)>(an),
1859 detail::workaround_cast<T,
decltype(ap)>(ap),detail::workaround_cast<T,
decltype(aq)>(aq),detail::workaround_cast<T,
decltype(ar)>(ar),
1860 detail::workaround_cast<T,
decltype(as)>(as),detail::workaround_cast<T,
decltype(at)>(at)
1865constexpr auto tie_as_tuple(T& val, size_t_<66>)
noexcept {
1867 a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,S,U,V,W,X,Y,Z,
1868 aa,ab,ac,ad,ae,af,ag,ah,aj,ak,al,am,an,ap,aq,ar,as,at,au
1869 ] =
const_cast<std::remove_cv_t<T>&
>(val);
1871 return ::boost::pfr::detail::make_tuple_of_references(
1872 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
1873 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
1874 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
1875 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
1876 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
1877 detail::workaround_cast<T,
decltype(r)>(r),detail::workaround_cast<T,
decltype(s)>(s),detail::workaround_cast<T,
decltype(t)>(t),
1878 detail::workaround_cast<T,
decltype(u)>(u),detail::workaround_cast<T,
decltype(v)>(v),detail::workaround_cast<T,
decltype(w)>(w),
1879 detail::workaround_cast<T,
decltype(x)>(x),detail::workaround_cast<T,
decltype(y)>(y),detail::workaround_cast<T,
decltype(z)>(z),
1880 detail::workaround_cast<T,
decltype(A)>(A),detail::workaround_cast<T,
decltype(B)>(B),detail::workaround_cast<T,
decltype(C)>(C),
1881 detail::workaround_cast<T,
decltype(D)>(D),detail::workaround_cast<T,
decltype(E)>(E),detail::workaround_cast<T,
decltype(F)>(F),
1882 detail::workaround_cast<T,
decltype(G)>(G),detail::workaround_cast<T,
decltype(H)>(H),detail::workaround_cast<T,
decltype(J)>(J),
1883 detail::workaround_cast<T,
decltype(K)>(K),detail::workaround_cast<T,
decltype(L)>(L),detail::workaround_cast<T,
decltype(M)>(M),
1884 detail::workaround_cast<T,
decltype(N)>(N),detail::workaround_cast<T,
decltype(P)>(P),detail::workaround_cast<T,
decltype(Q)>(Q),
1885 detail::workaround_cast<T,
decltype(R)>(R),detail::workaround_cast<T,
decltype(S)>(S),detail::workaround_cast<T,
decltype(U)>(U),
1886 detail::workaround_cast<T,
decltype(V)>(V),detail::workaround_cast<T,
decltype(W)>(W),detail::workaround_cast<T,
decltype(X)>(X),
1887 detail::workaround_cast<T,
decltype(Y)>(Y),detail::workaround_cast<T,
decltype(Z)>(Z),detail::workaround_cast<T,
decltype(aa)>(aa),
1888 detail::workaround_cast<T,
decltype(ab)>(ab),detail::workaround_cast<T,
decltype(ac)>(ac),detail::workaround_cast<T,
decltype(ad)>(ad),
1889 detail::workaround_cast<T,
decltype(ae)>(ae),detail::workaround_cast<T,
decltype(af)>(af),detail::workaround_cast<T,
decltype(ag)>(ag),
1890 detail::workaround_cast<T,
decltype(ah)>(ah),detail::workaround_cast<T,
decltype(aj)>(aj),detail::workaround_cast<T,
decltype(ak)>(ak),
1891 detail::workaround_cast<T,
decltype(al)>(al),detail::workaround_cast<T,
decltype(am)>(am),detail::workaround_cast<T,
decltype(an)>(an),
1892 detail::workaround_cast<T,
decltype(ap)>(ap),detail::workaround_cast<T,
decltype(aq)>(aq),detail::workaround_cast<T,
decltype(ar)>(ar),
1893 detail::workaround_cast<T,
decltype(as)>(as),detail::workaround_cast<T,
decltype(at)>(at),detail::workaround_cast<T,
decltype(au)>(au)
1898constexpr auto tie_as_tuple(T& val, size_t_<67>)
noexcept {
1900 a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,S,U,V,W,X,Y,Z,
1901 aa,ab,ac,ad,ae,af,ag,ah,aj,ak,al,am,an,ap,aq,ar,as,at,au,av
1902 ] =
const_cast<std::remove_cv_t<T>&
>(val);
1904 return ::boost::pfr::detail::make_tuple_of_references(
1905 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
1906 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
1907 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
1908 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
1909 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
1910 detail::workaround_cast<T,
decltype(r)>(r),detail::workaround_cast<T,
decltype(s)>(s),detail::workaround_cast<T,
decltype(t)>(t),
1911 detail::workaround_cast<T,
decltype(u)>(u),detail::workaround_cast<T,
decltype(v)>(v),detail::workaround_cast<T,
decltype(w)>(w),
1912 detail::workaround_cast<T,
decltype(x)>(x),detail::workaround_cast<T,
decltype(y)>(y),detail::workaround_cast<T,
decltype(z)>(z),
1913 detail::workaround_cast<T,
decltype(A)>(A),detail::workaround_cast<T,
decltype(B)>(B),detail::workaround_cast<T,
decltype(C)>(C),
1914 detail::workaround_cast<T,
decltype(D)>(D),detail::workaround_cast<T,
decltype(E)>(E),detail::workaround_cast<T,
decltype(F)>(F),
1915 detail::workaround_cast<T,
decltype(G)>(G),detail::workaround_cast<T,
decltype(H)>(H),detail::workaround_cast<T,
decltype(J)>(J),
1916 detail::workaround_cast<T,
decltype(K)>(K),detail::workaround_cast<T,
decltype(L)>(L),detail::workaround_cast<T,
decltype(M)>(M),
1917 detail::workaround_cast<T,
decltype(N)>(N),detail::workaround_cast<T,
decltype(P)>(P),detail::workaround_cast<T,
decltype(Q)>(Q),
1918 detail::workaround_cast<T,
decltype(R)>(R),detail::workaround_cast<T,
decltype(S)>(S),detail::workaround_cast<T,
decltype(U)>(U),
1919 detail::workaround_cast<T,
decltype(V)>(V),detail::workaround_cast<T,
decltype(W)>(W),detail::workaround_cast<T,
decltype(X)>(X),
1920 detail::workaround_cast<T,
decltype(Y)>(Y),detail::workaround_cast<T,
decltype(Z)>(Z),detail::workaround_cast<T,
decltype(aa)>(aa),
1921 detail::workaround_cast<T,
decltype(ab)>(ab),detail::workaround_cast<T,
decltype(ac)>(ac),detail::workaround_cast<T,
decltype(ad)>(ad),
1922 detail::workaround_cast<T,
decltype(ae)>(ae),detail::workaround_cast<T,
decltype(af)>(af),detail::workaround_cast<T,
decltype(ag)>(ag),
1923 detail::workaround_cast<T,
decltype(ah)>(ah),detail::workaround_cast<T,
decltype(aj)>(aj),detail::workaround_cast<T,
decltype(ak)>(ak),
1924 detail::workaround_cast<T,
decltype(al)>(al),detail::workaround_cast<T,
decltype(am)>(am),detail::workaround_cast<T,
decltype(an)>(an),
1925 detail::workaround_cast<T,
decltype(ap)>(ap),detail::workaround_cast<T,
decltype(aq)>(aq),detail::workaround_cast<T,
decltype(ar)>(ar),
1926 detail::workaround_cast<T,
decltype(as)>(as),detail::workaround_cast<T,
decltype(at)>(at),detail::workaround_cast<T,
decltype(au)>(au),
1927 detail::workaround_cast<T,
decltype(av)>(av)
1932constexpr auto tie_as_tuple(T& val, size_t_<68>)
noexcept {
1934 a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,S,U,V,W,X,Y,Z,
1935 aa,ab,ac,ad,ae,af,ag,ah,aj,ak,al,am,an,ap,aq,ar,as,at,au,av,aw
1936 ] =
const_cast<std::remove_cv_t<T>&
>(val);
1938 return ::boost::pfr::detail::make_tuple_of_references(
1939 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
1940 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
1941 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
1942 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
1943 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
1944 detail::workaround_cast<T,
decltype(r)>(r),detail::workaround_cast<T,
decltype(s)>(s),detail::workaround_cast<T,
decltype(t)>(t),
1945 detail::workaround_cast<T,
decltype(u)>(u),detail::workaround_cast<T,
decltype(v)>(v),detail::workaround_cast<T,
decltype(w)>(w),
1946 detail::workaround_cast<T,
decltype(x)>(x),detail::workaround_cast<T,
decltype(y)>(y),detail::workaround_cast<T,
decltype(z)>(z),
1947 detail::workaround_cast<T,
decltype(A)>(A),detail::workaround_cast<T,
decltype(B)>(B),detail::workaround_cast<T,
decltype(C)>(C),
1948 detail::workaround_cast<T,
decltype(D)>(D),detail::workaround_cast<T,
decltype(E)>(E),detail::workaround_cast<T,
decltype(F)>(F),
1949 detail::workaround_cast<T,
decltype(G)>(G),detail::workaround_cast<T,
decltype(H)>(H),detail::workaround_cast<T,
decltype(J)>(J),
1950 detail::workaround_cast<T,
decltype(K)>(K),detail::workaround_cast<T,
decltype(L)>(L),detail::workaround_cast<T,
decltype(M)>(M),
1951 detail::workaround_cast<T,
decltype(N)>(N),detail::workaround_cast<T,
decltype(P)>(P),detail::workaround_cast<T,
decltype(Q)>(Q),
1952 detail::workaround_cast<T,
decltype(R)>(R),detail::workaround_cast<T,
decltype(S)>(S),detail::workaround_cast<T,
decltype(U)>(U),
1953 detail::workaround_cast<T,
decltype(V)>(V),detail::workaround_cast<T,
decltype(W)>(W),detail::workaround_cast<T,
decltype(X)>(X),
1954 detail::workaround_cast<T,
decltype(Y)>(Y),detail::workaround_cast<T,
decltype(Z)>(Z),detail::workaround_cast<T,
decltype(aa)>(aa),
1955 detail::workaround_cast<T,
decltype(ab)>(ab),detail::workaround_cast<T,
decltype(ac)>(ac),detail::workaround_cast<T,
decltype(ad)>(ad),
1956 detail::workaround_cast<T,
decltype(ae)>(ae),detail::workaround_cast<T,
decltype(af)>(af),detail::workaround_cast<T,
decltype(ag)>(ag),
1957 detail::workaround_cast<T,
decltype(ah)>(ah),detail::workaround_cast<T,
decltype(aj)>(aj),detail::workaround_cast<T,
decltype(ak)>(ak),
1958 detail::workaround_cast<T,
decltype(al)>(al),detail::workaround_cast<T,
decltype(am)>(am),detail::workaround_cast<T,
decltype(an)>(an),
1959 detail::workaround_cast<T,
decltype(ap)>(ap),detail::workaround_cast<T,
decltype(aq)>(aq),detail::workaround_cast<T,
decltype(ar)>(ar),
1960 detail::workaround_cast<T,
decltype(as)>(as),detail::workaround_cast<T,
decltype(at)>(at),detail::workaround_cast<T,
decltype(au)>(au),
1961 detail::workaround_cast<T,
decltype(av)>(av),detail::workaround_cast<T,
decltype(aw)>(aw)
1966constexpr auto tie_as_tuple(T& val, size_t_<69>)
noexcept {
1968 a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,S,U,V,W,X,Y,Z,
1969 aa,ab,ac,ad,ae,af,ag,ah,aj,ak,al,am,an,ap,aq,ar,as,at,au,av,aw,ax
1970 ] =
const_cast<std::remove_cv_t<T>&
>(val);
1972 return ::boost::pfr::detail::make_tuple_of_references(
1973 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
1974 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
1975 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
1976 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
1977 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
1978 detail::workaround_cast<T,
decltype(r)>(r),detail::workaround_cast<T,
decltype(s)>(s),detail::workaround_cast<T,
decltype(t)>(t),
1979 detail::workaround_cast<T,
decltype(u)>(u),detail::workaround_cast<T,
decltype(v)>(v),detail::workaround_cast<T,
decltype(w)>(w),
1980 detail::workaround_cast<T,
decltype(x)>(x),detail::workaround_cast<T,
decltype(y)>(y),detail::workaround_cast<T,
decltype(z)>(z),
1981 detail::workaround_cast<T,
decltype(A)>(A),detail::workaround_cast<T,
decltype(B)>(B),detail::workaround_cast<T,
decltype(C)>(C),
1982 detail::workaround_cast<T,
decltype(D)>(D),detail::workaround_cast<T,
decltype(E)>(E),detail::workaround_cast<T,
decltype(F)>(F),
1983 detail::workaround_cast<T,
decltype(G)>(G),detail::workaround_cast<T,
decltype(H)>(H),detail::workaround_cast<T,
decltype(J)>(J),
1984 detail::workaround_cast<T,
decltype(K)>(K),detail::workaround_cast<T,
decltype(L)>(L),detail::workaround_cast<T,
decltype(M)>(M),
1985 detail::workaround_cast<T,
decltype(N)>(N),detail::workaround_cast<T,
decltype(P)>(P),detail::workaround_cast<T,
decltype(Q)>(Q),
1986 detail::workaround_cast<T,
decltype(R)>(R),detail::workaround_cast<T,
decltype(S)>(S),detail::workaround_cast<T,
decltype(U)>(U),
1987 detail::workaround_cast<T,
decltype(V)>(V),detail::workaround_cast<T,
decltype(W)>(W),detail::workaround_cast<T,
decltype(X)>(X),
1988 detail::workaround_cast<T,
decltype(Y)>(Y),detail::workaround_cast<T,
decltype(Z)>(Z),detail::workaround_cast<T,
decltype(aa)>(aa),
1989 detail::workaround_cast<T,
decltype(ab)>(ab),detail::workaround_cast<T,
decltype(ac)>(ac),detail::workaround_cast<T,
decltype(ad)>(ad),
1990 detail::workaround_cast<T,
decltype(ae)>(ae),detail::workaround_cast<T,
decltype(af)>(af),detail::workaround_cast<T,
decltype(ag)>(ag),
1991 detail::workaround_cast<T,
decltype(ah)>(ah),detail::workaround_cast<T,
decltype(aj)>(aj),detail::workaround_cast<T,
decltype(ak)>(ak),
1992 detail::workaround_cast<T,
decltype(al)>(al),detail::workaround_cast<T,
decltype(am)>(am),detail::workaround_cast<T,
decltype(an)>(an),
1993 detail::workaround_cast<T,
decltype(ap)>(ap),detail::workaround_cast<T,
decltype(aq)>(aq),detail::workaround_cast<T,
decltype(ar)>(ar),
1994 detail::workaround_cast<T,
decltype(as)>(as),detail::workaround_cast<T,
decltype(at)>(at),detail::workaround_cast<T,
decltype(au)>(au),
1995 detail::workaround_cast<T,
decltype(av)>(av),detail::workaround_cast<T,
decltype(aw)>(aw),detail::workaround_cast<T,
decltype(ax)>(ax)
2000constexpr auto tie_as_tuple(T& val, size_t_<70>)
noexcept {
2002 a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,S,U,V,W,X,Y,Z,
2003 aa,ab,ac,ad,ae,af,ag,ah,aj,ak,al,am,an,ap,aq,ar,as,at,au,av,aw,ax,ay
2004 ] =
const_cast<std::remove_cv_t<T>&
>(val);
2006 return ::boost::pfr::detail::make_tuple_of_references(
2007 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
2008 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
2009 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
2010 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
2011 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
2012 detail::workaround_cast<T,
decltype(r)>(r),detail::workaround_cast<T,
decltype(s)>(s),detail::workaround_cast<T,
decltype(t)>(t),
2013 detail::workaround_cast<T,
decltype(u)>(u),detail::workaround_cast<T,
decltype(v)>(v),detail::workaround_cast<T,
decltype(w)>(w),
2014 detail::workaround_cast<T,
decltype(x)>(x),detail::workaround_cast<T,
decltype(y)>(y),detail::workaround_cast<T,
decltype(z)>(z),
2015 detail::workaround_cast<T,
decltype(A)>(A),detail::workaround_cast<T,
decltype(B)>(B),detail::workaround_cast<T,
decltype(C)>(C),
2016 detail::workaround_cast<T,
decltype(D)>(D),detail::workaround_cast<T,
decltype(E)>(E),detail::workaround_cast<T,
decltype(F)>(F),
2017 detail::workaround_cast<T,
decltype(G)>(G),detail::workaround_cast<T,
decltype(H)>(H),detail::workaround_cast<T,
decltype(J)>(J),
2018 detail::workaround_cast<T,
decltype(K)>(K),detail::workaround_cast<T,
decltype(L)>(L),detail::workaround_cast<T,
decltype(M)>(M),
2019 detail::workaround_cast<T,
decltype(N)>(N),detail::workaround_cast<T,
decltype(P)>(P),detail::workaround_cast<T,
decltype(Q)>(Q),
2020 detail::workaround_cast<T,
decltype(R)>(R),detail::workaround_cast<T,
decltype(S)>(S),detail::workaround_cast<T,
decltype(U)>(U),
2021 detail::workaround_cast<T,
decltype(V)>(V),detail::workaround_cast<T,
decltype(W)>(W),detail::workaround_cast<T,
decltype(X)>(X),
2022 detail::workaround_cast<T,
decltype(Y)>(Y),detail::workaround_cast<T,
decltype(Z)>(Z),detail::workaround_cast<T,
decltype(aa)>(aa),
2023 detail::workaround_cast<T,
decltype(ab)>(ab),detail::workaround_cast<T,
decltype(ac)>(ac),detail::workaround_cast<T,
decltype(ad)>(ad),
2024 detail::workaround_cast<T,
decltype(ae)>(ae),detail::workaround_cast<T,
decltype(af)>(af),detail::workaround_cast<T,
decltype(ag)>(ag),
2025 detail::workaround_cast<T,
decltype(ah)>(ah),detail::workaround_cast<T,
decltype(aj)>(aj),detail::workaround_cast<T,
decltype(ak)>(ak),
2026 detail::workaround_cast<T,
decltype(al)>(al),detail::workaround_cast<T,
decltype(am)>(am),detail::workaround_cast<T,
decltype(an)>(an),
2027 detail::workaround_cast<T,
decltype(ap)>(ap),detail::workaround_cast<T,
decltype(aq)>(aq),detail::workaround_cast<T,
decltype(ar)>(ar),
2028 detail::workaround_cast<T,
decltype(as)>(as),detail::workaround_cast<T,
decltype(at)>(at),detail::workaround_cast<T,
decltype(au)>(au),
2029 detail::workaround_cast<T,
decltype(av)>(av),detail::workaround_cast<T,
decltype(aw)>(aw),detail::workaround_cast<T,
decltype(ax)>(ax),
2030 detail::workaround_cast<T,
decltype(ay)>(ay)
2035constexpr auto tie_as_tuple(T& val, size_t_<71>)
noexcept {
2037 a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,S,U,V,W,X,Y,Z,
2038 aa,ab,ac,ad,ae,af,ag,ah,aj,ak,al,am,an,ap,aq,ar,as,at,au,av,aw,ax,ay,az
2039 ] =
const_cast<std::remove_cv_t<T>&
>(val);
2041 return ::boost::pfr::detail::make_tuple_of_references(
2042 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
2043 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
2044 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
2045 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
2046 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
2047 detail::workaround_cast<T,
decltype(r)>(r),detail::workaround_cast<T,
decltype(s)>(s),detail::workaround_cast<T,
decltype(t)>(t),
2048 detail::workaround_cast<T,
decltype(u)>(u),detail::workaround_cast<T,
decltype(v)>(v),detail::workaround_cast<T,
decltype(w)>(w),
2049 detail::workaround_cast<T,
decltype(x)>(x),detail::workaround_cast<T,
decltype(y)>(y),detail::workaround_cast<T,
decltype(z)>(z),
2050 detail::workaround_cast<T,
decltype(A)>(A),detail::workaround_cast<T,
decltype(B)>(B),detail::workaround_cast<T,
decltype(C)>(C),
2051 detail::workaround_cast<T,
decltype(D)>(D),detail::workaround_cast<T,
decltype(E)>(E),detail::workaround_cast<T,
decltype(F)>(F),
2052 detail::workaround_cast<T,
decltype(G)>(G),detail::workaround_cast<T,
decltype(H)>(H),detail::workaround_cast<T,
decltype(J)>(J),
2053 detail::workaround_cast<T,
decltype(K)>(K),detail::workaround_cast<T,
decltype(L)>(L),detail::workaround_cast<T,
decltype(M)>(M),
2054 detail::workaround_cast<T,
decltype(N)>(N),detail::workaround_cast<T,
decltype(P)>(P),detail::workaround_cast<T,
decltype(Q)>(Q),
2055 detail::workaround_cast<T,
decltype(R)>(R),detail::workaround_cast<T,
decltype(S)>(S),detail::workaround_cast<T,
decltype(U)>(U),
2056 detail::workaround_cast<T,
decltype(V)>(V),detail::workaround_cast<T,
decltype(W)>(W),detail::workaround_cast<T,
decltype(X)>(X),
2057 detail::workaround_cast<T,
decltype(Y)>(Y),detail::workaround_cast<T,
decltype(Z)>(Z),detail::workaround_cast<T,
decltype(aa)>(aa),
2058 detail::workaround_cast<T,
decltype(ab)>(ab),detail::workaround_cast<T,
decltype(ac)>(ac),detail::workaround_cast<T,
decltype(ad)>(ad),
2059 detail::workaround_cast<T,
decltype(ae)>(ae),detail::workaround_cast<T,
decltype(af)>(af),detail::workaround_cast<T,
decltype(ag)>(ag),
2060 detail::workaround_cast<T,
decltype(ah)>(ah),detail::workaround_cast<T,
decltype(aj)>(aj),detail::workaround_cast<T,
decltype(ak)>(ak),
2061 detail::workaround_cast<T,
decltype(al)>(al),detail::workaround_cast<T,
decltype(am)>(am),detail::workaround_cast<T,
decltype(an)>(an),
2062 detail::workaround_cast<T,
decltype(ap)>(ap),detail::workaround_cast<T,
decltype(aq)>(aq),detail::workaround_cast<T,
decltype(ar)>(ar),
2063 detail::workaround_cast<T,
decltype(as)>(as),detail::workaround_cast<T,
decltype(at)>(at),detail::workaround_cast<T,
decltype(au)>(au),
2064 detail::workaround_cast<T,
decltype(av)>(av),detail::workaround_cast<T,
decltype(aw)>(aw),detail::workaround_cast<T,
decltype(ax)>(ax),
2065 detail::workaround_cast<T,
decltype(ay)>(ay),detail::workaround_cast<T,
decltype(az)>(az)
2070constexpr auto tie_as_tuple(T& val, size_t_<72>)
noexcept {
2072 a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,S,U,V,W,X,Y,Z,
2073 aa,ab,ac,ad,ae,af,ag,ah,aj,ak,al,am,an,ap,aq,ar,as,at,au,av,aw,ax,ay,az,aA
2074 ] =
const_cast<std::remove_cv_t<T>&
>(val);
2076 return ::boost::pfr::detail::make_tuple_of_references(
2077 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
2078 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
2079 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
2080 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
2081 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
2082 detail::workaround_cast<T,
decltype(r)>(r),detail::workaround_cast<T,
decltype(s)>(s),detail::workaround_cast<T,
decltype(t)>(t),
2083 detail::workaround_cast<T,
decltype(u)>(u),detail::workaround_cast<T,
decltype(v)>(v),detail::workaround_cast<T,
decltype(w)>(w),
2084 detail::workaround_cast<T,
decltype(x)>(x),detail::workaround_cast<T,
decltype(y)>(y),detail::workaround_cast<T,
decltype(z)>(z),
2085 detail::workaround_cast<T,
decltype(A)>(A),detail::workaround_cast<T,
decltype(B)>(B),detail::workaround_cast<T,
decltype(C)>(C),
2086 detail::workaround_cast<T,
decltype(D)>(D),detail::workaround_cast<T,
decltype(E)>(E),detail::workaround_cast<T,
decltype(F)>(F),
2087 detail::workaround_cast<T,
decltype(G)>(G),detail::workaround_cast<T,
decltype(H)>(H),detail::workaround_cast<T,
decltype(J)>(J),
2088 detail::workaround_cast<T,
decltype(K)>(K),detail::workaround_cast<T,
decltype(L)>(L),detail::workaround_cast<T,
decltype(M)>(M),
2089 detail::workaround_cast<T,
decltype(N)>(N),detail::workaround_cast<T,
decltype(P)>(P),detail::workaround_cast<T,
decltype(Q)>(Q),
2090 detail::workaround_cast<T,
decltype(R)>(R),detail::workaround_cast<T,
decltype(S)>(S),detail::workaround_cast<T,
decltype(U)>(U),
2091 detail::workaround_cast<T,
decltype(V)>(V),detail::workaround_cast<T,
decltype(W)>(W),detail::workaround_cast<T,
decltype(X)>(X),
2092 detail::workaround_cast<T,
decltype(Y)>(Y),detail::workaround_cast<T,
decltype(Z)>(Z),detail::workaround_cast<T,
decltype(aa)>(aa),
2093 detail::workaround_cast<T,
decltype(ab)>(ab),detail::workaround_cast<T,
decltype(ac)>(ac),detail::workaround_cast<T,
decltype(ad)>(ad),
2094 detail::workaround_cast<T,
decltype(ae)>(ae),detail::workaround_cast<T,
decltype(af)>(af),detail::workaround_cast<T,
decltype(ag)>(ag),
2095 detail::workaround_cast<T,
decltype(ah)>(ah),detail::workaround_cast<T,
decltype(aj)>(aj),detail::workaround_cast<T,
decltype(ak)>(ak),
2096 detail::workaround_cast<T,
decltype(al)>(al),detail::workaround_cast<T,
decltype(am)>(am),detail::workaround_cast<T,
decltype(an)>(an),
2097 detail::workaround_cast<T,
decltype(ap)>(ap),detail::workaround_cast<T,
decltype(aq)>(aq),detail::workaround_cast<T,
decltype(ar)>(ar),
2098 detail::workaround_cast<T,
decltype(as)>(as),detail::workaround_cast<T,
decltype(at)>(at),detail::workaround_cast<T,
decltype(au)>(au),
2099 detail::workaround_cast<T,
decltype(av)>(av),detail::workaround_cast<T,
decltype(aw)>(aw),detail::workaround_cast<T,
decltype(ax)>(ax),
2100 detail::workaround_cast<T,
decltype(ay)>(ay),detail::workaround_cast<T,
decltype(az)>(az),detail::workaround_cast<T,
decltype(aA)>(aA)
2105constexpr auto tie_as_tuple(T& val, size_t_<73>)
noexcept {
2107 a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,S,U,V,W,X,Y,Z,
2108 aa,ab,ac,ad,ae,af,ag,ah,aj,ak,al,am,an,ap,aq,ar,as,at,au,av,aw,ax,ay,az,aA,aB
2109 ] =
const_cast<std::remove_cv_t<T>&
>(val);
2111 return ::boost::pfr::detail::make_tuple_of_references(
2112 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
2113 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
2114 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
2115 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
2116 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
2117 detail::workaround_cast<T,
decltype(r)>(r),detail::workaround_cast<T,
decltype(s)>(s),detail::workaround_cast<T,
decltype(t)>(t),
2118 detail::workaround_cast<T,
decltype(u)>(u),detail::workaround_cast<T,
decltype(v)>(v),detail::workaround_cast<T,
decltype(w)>(w),
2119 detail::workaround_cast<T,
decltype(x)>(x),detail::workaround_cast<T,
decltype(y)>(y),detail::workaround_cast<T,
decltype(z)>(z),
2120 detail::workaround_cast<T,
decltype(A)>(A),detail::workaround_cast<T,
decltype(B)>(B),detail::workaround_cast<T,
decltype(C)>(C),
2121 detail::workaround_cast<T,
decltype(D)>(D),detail::workaround_cast<T,
decltype(E)>(E),detail::workaround_cast<T,
decltype(F)>(F),
2122 detail::workaround_cast<T,
decltype(G)>(G),detail::workaround_cast<T,
decltype(H)>(H),detail::workaround_cast<T,
decltype(J)>(J),
2123 detail::workaround_cast<T,
decltype(K)>(K),detail::workaround_cast<T,
decltype(L)>(L),detail::workaround_cast<T,
decltype(M)>(M),
2124 detail::workaround_cast<T,
decltype(N)>(N),detail::workaround_cast<T,
decltype(P)>(P),detail::workaround_cast<T,
decltype(Q)>(Q),
2125 detail::workaround_cast<T,
decltype(R)>(R),detail::workaround_cast<T,
decltype(S)>(S),detail::workaround_cast<T,
decltype(U)>(U),
2126 detail::workaround_cast<T,
decltype(V)>(V),detail::workaround_cast<T,
decltype(W)>(W),detail::workaround_cast<T,
decltype(X)>(X),
2127 detail::workaround_cast<T,
decltype(Y)>(Y),detail::workaround_cast<T,
decltype(Z)>(Z),detail::workaround_cast<T,
decltype(aa)>(aa),
2128 detail::workaround_cast<T,
decltype(ab)>(ab),detail::workaround_cast<T,
decltype(ac)>(ac),detail::workaround_cast<T,
decltype(ad)>(ad),
2129 detail::workaround_cast<T,
decltype(ae)>(ae),detail::workaround_cast<T,
decltype(af)>(af),detail::workaround_cast<T,
decltype(ag)>(ag),
2130 detail::workaround_cast<T,
decltype(ah)>(ah),detail::workaround_cast<T,
decltype(aj)>(aj),detail::workaround_cast<T,
decltype(ak)>(ak),
2131 detail::workaround_cast<T,
decltype(al)>(al),detail::workaround_cast<T,
decltype(am)>(am),detail::workaround_cast<T,
decltype(an)>(an),
2132 detail::workaround_cast<T,
decltype(ap)>(ap),detail::workaround_cast<T,
decltype(aq)>(aq),detail::workaround_cast<T,
decltype(ar)>(ar),
2133 detail::workaround_cast<T,
decltype(as)>(as),detail::workaround_cast<T,
decltype(at)>(at),detail::workaround_cast<T,
decltype(au)>(au),
2134 detail::workaround_cast<T,
decltype(av)>(av),detail::workaround_cast<T,
decltype(aw)>(aw),detail::workaround_cast<T,
decltype(ax)>(ax),
2135 detail::workaround_cast<T,
decltype(ay)>(ay),detail::workaround_cast<T,
decltype(az)>(az),detail::workaround_cast<T,
decltype(aA)>(aA),
2136 detail::workaround_cast<T,
decltype(aB)>(aB)
2141constexpr auto tie_as_tuple(T& val, size_t_<74>)
noexcept {
2143 a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,S,U,V,W,X,Y,Z,
2144 aa,ab,ac,ad,ae,af,ag,ah,aj,ak,al,am,an,ap,aq,ar,as,at,au,av,aw,ax,ay,az,aA,aB,aC
2145 ] =
const_cast<std::remove_cv_t<T>&
>(val);
2147 return ::boost::pfr::detail::make_tuple_of_references(
2148 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
2149 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
2150 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
2151 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
2152 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
2153 detail::workaround_cast<T,
decltype(r)>(r),detail::workaround_cast<T,
decltype(s)>(s),detail::workaround_cast<T,
decltype(t)>(t),
2154 detail::workaround_cast<T,
decltype(u)>(u),detail::workaround_cast<T,
decltype(v)>(v),detail::workaround_cast<T,
decltype(w)>(w),
2155 detail::workaround_cast<T,
decltype(x)>(x),detail::workaround_cast<T,
decltype(y)>(y),detail::workaround_cast<T,
decltype(z)>(z),
2156 detail::workaround_cast<T,
decltype(A)>(A),detail::workaround_cast<T,
decltype(B)>(B),detail::workaround_cast<T,
decltype(C)>(C),
2157 detail::workaround_cast<T,
decltype(D)>(D),detail::workaround_cast<T,
decltype(E)>(E),detail::workaround_cast<T,
decltype(F)>(F),
2158 detail::workaround_cast<T,
decltype(G)>(G),detail::workaround_cast<T,
decltype(H)>(H),detail::workaround_cast<T,
decltype(J)>(J),
2159 detail::workaround_cast<T,
decltype(K)>(K),detail::workaround_cast<T,
decltype(L)>(L),detail::workaround_cast<T,
decltype(M)>(M),
2160 detail::workaround_cast<T,
decltype(N)>(N),detail::workaround_cast<T,
decltype(P)>(P),detail::workaround_cast<T,
decltype(Q)>(Q),
2161 detail::workaround_cast<T,
decltype(R)>(R),detail::workaround_cast<T,
decltype(S)>(S),detail::workaround_cast<T,
decltype(U)>(U),
2162 detail::workaround_cast<T,
decltype(V)>(V),detail::workaround_cast<T,
decltype(W)>(W),detail::workaround_cast<T,
decltype(X)>(X),
2163 detail::workaround_cast<T,
decltype(Y)>(Y),detail::workaround_cast<T,
decltype(Z)>(Z),detail::workaround_cast<T,
decltype(aa)>(aa),
2164 detail::workaround_cast<T,
decltype(ab)>(ab),detail::workaround_cast<T,
decltype(ac)>(ac),detail::workaround_cast<T,
decltype(ad)>(ad),
2165 detail::workaround_cast<T,
decltype(ae)>(ae),detail::workaround_cast<T,
decltype(af)>(af),detail::workaround_cast<T,
decltype(ag)>(ag),
2166 detail::workaround_cast<T,
decltype(ah)>(ah),detail::workaround_cast<T,
decltype(aj)>(aj),detail::workaround_cast<T,
decltype(ak)>(ak),
2167 detail::workaround_cast<T,
decltype(al)>(al),detail::workaround_cast<T,
decltype(am)>(am),detail::workaround_cast<T,
decltype(an)>(an),
2168 detail::workaround_cast<T,
decltype(ap)>(ap),detail::workaround_cast<T,
decltype(aq)>(aq),detail::workaround_cast<T,
decltype(ar)>(ar),
2169 detail::workaround_cast<T,
decltype(as)>(as),detail::workaround_cast<T,
decltype(at)>(at),detail::workaround_cast<T,
decltype(au)>(au),
2170 detail::workaround_cast<T,
decltype(av)>(av),detail::workaround_cast<T,
decltype(aw)>(aw),detail::workaround_cast<T,
decltype(ax)>(ax),
2171 detail::workaround_cast<T,
decltype(ay)>(ay),detail::workaround_cast<T,
decltype(az)>(az),detail::workaround_cast<T,
decltype(aA)>(aA),
2172 detail::workaround_cast<T,
decltype(aB)>(aB),detail::workaround_cast<T,
decltype(aC)>(aC)
2177constexpr auto tie_as_tuple(T& val, size_t_<75>)
noexcept {
2179 a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,S,U,V,W,X,Y,Z,
2180 aa,ab,ac,ad,ae,af,ag,ah,aj,ak,al,am,an,ap,aq,ar,as,at,au,av,aw,ax,ay,az,aA,aB,aC,aD
2181 ] =
const_cast<std::remove_cv_t<T>&
>(val);
2183 return ::boost::pfr::detail::make_tuple_of_references(
2184 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
2185 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
2186 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
2187 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
2188 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
2189 detail::workaround_cast<T,
decltype(r)>(r),detail::workaround_cast<T,
decltype(s)>(s),detail::workaround_cast<T,
decltype(t)>(t),
2190 detail::workaround_cast<T,
decltype(u)>(u),detail::workaround_cast<T,
decltype(v)>(v),detail::workaround_cast<T,
decltype(w)>(w),
2191 detail::workaround_cast<T,
decltype(x)>(x),detail::workaround_cast<T,
decltype(y)>(y),detail::workaround_cast<T,
decltype(z)>(z),
2192 detail::workaround_cast<T,
decltype(A)>(A),detail::workaround_cast<T,
decltype(B)>(B),detail::workaround_cast<T,
decltype(C)>(C),
2193 detail::workaround_cast<T,
decltype(D)>(D),detail::workaround_cast<T,
decltype(E)>(E),detail::workaround_cast<T,
decltype(F)>(F),
2194 detail::workaround_cast<T,
decltype(G)>(G),detail::workaround_cast<T,
decltype(H)>(H),detail::workaround_cast<T,
decltype(J)>(J),
2195 detail::workaround_cast<T,
decltype(K)>(K),detail::workaround_cast<T,
decltype(L)>(L),detail::workaround_cast<T,
decltype(M)>(M),
2196 detail::workaround_cast<T,
decltype(N)>(N),detail::workaround_cast<T,
decltype(P)>(P),detail::workaround_cast<T,
decltype(Q)>(Q),
2197 detail::workaround_cast<T,
decltype(R)>(R),detail::workaround_cast<T,
decltype(S)>(S),detail::workaround_cast<T,
decltype(U)>(U),
2198 detail::workaround_cast<T,
decltype(V)>(V),detail::workaround_cast<T,
decltype(W)>(W),detail::workaround_cast<T,
decltype(X)>(X),
2199 detail::workaround_cast<T,
decltype(Y)>(Y),detail::workaround_cast<T,
decltype(Z)>(Z),detail::workaround_cast<T,
decltype(aa)>(aa),
2200 detail::workaround_cast<T,
decltype(ab)>(ab),detail::workaround_cast<T,
decltype(ac)>(ac),detail::workaround_cast<T,
decltype(ad)>(ad),
2201 detail::workaround_cast<T,
decltype(ae)>(ae),detail::workaround_cast<T,
decltype(af)>(af),detail::workaround_cast<T,
decltype(ag)>(ag),
2202 detail::workaround_cast<T,
decltype(ah)>(ah),detail::workaround_cast<T,
decltype(aj)>(aj),detail::workaround_cast<T,
decltype(ak)>(ak),
2203 detail::workaround_cast<T,
decltype(al)>(al),detail::workaround_cast<T,
decltype(am)>(am),detail::workaround_cast<T,
decltype(an)>(an),
2204 detail::workaround_cast<T,
decltype(ap)>(ap),detail::workaround_cast<T,
decltype(aq)>(aq),detail::workaround_cast<T,
decltype(ar)>(ar),
2205 detail::workaround_cast<T,
decltype(as)>(as),detail::workaround_cast<T,
decltype(at)>(at),detail::workaround_cast<T,
decltype(au)>(au),
2206 detail::workaround_cast<T,
decltype(av)>(av),detail::workaround_cast<T,
decltype(aw)>(aw),detail::workaround_cast<T,
decltype(ax)>(ax),
2207 detail::workaround_cast<T,
decltype(ay)>(ay),detail::workaround_cast<T,
decltype(az)>(az),detail::workaround_cast<T,
decltype(aA)>(aA),
2208 detail::workaround_cast<T,
decltype(aB)>(aB),detail::workaround_cast<T,
decltype(aC)>(aC),detail::workaround_cast<T,
decltype(aD)>(aD)
2213constexpr auto tie_as_tuple(T& val, size_t_<76>)
noexcept {
2215 a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,S,U,V,W,X,Y,Z,
2216 aa,ab,ac,ad,ae,af,ag,ah,aj,ak,al,am,an,ap,aq,ar,as,at,au,av,aw,ax,ay,az,aA,aB,aC,aD,aE
2217 ] =
const_cast<std::remove_cv_t<T>&
>(val);
2219 return ::boost::pfr::detail::make_tuple_of_references(
2220 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
2221 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
2222 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
2223 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
2224 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
2225 detail::workaround_cast<T,
decltype(r)>(r),detail::workaround_cast<T,
decltype(s)>(s),detail::workaround_cast<T,
decltype(t)>(t),
2226 detail::workaround_cast<T,
decltype(u)>(u),detail::workaround_cast<T,
decltype(v)>(v),detail::workaround_cast<T,
decltype(w)>(w),
2227 detail::workaround_cast<T,
decltype(x)>(x),detail::workaround_cast<T,
decltype(y)>(y),detail::workaround_cast<T,
decltype(z)>(z),
2228 detail::workaround_cast<T,
decltype(A)>(A),detail::workaround_cast<T,
decltype(B)>(B),detail::workaround_cast<T,
decltype(C)>(C),
2229 detail::workaround_cast<T,
decltype(D)>(D),detail::workaround_cast<T,
decltype(E)>(E),detail::workaround_cast<T,
decltype(F)>(F),
2230 detail::workaround_cast<T,
decltype(G)>(G),detail::workaround_cast<T,
decltype(H)>(H),detail::workaround_cast<T,
decltype(J)>(J),
2231 detail::workaround_cast<T,
decltype(K)>(K),detail::workaround_cast<T,
decltype(L)>(L),detail::workaround_cast<T,
decltype(M)>(M),
2232 detail::workaround_cast<T,
decltype(N)>(N),detail::workaround_cast<T,
decltype(P)>(P),detail::workaround_cast<T,
decltype(Q)>(Q),
2233 detail::workaround_cast<T,
decltype(R)>(R),detail::workaround_cast<T,
decltype(S)>(S),detail::workaround_cast<T,
decltype(U)>(U),
2234 detail::workaround_cast<T,
decltype(V)>(V),detail::workaround_cast<T,
decltype(W)>(W),detail::workaround_cast<T,
decltype(X)>(X),
2235 detail::workaround_cast<T,
decltype(Y)>(Y),detail::workaround_cast<T,
decltype(Z)>(Z),detail::workaround_cast<T,
decltype(aa)>(aa),
2236 detail::workaround_cast<T,
decltype(ab)>(ab),detail::workaround_cast<T,
decltype(ac)>(ac),detail::workaround_cast<T,
decltype(ad)>(ad),
2237 detail::workaround_cast<T,
decltype(ae)>(ae),detail::workaround_cast<T,
decltype(af)>(af),detail::workaround_cast<T,
decltype(ag)>(ag),
2238 detail::workaround_cast<T,
decltype(ah)>(ah),detail::workaround_cast<T,
decltype(aj)>(aj),detail::workaround_cast<T,
decltype(ak)>(ak),
2239 detail::workaround_cast<T,
decltype(al)>(al),detail::workaround_cast<T,
decltype(am)>(am),detail::workaround_cast<T,
decltype(an)>(an),
2240 detail::workaround_cast<T,
decltype(ap)>(ap),detail::workaround_cast<T,
decltype(aq)>(aq),detail::workaround_cast<T,
decltype(ar)>(ar),
2241 detail::workaround_cast<T,
decltype(as)>(as),detail::workaround_cast<T,
decltype(at)>(at),detail::workaround_cast<T,
decltype(au)>(au),
2242 detail::workaround_cast<T,
decltype(av)>(av),detail::workaround_cast<T,
decltype(aw)>(aw),detail::workaround_cast<T,
decltype(ax)>(ax),
2243 detail::workaround_cast<T,
decltype(ay)>(ay),detail::workaround_cast<T,
decltype(az)>(az),detail::workaround_cast<T,
decltype(aA)>(aA),
2244 detail::workaround_cast<T,
decltype(aB)>(aB),detail::workaround_cast<T,
decltype(aC)>(aC),detail::workaround_cast<T,
decltype(aD)>(aD),
2245 detail::workaround_cast<T,
decltype(aE)>(aE)
2250constexpr auto tie_as_tuple(T& val, size_t_<77>)
noexcept {
2252 a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,S,U,V,W,X,Y,Z,
2253 aa,ab,ac,ad,ae,af,ag,ah,aj,ak,al,am,an,ap,aq,ar,as,at,au,av,aw,ax,ay,az,aA,aB,aC,aD,aE,aF
2254 ] =
const_cast<std::remove_cv_t<T>&
>(val);
2256 return ::boost::pfr::detail::make_tuple_of_references(
2257 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
2258 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
2259 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
2260 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
2261 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
2262 detail::workaround_cast<T,
decltype(r)>(r),detail::workaround_cast<T,
decltype(s)>(s),detail::workaround_cast<T,
decltype(t)>(t),
2263 detail::workaround_cast<T,
decltype(u)>(u),detail::workaround_cast<T,
decltype(v)>(v),detail::workaround_cast<T,
decltype(w)>(w),
2264 detail::workaround_cast<T,
decltype(x)>(x),detail::workaround_cast<T,
decltype(y)>(y),detail::workaround_cast<T,
decltype(z)>(z),
2265 detail::workaround_cast<T,
decltype(A)>(A),detail::workaround_cast<T,
decltype(B)>(B),detail::workaround_cast<T,
decltype(C)>(C),
2266 detail::workaround_cast<T,
decltype(D)>(D),detail::workaround_cast<T,
decltype(E)>(E),detail::workaround_cast<T,
decltype(F)>(F),
2267 detail::workaround_cast<T,
decltype(G)>(G),detail::workaround_cast<T,
decltype(H)>(H),detail::workaround_cast<T,
decltype(J)>(J),
2268 detail::workaround_cast<T,
decltype(K)>(K),detail::workaround_cast<T,
decltype(L)>(L),detail::workaround_cast<T,
decltype(M)>(M),
2269 detail::workaround_cast<T,
decltype(N)>(N),detail::workaround_cast<T,
decltype(P)>(P),detail::workaround_cast<T,
decltype(Q)>(Q),
2270 detail::workaround_cast<T,
decltype(R)>(R),detail::workaround_cast<T,
decltype(S)>(S),detail::workaround_cast<T,
decltype(U)>(U),
2271 detail::workaround_cast<T,
decltype(V)>(V),detail::workaround_cast<T,
decltype(W)>(W),detail::workaround_cast<T,
decltype(X)>(X),
2272 detail::workaround_cast<T,
decltype(Y)>(Y),detail::workaround_cast<T,
decltype(Z)>(Z),detail::workaround_cast<T,
decltype(aa)>(aa),
2273 detail::workaround_cast<T,
decltype(ab)>(ab),detail::workaround_cast<T,
decltype(ac)>(ac),detail::workaround_cast<T,
decltype(ad)>(ad),
2274 detail::workaround_cast<T,
decltype(ae)>(ae),detail::workaround_cast<T,
decltype(af)>(af),detail::workaround_cast<T,
decltype(ag)>(ag),
2275 detail::workaround_cast<T,
decltype(ah)>(ah),detail::workaround_cast<T,
decltype(aj)>(aj),detail::workaround_cast<T,
decltype(ak)>(ak),
2276 detail::workaround_cast<T,
decltype(al)>(al),detail::workaround_cast<T,
decltype(am)>(am),detail::workaround_cast<T,
decltype(an)>(an),
2277 detail::workaround_cast<T,
decltype(ap)>(ap),detail::workaround_cast<T,
decltype(aq)>(aq),detail::workaround_cast<T,
decltype(ar)>(ar),
2278 detail::workaround_cast<T,
decltype(as)>(as),detail::workaround_cast<T,
decltype(at)>(at),detail::workaround_cast<T,
decltype(au)>(au),
2279 detail::workaround_cast<T,
decltype(av)>(av),detail::workaround_cast<T,
decltype(aw)>(aw),detail::workaround_cast<T,
decltype(ax)>(ax),
2280 detail::workaround_cast<T,
decltype(ay)>(ay),detail::workaround_cast<T,
decltype(az)>(az),detail::workaround_cast<T,
decltype(aA)>(aA),
2281 detail::workaround_cast<T,
decltype(aB)>(aB),detail::workaround_cast<T,
decltype(aC)>(aC),detail::workaround_cast<T,
decltype(aD)>(aD),
2282 detail::workaround_cast<T,
decltype(aE)>(aE),detail::workaround_cast<T,
decltype(aF)>(aF)
2287constexpr auto tie_as_tuple(T& val, size_t_<78>)
noexcept {
2289 a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,S,U,V,W,X,Y,Z,
2290 aa,ab,ac,ad,ae,af,ag,ah,aj,ak,al,am,an,ap,aq,ar,as,at,au,av,aw,ax,ay,az,aA,aB,aC,aD,aE,aF,aG
2291 ] =
const_cast<std::remove_cv_t<T>&
>(val);
2293 return ::boost::pfr::detail::make_tuple_of_references(
2294 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
2295 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
2296 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
2297 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
2298 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
2299 detail::workaround_cast<T,
decltype(r)>(r),detail::workaround_cast<T,
decltype(s)>(s),detail::workaround_cast<T,
decltype(t)>(t),
2300 detail::workaround_cast<T,
decltype(u)>(u),detail::workaround_cast<T,
decltype(v)>(v),detail::workaround_cast<T,
decltype(w)>(w),
2301 detail::workaround_cast<T,
decltype(x)>(x),detail::workaround_cast<T,
decltype(y)>(y),detail::workaround_cast<T,
decltype(z)>(z),
2302 detail::workaround_cast<T,
decltype(A)>(A),detail::workaround_cast<T,
decltype(B)>(B),detail::workaround_cast<T,
decltype(C)>(C),
2303 detail::workaround_cast<T,
decltype(D)>(D),detail::workaround_cast<T,
decltype(E)>(E),detail::workaround_cast<T,
decltype(F)>(F),
2304 detail::workaround_cast<T,
decltype(G)>(G),detail::workaround_cast<T,
decltype(H)>(H),detail::workaround_cast<T,
decltype(J)>(J),
2305 detail::workaround_cast<T,
decltype(K)>(K),detail::workaround_cast<T,
decltype(L)>(L),detail::workaround_cast<T,
decltype(M)>(M),
2306 detail::workaround_cast<T,
decltype(N)>(N),detail::workaround_cast<T,
decltype(P)>(P),detail::workaround_cast<T,
decltype(Q)>(Q),
2307 detail::workaround_cast<T,
decltype(R)>(R),detail::workaround_cast<T,
decltype(S)>(S),detail::workaround_cast<T,
decltype(U)>(U),
2308 detail::workaround_cast<T,
decltype(V)>(V),detail::workaround_cast<T,
decltype(W)>(W),detail::workaround_cast<T,
decltype(X)>(X),
2309 detail::workaround_cast<T,
decltype(Y)>(Y),detail::workaround_cast<T,
decltype(Z)>(Z),detail::workaround_cast<T,
decltype(aa)>(aa),
2310 detail::workaround_cast<T,
decltype(ab)>(ab),detail::workaround_cast<T,
decltype(ac)>(ac),detail::workaround_cast<T,
decltype(ad)>(ad),
2311 detail::workaround_cast<T,
decltype(ae)>(ae),detail::workaround_cast<T,
decltype(af)>(af),detail::workaround_cast<T,
decltype(ag)>(ag),
2312 detail::workaround_cast<T,
decltype(ah)>(ah),detail::workaround_cast<T,
decltype(aj)>(aj),detail::workaround_cast<T,
decltype(ak)>(ak),
2313 detail::workaround_cast<T,
decltype(al)>(al),detail::workaround_cast<T,
decltype(am)>(am),detail::workaround_cast<T,
decltype(an)>(an),
2314 detail::workaround_cast<T,
decltype(ap)>(ap),detail::workaround_cast<T,
decltype(aq)>(aq),detail::workaround_cast<T,
decltype(ar)>(ar),
2315 detail::workaround_cast<T,
decltype(as)>(as),detail::workaround_cast<T,
decltype(at)>(at),detail::workaround_cast<T,
decltype(au)>(au),
2316 detail::workaround_cast<T,
decltype(av)>(av),detail::workaround_cast<T,
decltype(aw)>(aw),detail::workaround_cast<T,
decltype(ax)>(ax),
2317 detail::workaround_cast<T,
decltype(ay)>(ay),detail::workaround_cast<T,
decltype(az)>(az),detail::workaround_cast<T,
decltype(aA)>(aA),
2318 detail::workaround_cast<T,
decltype(aB)>(aB),detail::workaround_cast<T,
decltype(aC)>(aC),detail::workaround_cast<T,
decltype(aD)>(aD),
2319 detail::workaround_cast<T,
decltype(aE)>(aE),detail::workaround_cast<T,
decltype(aF)>(aF),detail::workaround_cast<T,
decltype(aG)>(aG)
2324constexpr auto tie_as_tuple(T& val, size_t_<79>)
noexcept {
2326 a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,S,U,V,W,X,Y,Z,
2327 aa,ab,ac,ad,ae,af,ag,ah,aj,ak,al,am,an,ap,aq,ar,as,at,au,av,aw,ax,ay,az,aA,aB,aC,aD,aE,aF,aG,aH
2328 ] =
const_cast<std::remove_cv_t<T>&
>(val);
2330 return ::boost::pfr::detail::make_tuple_of_references(
2331 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
2332 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
2333 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
2334 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
2335 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
2336 detail::workaround_cast<T,
decltype(r)>(r),detail::workaround_cast<T,
decltype(s)>(s),detail::workaround_cast<T,
decltype(t)>(t),
2337 detail::workaround_cast<T,
decltype(u)>(u),detail::workaround_cast<T,
decltype(v)>(v),detail::workaround_cast<T,
decltype(w)>(w),
2338 detail::workaround_cast<T,
decltype(x)>(x),detail::workaround_cast<T,
decltype(y)>(y),detail::workaround_cast<T,
decltype(z)>(z),
2339 detail::workaround_cast<T,
decltype(A)>(A),detail::workaround_cast<T,
decltype(B)>(B),detail::workaround_cast<T,
decltype(C)>(C),
2340 detail::workaround_cast<T,
decltype(D)>(D),detail::workaround_cast<T,
decltype(E)>(E),detail::workaround_cast<T,
decltype(F)>(F),
2341 detail::workaround_cast<T,
decltype(G)>(G),detail::workaround_cast<T,
decltype(H)>(H),detail::workaround_cast<T,
decltype(J)>(J),
2342 detail::workaround_cast<T,
decltype(K)>(K),detail::workaround_cast<T,
decltype(L)>(L),detail::workaround_cast<T,
decltype(M)>(M),
2343 detail::workaround_cast<T,
decltype(N)>(N),detail::workaround_cast<T,
decltype(P)>(P),detail::workaround_cast<T,
decltype(Q)>(Q),
2344 detail::workaround_cast<T,
decltype(R)>(R),detail::workaround_cast<T,
decltype(S)>(S),detail::workaround_cast<T,
decltype(U)>(U),
2345 detail::workaround_cast<T,
decltype(V)>(V),detail::workaround_cast<T,
decltype(W)>(W),detail::workaround_cast<T,
decltype(X)>(X),
2346 detail::workaround_cast<T,
decltype(Y)>(Y),detail::workaround_cast<T,
decltype(Z)>(Z),detail::workaround_cast<T,
decltype(aa)>(aa),
2347 detail::workaround_cast<T,
decltype(ab)>(ab),detail::workaround_cast<T,
decltype(ac)>(ac),detail::workaround_cast<T,
decltype(ad)>(ad),
2348 detail::workaround_cast<T,
decltype(ae)>(ae),detail::workaround_cast<T,
decltype(af)>(af),detail::workaround_cast<T,
decltype(ag)>(ag),
2349 detail::workaround_cast<T,
decltype(ah)>(ah),detail::workaround_cast<T,
decltype(aj)>(aj),detail::workaround_cast<T,
decltype(ak)>(ak),
2350 detail::workaround_cast<T,
decltype(al)>(al),detail::workaround_cast<T,
decltype(am)>(am),detail::workaround_cast<T,
decltype(an)>(an),
2351 detail::workaround_cast<T,
decltype(ap)>(ap),detail::workaround_cast<T,
decltype(aq)>(aq),detail::workaround_cast<T,
decltype(ar)>(ar),
2352 detail::workaround_cast<T,
decltype(as)>(as),detail::workaround_cast<T,
decltype(at)>(at),detail::workaround_cast<T,
decltype(au)>(au),
2353 detail::workaround_cast<T,
decltype(av)>(av),detail::workaround_cast<T,
decltype(aw)>(aw),detail::workaround_cast<T,
decltype(ax)>(ax),
2354 detail::workaround_cast<T,
decltype(ay)>(ay),detail::workaround_cast<T,
decltype(az)>(az),detail::workaround_cast<T,
decltype(aA)>(aA),
2355 detail::workaround_cast<T,
decltype(aB)>(aB),detail::workaround_cast<T,
decltype(aC)>(aC),detail::workaround_cast<T,
decltype(aD)>(aD),
2356 detail::workaround_cast<T,
decltype(aE)>(aE),detail::workaround_cast<T,
decltype(aF)>(aF),detail::workaround_cast<T,
decltype(aG)>(aG),
2357 detail::workaround_cast<T,
decltype(aH)>(aH)
2362constexpr auto tie_as_tuple(T& val, size_t_<80>)
noexcept {
2364 a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,S,U,V,W,X,Y,Z,
2365 aa,ab,ac,ad,ae,af,ag,ah,aj,ak,al,am,an,ap,aq,ar,as,at,au,av,aw,ax,ay,az,aA,aB,aC,aD,aE,aF,aG,aH,aJ
2366 ] =
const_cast<std::remove_cv_t<T>&
>(val);
2368 return ::boost::pfr::detail::make_tuple_of_references(
2369 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
2370 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
2371 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
2372 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
2373 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
2374 detail::workaround_cast<T,
decltype(r)>(r),detail::workaround_cast<T,
decltype(s)>(s),detail::workaround_cast<T,
decltype(t)>(t),
2375 detail::workaround_cast<T,
decltype(u)>(u),detail::workaround_cast<T,
decltype(v)>(v),detail::workaround_cast<T,
decltype(w)>(w),
2376 detail::workaround_cast<T,
decltype(x)>(x),detail::workaround_cast<T,
decltype(y)>(y),detail::workaround_cast<T,
decltype(z)>(z),
2377 detail::workaround_cast<T,
decltype(A)>(A),detail::workaround_cast<T,
decltype(B)>(B),detail::workaround_cast<T,
decltype(C)>(C),
2378 detail::workaround_cast<T,
decltype(D)>(D),detail::workaround_cast<T,
decltype(E)>(E),detail::workaround_cast<T,
decltype(F)>(F),
2379 detail::workaround_cast<T,
decltype(G)>(G),detail::workaround_cast<T,
decltype(H)>(H),detail::workaround_cast<T,
decltype(J)>(J),
2380 detail::workaround_cast<T,
decltype(K)>(K),detail::workaround_cast<T,
decltype(L)>(L),detail::workaround_cast<T,
decltype(M)>(M),
2381 detail::workaround_cast<T,
decltype(N)>(N),detail::workaround_cast<T,
decltype(P)>(P),detail::workaround_cast<T,
decltype(Q)>(Q),
2382 detail::workaround_cast<T,
decltype(R)>(R),detail::workaround_cast<T,
decltype(S)>(S),detail::workaround_cast<T,
decltype(U)>(U),
2383 detail::workaround_cast<T,
decltype(V)>(V),detail::workaround_cast<T,
decltype(W)>(W),detail::workaround_cast<T,
decltype(X)>(X),
2384 detail::workaround_cast<T,
decltype(Y)>(Y),detail::workaround_cast<T,
decltype(Z)>(Z),detail::workaround_cast<T,
decltype(aa)>(aa),
2385 detail::workaround_cast<T,
decltype(ab)>(ab),detail::workaround_cast<T,
decltype(ac)>(ac),detail::workaround_cast<T,
decltype(ad)>(ad),
2386 detail::workaround_cast<T,
decltype(ae)>(ae),detail::workaround_cast<T,
decltype(af)>(af),detail::workaround_cast<T,
decltype(ag)>(ag),
2387 detail::workaround_cast<T,
decltype(ah)>(ah),detail::workaround_cast<T,
decltype(aj)>(aj),detail::workaround_cast<T,
decltype(ak)>(ak),
2388 detail::workaround_cast<T,
decltype(al)>(al),detail::workaround_cast<T,
decltype(am)>(am),detail::workaround_cast<T,
decltype(an)>(an),
2389 detail::workaround_cast<T,
decltype(ap)>(ap),detail::workaround_cast<T,
decltype(aq)>(aq),detail::workaround_cast<T,
decltype(ar)>(ar),
2390 detail::workaround_cast<T,
decltype(as)>(as),detail::workaround_cast<T,
decltype(at)>(at),detail::workaround_cast<T,
decltype(au)>(au),
2391 detail::workaround_cast<T,
decltype(av)>(av),detail::workaround_cast<T,
decltype(aw)>(aw),detail::workaround_cast<T,
decltype(ax)>(ax),
2392 detail::workaround_cast<T,
decltype(ay)>(ay),detail::workaround_cast<T,
decltype(az)>(az),detail::workaround_cast<T,
decltype(aA)>(aA),
2393 detail::workaround_cast<T,
decltype(aB)>(aB),detail::workaround_cast<T,
decltype(aC)>(aC),detail::workaround_cast<T,
decltype(aD)>(aD),
2394 detail::workaround_cast<T,
decltype(aE)>(aE),detail::workaround_cast<T,
decltype(aF)>(aF),detail::workaround_cast<T,
decltype(aG)>(aG),
2395 detail::workaround_cast<T,
decltype(aH)>(aH),detail::workaround_cast<T,
decltype(aJ)>(aJ)
2400constexpr auto tie_as_tuple(T& val, size_t_<81>)
noexcept {
2402 a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,S,U,V,W,X,Y,Z,
2403 aa,ab,ac,ad,ae,af,ag,ah,aj,ak,al,am,an,ap,aq,ar,as,at,au,av,aw,ax,ay,az,aA,aB,aC,aD,aE,aF,aG,aH,aJ,aK
2404 ] =
const_cast<std::remove_cv_t<T>&
>(val);
2406 return ::boost::pfr::detail::make_tuple_of_references(
2407 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
2408 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
2409 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
2410 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
2411 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
2412 detail::workaround_cast<T,
decltype(r)>(r),detail::workaround_cast<T,
decltype(s)>(s),detail::workaround_cast<T,
decltype(t)>(t),
2413 detail::workaround_cast<T,
decltype(u)>(u),detail::workaround_cast<T,
decltype(v)>(v),detail::workaround_cast<T,
decltype(w)>(w),
2414 detail::workaround_cast<T,
decltype(x)>(x),detail::workaround_cast<T,
decltype(y)>(y),detail::workaround_cast<T,
decltype(z)>(z),
2415 detail::workaround_cast<T,
decltype(A)>(A),detail::workaround_cast<T,
decltype(B)>(B),detail::workaround_cast<T,
decltype(C)>(C),
2416 detail::workaround_cast<T,
decltype(D)>(D),detail::workaround_cast<T,
decltype(E)>(E),detail::workaround_cast<T,
decltype(F)>(F),
2417 detail::workaround_cast<T,
decltype(G)>(G),detail::workaround_cast<T,
decltype(H)>(H),detail::workaround_cast<T,
decltype(J)>(J),
2418 detail::workaround_cast<T,
decltype(K)>(K),detail::workaround_cast<T,
decltype(L)>(L),detail::workaround_cast<T,
decltype(M)>(M),
2419 detail::workaround_cast<T,
decltype(N)>(N),detail::workaround_cast<T,
decltype(P)>(P),detail::workaround_cast<T,
decltype(Q)>(Q),
2420 detail::workaround_cast<T,
decltype(R)>(R),detail::workaround_cast<T,
decltype(S)>(S),detail::workaround_cast<T,
decltype(U)>(U),
2421 detail::workaround_cast<T,
decltype(V)>(V),detail::workaround_cast<T,
decltype(W)>(W),detail::workaround_cast<T,
decltype(X)>(X),
2422 detail::workaround_cast<T,
decltype(Y)>(Y),detail::workaround_cast<T,
decltype(Z)>(Z),detail::workaround_cast<T,
decltype(aa)>(aa),
2423 detail::workaround_cast<T,
decltype(ab)>(ab),detail::workaround_cast<T,
decltype(ac)>(ac),detail::workaround_cast<T,
decltype(ad)>(ad),
2424 detail::workaround_cast<T,
decltype(ae)>(ae),detail::workaround_cast<T,
decltype(af)>(af),detail::workaround_cast<T,
decltype(ag)>(ag),
2425 detail::workaround_cast<T,
decltype(ah)>(ah),detail::workaround_cast<T,
decltype(aj)>(aj),detail::workaround_cast<T,
decltype(ak)>(ak),
2426 detail::workaround_cast<T,
decltype(al)>(al),detail::workaround_cast<T,
decltype(am)>(am),detail::workaround_cast<T,
decltype(an)>(an),
2427 detail::workaround_cast<T,
decltype(ap)>(ap),detail::workaround_cast<T,
decltype(aq)>(aq),detail::workaround_cast<T,
decltype(ar)>(ar),
2428 detail::workaround_cast<T,
decltype(as)>(as),detail::workaround_cast<T,
decltype(at)>(at),detail::workaround_cast<T,
decltype(au)>(au),
2429 detail::workaround_cast<T,
decltype(av)>(av),detail::workaround_cast<T,
decltype(aw)>(aw),detail::workaround_cast<T,
decltype(ax)>(ax),
2430 detail::workaround_cast<T,
decltype(ay)>(ay),detail::workaround_cast<T,
decltype(az)>(az),detail::workaround_cast<T,
decltype(aA)>(aA),
2431 detail::workaround_cast<T,
decltype(aB)>(aB),detail::workaround_cast<T,
decltype(aC)>(aC),detail::workaround_cast<T,
decltype(aD)>(aD),
2432 detail::workaround_cast<T,
decltype(aE)>(aE),detail::workaround_cast<T,
decltype(aF)>(aF),detail::workaround_cast<T,
decltype(aG)>(aG),
2433 detail::workaround_cast<T,
decltype(aH)>(aH),detail::workaround_cast<T,
decltype(aJ)>(aJ),detail::workaround_cast<T,
decltype(aK)>(aK)
2438constexpr auto tie_as_tuple(T& val, size_t_<82>)
noexcept {
2440 a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,S,U,V,W,X,Y,Z,
2441 aa,ab,ac,ad,ae,af,ag,ah,aj,ak,al,am,an,ap,aq,ar,as,at,au,av,aw,ax,ay,az,aA,aB,aC,aD,aE,aF,aG,aH,aJ,aK,aL
2442 ] =
const_cast<std::remove_cv_t<T>&
>(val);
2444 return ::boost::pfr::detail::make_tuple_of_references(
2445 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
2446 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
2447 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
2448 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
2449 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
2450 detail::workaround_cast<T,
decltype(r)>(r),detail::workaround_cast<T,
decltype(s)>(s),detail::workaround_cast<T,
decltype(t)>(t),
2451 detail::workaround_cast<T,
decltype(u)>(u),detail::workaround_cast<T,
decltype(v)>(v),detail::workaround_cast<T,
decltype(w)>(w),
2452 detail::workaround_cast<T,
decltype(x)>(x),detail::workaround_cast<T,
decltype(y)>(y),detail::workaround_cast<T,
decltype(z)>(z),
2453 detail::workaround_cast<T,
decltype(A)>(A),detail::workaround_cast<T,
decltype(B)>(B),detail::workaround_cast<T,
decltype(C)>(C),
2454 detail::workaround_cast<T,
decltype(D)>(D),detail::workaround_cast<T,
decltype(E)>(E),detail::workaround_cast<T,
decltype(F)>(F),
2455 detail::workaround_cast<T,
decltype(G)>(G),detail::workaround_cast<T,
decltype(H)>(H),detail::workaround_cast<T,
decltype(J)>(J),
2456 detail::workaround_cast<T,
decltype(K)>(K),detail::workaround_cast<T,
decltype(L)>(L),detail::workaround_cast<T,
decltype(M)>(M),
2457 detail::workaround_cast<T,
decltype(N)>(N),detail::workaround_cast<T,
decltype(P)>(P),detail::workaround_cast<T,
decltype(Q)>(Q),
2458 detail::workaround_cast<T,
decltype(R)>(R),detail::workaround_cast<T,
decltype(S)>(S),detail::workaround_cast<T,
decltype(U)>(U),
2459 detail::workaround_cast<T,
decltype(V)>(V),detail::workaround_cast<T,
decltype(W)>(W),detail::workaround_cast<T,
decltype(X)>(X),
2460 detail::workaround_cast<T,
decltype(Y)>(Y),detail::workaround_cast<T,
decltype(Z)>(Z),detail::workaround_cast<T,
decltype(aa)>(aa),
2461 detail::workaround_cast<T,
decltype(ab)>(ab),detail::workaround_cast<T,
decltype(ac)>(ac),detail::workaround_cast<T,
decltype(ad)>(ad),
2462 detail::workaround_cast<T,
decltype(ae)>(ae),detail::workaround_cast<T,
decltype(af)>(af),detail::workaround_cast<T,
decltype(ag)>(ag),
2463 detail::workaround_cast<T,
decltype(ah)>(ah),detail::workaround_cast<T,
decltype(aj)>(aj),detail::workaround_cast<T,
decltype(ak)>(ak),
2464 detail::workaround_cast<T,
decltype(al)>(al),detail::workaround_cast<T,
decltype(am)>(am),detail::workaround_cast<T,
decltype(an)>(an),
2465 detail::workaround_cast<T,
decltype(ap)>(ap),detail::workaround_cast<T,
decltype(aq)>(aq),detail::workaround_cast<T,
decltype(ar)>(ar),
2466 detail::workaround_cast<T,
decltype(as)>(as),detail::workaround_cast<T,
decltype(at)>(at),detail::workaround_cast<T,
decltype(au)>(au),
2467 detail::workaround_cast<T,
decltype(av)>(av),detail::workaround_cast<T,
decltype(aw)>(aw),detail::workaround_cast<T,
decltype(ax)>(ax),
2468 detail::workaround_cast<T,
decltype(ay)>(ay),detail::workaround_cast<T,
decltype(az)>(az),detail::workaround_cast<T,
decltype(aA)>(aA),
2469 detail::workaround_cast<T,
decltype(aB)>(aB),detail::workaround_cast<T,
decltype(aC)>(aC),detail::workaround_cast<T,
decltype(aD)>(aD),
2470 detail::workaround_cast<T,
decltype(aE)>(aE),detail::workaround_cast<T,
decltype(aF)>(aF),detail::workaround_cast<T,
decltype(aG)>(aG),
2471 detail::workaround_cast<T,
decltype(aH)>(aH),detail::workaround_cast<T,
decltype(aJ)>(aJ),detail::workaround_cast<T,
decltype(aK)>(aK),
2472 detail::workaround_cast<T,
decltype(aL)>(aL)
2477constexpr auto tie_as_tuple(T& val, size_t_<83>)
noexcept {
2479 a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,S,U,V,W,X,Y,Z,
2480 aa,ab,ac,ad,ae,af,ag,ah,aj,ak,al,am,an,ap,aq,ar,as,at,au,av,aw,ax,ay,az,aA,aB,aC,aD,aE,aF,aG,aH,aJ,aK,aL,aM
2481 ] =
const_cast<std::remove_cv_t<T>&
>(val);
2483 return ::boost::pfr::detail::make_tuple_of_references(
2484 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
2485 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
2486 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
2487 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
2488 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
2489 detail::workaround_cast<T,
decltype(r)>(r),detail::workaround_cast<T,
decltype(s)>(s),detail::workaround_cast<T,
decltype(t)>(t),
2490 detail::workaround_cast<T,
decltype(u)>(u),detail::workaround_cast<T,
decltype(v)>(v),detail::workaround_cast<T,
decltype(w)>(w),
2491 detail::workaround_cast<T,
decltype(x)>(x),detail::workaround_cast<T,
decltype(y)>(y),detail::workaround_cast<T,
decltype(z)>(z),
2492 detail::workaround_cast<T,
decltype(A)>(A),detail::workaround_cast<T,
decltype(B)>(B),detail::workaround_cast<T,
decltype(C)>(C),
2493 detail::workaround_cast<T,
decltype(D)>(D),detail::workaround_cast<T,
decltype(E)>(E),detail::workaround_cast<T,
decltype(F)>(F),
2494 detail::workaround_cast<T,
decltype(G)>(G),detail::workaround_cast<T,
decltype(H)>(H),detail::workaround_cast<T,
decltype(J)>(J),
2495 detail::workaround_cast<T,
decltype(K)>(K),detail::workaround_cast<T,
decltype(L)>(L),detail::workaround_cast<T,
decltype(M)>(M),
2496 detail::workaround_cast<T,
decltype(N)>(N),detail::workaround_cast<T,
decltype(P)>(P),detail::workaround_cast<T,
decltype(Q)>(Q),
2497 detail::workaround_cast<T,
decltype(R)>(R),detail::workaround_cast<T,
decltype(S)>(S),detail::workaround_cast<T,
decltype(U)>(U),
2498 detail::workaround_cast<T,
decltype(V)>(V),detail::workaround_cast<T,
decltype(W)>(W),detail::workaround_cast<T,
decltype(X)>(X),
2499 detail::workaround_cast<T,
decltype(Y)>(Y),detail::workaround_cast<T,
decltype(Z)>(Z),detail::workaround_cast<T,
decltype(aa)>(aa),
2500 detail::workaround_cast<T,
decltype(ab)>(ab),detail::workaround_cast<T,
decltype(ac)>(ac),detail::workaround_cast<T,
decltype(ad)>(ad),
2501 detail::workaround_cast<T,
decltype(ae)>(ae),detail::workaround_cast<T,
decltype(af)>(af),detail::workaround_cast<T,
decltype(ag)>(ag),
2502 detail::workaround_cast<T,
decltype(ah)>(ah),detail::workaround_cast<T,
decltype(aj)>(aj),detail::workaround_cast<T,
decltype(ak)>(ak),
2503 detail::workaround_cast<T,
decltype(al)>(al),detail::workaround_cast<T,
decltype(am)>(am),detail::workaround_cast<T,
decltype(an)>(an),
2504 detail::workaround_cast<T,
decltype(ap)>(ap),detail::workaround_cast<T,
decltype(aq)>(aq),detail::workaround_cast<T,
decltype(ar)>(ar),
2505 detail::workaround_cast<T,
decltype(as)>(as),detail::workaround_cast<T,
decltype(at)>(at),detail::workaround_cast<T,
decltype(au)>(au),
2506 detail::workaround_cast<T,
decltype(av)>(av),detail::workaround_cast<T,
decltype(aw)>(aw),detail::workaround_cast<T,
decltype(ax)>(ax),
2507 detail::workaround_cast<T,
decltype(ay)>(ay),detail::workaround_cast<T,
decltype(az)>(az),detail::workaround_cast<T,
decltype(aA)>(aA),
2508 detail::workaround_cast<T,
decltype(aB)>(aB),detail::workaround_cast<T,
decltype(aC)>(aC),detail::workaround_cast<T,
decltype(aD)>(aD),
2509 detail::workaround_cast<T,
decltype(aE)>(aE),detail::workaround_cast<T,
decltype(aF)>(aF),detail::workaround_cast<T,
decltype(aG)>(aG),
2510 detail::workaround_cast<T,
decltype(aH)>(aH),detail::workaround_cast<T,
decltype(aJ)>(aJ),detail::workaround_cast<T,
decltype(aK)>(aK),
2511 detail::workaround_cast<T,
decltype(aL)>(aL),detail::workaround_cast<T,
decltype(aM)>(aM)
2516constexpr auto tie_as_tuple(T& val, size_t_<84>)
noexcept {
2518 a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,S,U,V,W,X,Y,Z,
2519 aa,ab,ac,ad,ae,af,ag,ah,aj,ak,al,am,an,ap,aq,ar,as,at,au,av,aw,ax,ay,az,aA,aB,aC,aD,aE,aF,aG,aH,aJ,aK,aL,aM,aN
2520 ] =
const_cast<std::remove_cv_t<T>&
>(val);
2522 return ::boost::pfr::detail::make_tuple_of_references(
2523 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
2524 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
2525 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
2526 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
2527 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
2528 detail::workaround_cast<T,
decltype(r)>(r),detail::workaround_cast<T,
decltype(s)>(s),detail::workaround_cast<T,
decltype(t)>(t),
2529 detail::workaround_cast<T,
decltype(u)>(u),detail::workaround_cast<T,
decltype(v)>(v),detail::workaround_cast<T,
decltype(w)>(w),
2530 detail::workaround_cast<T,
decltype(x)>(x),detail::workaround_cast<T,
decltype(y)>(y),detail::workaround_cast<T,
decltype(z)>(z),
2531 detail::workaround_cast<T,
decltype(A)>(A),detail::workaround_cast<T,
decltype(B)>(B),detail::workaround_cast<T,
decltype(C)>(C),
2532 detail::workaround_cast<T,
decltype(D)>(D),detail::workaround_cast<T,
decltype(E)>(E),detail::workaround_cast<T,
decltype(F)>(F),
2533 detail::workaround_cast<T,
decltype(G)>(G),detail::workaround_cast<T,
decltype(H)>(H),detail::workaround_cast<T,
decltype(J)>(J),
2534 detail::workaround_cast<T,
decltype(K)>(K),detail::workaround_cast<T,
decltype(L)>(L),detail::workaround_cast<T,
decltype(M)>(M),
2535 detail::workaround_cast<T,
decltype(N)>(N),detail::workaround_cast<T,
decltype(P)>(P),detail::workaround_cast<T,
decltype(Q)>(Q),
2536 detail::workaround_cast<T,
decltype(R)>(R),detail::workaround_cast<T,
decltype(S)>(S),detail::workaround_cast<T,
decltype(U)>(U),
2537 detail::workaround_cast<T,
decltype(V)>(V),detail::workaround_cast<T,
decltype(W)>(W),detail::workaround_cast<T,
decltype(X)>(X),
2538 detail::workaround_cast<T,
decltype(Y)>(Y),detail::workaround_cast<T,
decltype(Z)>(Z),detail::workaround_cast<T,
decltype(aa)>(aa),
2539 detail::workaround_cast<T,
decltype(ab)>(ab),detail::workaround_cast<T,
decltype(ac)>(ac),detail::workaround_cast<T,
decltype(ad)>(ad),
2540 detail::workaround_cast<T,
decltype(ae)>(ae),detail::workaround_cast<T,
decltype(af)>(af),detail::workaround_cast<T,
decltype(ag)>(ag),
2541 detail::workaround_cast<T,
decltype(ah)>(ah),detail::workaround_cast<T,
decltype(aj)>(aj),detail::workaround_cast<T,
decltype(ak)>(ak),
2542 detail::workaround_cast<T,
decltype(al)>(al),detail::workaround_cast<T,
decltype(am)>(am),detail::workaround_cast<T,
decltype(an)>(an),
2543 detail::workaround_cast<T,
decltype(ap)>(ap),detail::workaround_cast<T,
decltype(aq)>(aq),detail::workaround_cast<T,
decltype(ar)>(ar),
2544 detail::workaround_cast<T,
decltype(as)>(as),detail::workaround_cast<T,
decltype(at)>(at),detail::workaround_cast<T,
decltype(au)>(au),
2545 detail::workaround_cast<T,
decltype(av)>(av),detail::workaround_cast<T,
decltype(aw)>(aw),detail::workaround_cast<T,
decltype(ax)>(ax),
2546 detail::workaround_cast<T,
decltype(ay)>(ay),detail::workaround_cast<T,
decltype(az)>(az),detail::workaround_cast<T,
decltype(aA)>(aA),
2547 detail::workaround_cast<T,
decltype(aB)>(aB),detail::workaround_cast<T,
decltype(aC)>(aC),detail::workaround_cast<T,
decltype(aD)>(aD),
2548 detail::workaround_cast<T,
decltype(aE)>(aE),detail::workaround_cast<T,
decltype(aF)>(aF),detail::workaround_cast<T,
decltype(aG)>(aG),
2549 detail::workaround_cast<T,
decltype(aH)>(aH),detail::workaround_cast<T,
decltype(aJ)>(aJ),detail::workaround_cast<T,
decltype(aK)>(aK),
2550 detail::workaround_cast<T,
decltype(aL)>(aL),detail::workaround_cast<T,
decltype(aM)>(aM),detail::workaround_cast<T,
decltype(aN)>(aN)
2555constexpr auto tie_as_tuple(T& val, size_t_<85>)
noexcept {
2557 a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,S,U,V,W,X,Y,Z,
2558 aa,ab,ac,ad,ae,af,ag,ah,aj,ak,al,am,an,ap,aq,ar,as,at,au,av,aw,ax,ay,az,aA,aB,aC,aD,aE,aF,aG,aH,aJ,aK,aL,aM,aN,aP
2559 ] =
const_cast<std::remove_cv_t<T>&
>(val);
2561 return ::boost::pfr::detail::make_tuple_of_references(
2562 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
2563 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
2564 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
2565 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
2566 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
2567 detail::workaround_cast<T,
decltype(r)>(r),detail::workaround_cast<T,
decltype(s)>(s),detail::workaround_cast<T,
decltype(t)>(t),
2568 detail::workaround_cast<T,
decltype(u)>(u),detail::workaround_cast<T,
decltype(v)>(v),detail::workaround_cast<T,
decltype(w)>(w),
2569 detail::workaround_cast<T,
decltype(x)>(x),detail::workaround_cast<T,
decltype(y)>(y),detail::workaround_cast<T,
decltype(z)>(z),
2570 detail::workaround_cast<T,
decltype(A)>(A),detail::workaround_cast<T,
decltype(B)>(B),detail::workaround_cast<T,
decltype(C)>(C),
2571 detail::workaround_cast<T,
decltype(D)>(D),detail::workaround_cast<T,
decltype(E)>(E),detail::workaround_cast<T,
decltype(F)>(F),
2572 detail::workaround_cast<T,
decltype(G)>(G),detail::workaround_cast<T,
decltype(H)>(H),detail::workaround_cast<T,
decltype(J)>(J),
2573 detail::workaround_cast<T,
decltype(K)>(K),detail::workaround_cast<T,
decltype(L)>(L),detail::workaround_cast<T,
decltype(M)>(M),
2574 detail::workaround_cast<T,
decltype(N)>(N),detail::workaround_cast<T,
decltype(P)>(P),detail::workaround_cast<T,
decltype(Q)>(Q),
2575 detail::workaround_cast<T,
decltype(R)>(R),detail::workaround_cast<T,
decltype(S)>(S),detail::workaround_cast<T,
decltype(U)>(U),
2576 detail::workaround_cast<T,
decltype(V)>(V),detail::workaround_cast<T,
decltype(W)>(W),detail::workaround_cast<T,
decltype(X)>(X),
2577 detail::workaround_cast<T,
decltype(Y)>(Y),detail::workaround_cast<T,
decltype(Z)>(Z),detail::workaround_cast<T,
decltype(aa)>(aa),
2578 detail::workaround_cast<T,
decltype(ab)>(ab),detail::workaround_cast<T,
decltype(ac)>(ac),detail::workaround_cast<T,
decltype(ad)>(ad),
2579 detail::workaround_cast<T,
decltype(ae)>(ae),detail::workaround_cast<T,
decltype(af)>(af),detail::workaround_cast<T,
decltype(ag)>(ag),
2580 detail::workaround_cast<T,
decltype(ah)>(ah),detail::workaround_cast<T,
decltype(aj)>(aj),detail::workaround_cast<T,
decltype(ak)>(ak),
2581 detail::workaround_cast<T,
decltype(al)>(al),detail::workaround_cast<T,
decltype(am)>(am),detail::workaround_cast<T,
decltype(an)>(an),
2582 detail::workaround_cast<T,
decltype(ap)>(ap),detail::workaround_cast<T,
decltype(aq)>(aq),detail::workaround_cast<T,
decltype(ar)>(ar),
2583 detail::workaround_cast<T,
decltype(as)>(as),detail::workaround_cast<T,
decltype(at)>(at),detail::workaround_cast<T,
decltype(au)>(au),
2584 detail::workaround_cast<T,
decltype(av)>(av),detail::workaround_cast<T,
decltype(aw)>(aw),detail::workaround_cast<T,
decltype(ax)>(ax),
2585 detail::workaround_cast<T,
decltype(ay)>(ay),detail::workaround_cast<T,
decltype(az)>(az),detail::workaround_cast<T,
decltype(aA)>(aA),
2586 detail::workaround_cast<T,
decltype(aB)>(aB),detail::workaround_cast<T,
decltype(aC)>(aC),detail::workaround_cast<T,
decltype(aD)>(aD),
2587 detail::workaround_cast<T,
decltype(aE)>(aE),detail::workaround_cast<T,
decltype(aF)>(aF),detail::workaround_cast<T,
decltype(aG)>(aG),
2588 detail::workaround_cast<T,
decltype(aH)>(aH),detail::workaround_cast<T,
decltype(aJ)>(aJ),detail::workaround_cast<T,
decltype(aK)>(aK),
2589 detail::workaround_cast<T,
decltype(aL)>(aL),detail::workaround_cast<T,
decltype(aM)>(aM),detail::workaround_cast<T,
decltype(aN)>(aN),
2590 detail::workaround_cast<T,
decltype(aP)>(aP)
2595constexpr auto tie_as_tuple(T& val, size_t_<86>)
noexcept {
2597 a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,S,U,V,W,X,Y,Z,
2598 aa,ab,ac,ad,ae,af,ag,ah,aj,ak,al,am,an,ap,aq,ar,as,at,au,av,aw,ax,ay,az,aA,aB,aC,aD,aE,aF,aG,aH,aJ,aK,aL,aM,aN,aP,aQ
2599 ] =
const_cast<std::remove_cv_t<T>&
>(val);
2601 return ::boost::pfr::detail::make_tuple_of_references(
2602 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
2603 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
2604 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
2605 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
2606 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
2607 detail::workaround_cast<T,
decltype(r)>(r),detail::workaround_cast<T,
decltype(s)>(s),detail::workaround_cast<T,
decltype(t)>(t),
2608 detail::workaround_cast<T,
decltype(u)>(u),detail::workaround_cast<T,
decltype(v)>(v),detail::workaround_cast<T,
decltype(w)>(w),
2609 detail::workaround_cast<T,
decltype(x)>(x),detail::workaround_cast<T,
decltype(y)>(y),detail::workaround_cast<T,
decltype(z)>(z),
2610 detail::workaround_cast<T,
decltype(A)>(A),detail::workaround_cast<T,
decltype(B)>(B),detail::workaround_cast<T,
decltype(C)>(C),
2611 detail::workaround_cast<T,
decltype(D)>(D),detail::workaround_cast<T,
decltype(E)>(E),detail::workaround_cast<T,
decltype(F)>(F),
2612 detail::workaround_cast<T,
decltype(G)>(G),detail::workaround_cast<T,
decltype(H)>(H),detail::workaround_cast<T,
decltype(J)>(J),
2613 detail::workaround_cast<T,
decltype(K)>(K),detail::workaround_cast<T,
decltype(L)>(L),detail::workaround_cast<T,
decltype(M)>(M),
2614 detail::workaround_cast<T,
decltype(N)>(N),detail::workaround_cast<T,
decltype(P)>(P),detail::workaround_cast<T,
decltype(Q)>(Q),
2615 detail::workaround_cast<T,
decltype(R)>(R),detail::workaround_cast<T,
decltype(S)>(S),detail::workaround_cast<T,
decltype(U)>(U),
2616 detail::workaround_cast<T,
decltype(V)>(V),detail::workaround_cast<T,
decltype(W)>(W),detail::workaround_cast<T,
decltype(X)>(X),
2617 detail::workaround_cast<T,
decltype(Y)>(Y),detail::workaround_cast<T,
decltype(Z)>(Z),detail::workaround_cast<T,
decltype(aa)>(aa),
2618 detail::workaround_cast<T,
decltype(ab)>(ab),detail::workaround_cast<T,
decltype(ac)>(ac),detail::workaround_cast<T,
decltype(ad)>(ad),
2619 detail::workaround_cast<T,
decltype(ae)>(ae),detail::workaround_cast<T,
decltype(af)>(af),detail::workaround_cast<T,
decltype(ag)>(ag),
2620 detail::workaround_cast<T,
decltype(ah)>(ah),detail::workaround_cast<T,
decltype(aj)>(aj),detail::workaround_cast<T,
decltype(ak)>(ak),
2621 detail::workaround_cast<T,
decltype(al)>(al),detail::workaround_cast<T,
decltype(am)>(am),detail::workaround_cast<T,
decltype(an)>(an),
2622 detail::workaround_cast<T,
decltype(ap)>(ap),detail::workaround_cast<T,
decltype(aq)>(aq),detail::workaround_cast<T,
decltype(ar)>(ar),
2623 detail::workaround_cast<T,
decltype(as)>(as),detail::workaround_cast<T,
decltype(at)>(at),detail::workaround_cast<T,
decltype(au)>(au),
2624 detail::workaround_cast<T,
decltype(av)>(av),detail::workaround_cast<T,
decltype(aw)>(aw),detail::workaround_cast<T,
decltype(ax)>(ax),
2625 detail::workaround_cast<T,
decltype(ay)>(ay),detail::workaround_cast<T,
decltype(az)>(az),detail::workaround_cast<T,
decltype(aA)>(aA),
2626 detail::workaround_cast<T,
decltype(aB)>(aB),detail::workaround_cast<T,
decltype(aC)>(aC),detail::workaround_cast<T,
decltype(aD)>(aD),
2627 detail::workaround_cast<T,
decltype(aE)>(aE),detail::workaround_cast<T,
decltype(aF)>(aF),detail::workaround_cast<T,
decltype(aG)>(aG),
2628 detail::workaround_cast<T,
decltype(aH)>(aH),detail::workaround_cast<T,
decltype(aJ)>(aJ),detail::workaround_cast<T,
decltype(aK)>(aK),
2629 detail::workaround_cast<T,
decltype(aL)>(aL),detail::workaround_cast<T,
decltype(aM)>(aM),detail::workaround_cast<T,
decltype(aN)>(aN),
2630 detail::workaround_cast<T,
decltype(aP)>(aP),detail::workaround_cast<T,
decltype(aQ)>(aQ)
2635constexpr auto tie_as_tuple(T& val, size_t_<87>)
noexcept {
2637 a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,S,U,V,W,X,Y,Z,
2638 aa,ab,ac,ad,ae,af,ag,ah,aj,ak,al,am,an,ap,aq,ar,as,at,au,av,aw,ax,ay,az,aA,aB,aC,aD,aE,aF,aG,aH,aJ,aK,aL,aM,aN,aP,aQ,aR
2639 ] =
const_cast<std::remove_cv_t<T>&
>(val);
2641 return ::boost::pfr::detail::make_tuple_of_references(
2642 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
2643 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
2644 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
2645 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
2646 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
2647 detail::workaround_cast<T,
decltype(r)>(r),detail::workaround_cast<T,
decltype(s)>(s),detail::workaround_cast<T,
decltype(t)>(t),
2648 detail::workaround_cast<T,
decltype(u)>(u),detail::workaround_cast<T,
decltype(v)>(v),detail::workaround_cast<T,
decltype(w)>(w),
2649 detail::workaround_cast<T,
decltype(x)>(x),detail::workaround_cast<T,
decltype(y)>(y),detail::workaround_cast<T,
decltype(z)>(z),
2650 detail::workaround_cast<T,
decltype(A)>(A),detail::workaround_cast<T,
decltype(B)>(B),detail::workaround_cast<T,
decltype(C)>(C),
2651 detail::workaround_cast<T,
decltype(D)>(D),detail::workaround_cast<T,
decltype(E)>(E),detail::workaround_cast<T,
decltype(F)>(F),
2652 detail::workaround_cast<T,
decltype(G)>(G),detail::workaround_cast<T,
decltype(H)>(H),detail::workaround_cast<T,
decltype(J)>(J),
2653 detail::workaround_cast<T,
decltype(K)>(K),detail::workaround_cast<T,
decltype(L)>(L),detail::workaround_cast<T,
decltype(M)>(M),
2654 detail::workaround_cast<T,
decltype(N)>(N),detail::workaround_cast<T,
decltype(P)>(P),detail::workaround_cast<T,
decltype(Q)>(Q),
2655 detail::workaround_cast<T,
decltype(R)>(R),detail::workaround_cast<T,
decltype(S)>(S),detail::workaround_cast<T,
decltype(U)>(U),
2656 detail::workaround_cast<T,
decltype(V)>(V),detail::workaround_cast<T,
decltype(W)>(W),detail::workaround_cast<T,
decltype(X)>(X),
2657 detail::workaround_cast<T,
decltype(Y)>(Y),detail::workaround_cast<T,
decltype(Z)>(Z),detail::workaround_cast<T,
decltype(aa)>(aa),
2658 detail::workaround_cast<T,
decltype(ab)>(ab),detail::workaround_cast<T,
decltype(ac)>(ac),detail::workaround_cast<T,
decltype(ad)>(ad),
2659 detail::workaround_cast<T,
decltype(ae)>(ae),detail::workaround_cast<T,
decltype(af)>(af),detail::workaround_cast<T,
decltype(ag)>(ag),
2660 detail::workaround_cast<T,
decltype(ah)>(ah),detail::workaround_cast<T,
decltype(aj)>(aj),detail::workaround_cast<T,
decltype(ak)>(ak),
2661 detail::workaround_cast<T,
decltype(al)>(al),detail::workaround_cast<T,
decltype(am)>(am),detail::workaround_cast<T,
decltype(an)>(an),
2662 detail::workaround_cast<T,
decltype(ap)>(ap),detail::workaround_cast<T,
decltype(aq)>(aq),detail::workaround_cast<T,
decltype(ar)>(ar),
2663 detail::workaround_cast<T,
decltype(as)>(as),detail::workaround_cast<T,
decltype(at)>(at),detail::workaround_cast<T,
decltype(au)>(au),
2664 detail::workaround_cast<T,
decltype(av)>(av),detail::workaround_cast<T,
decltype(aw)>(aw),detail::workaround_cast<T,
decltype(ax)>(ax),
2665 detail::workaround_cast<T,
decltype(ay)>(ay),detail::workaround_cast<T,
decltype(az)>(az),detail::workaround_cast<T,
decltype(aA)>(aA),
2666 detail::workaround_cast<T,
decltype(aB)>(aB),detail::workaround_cast<T,
decltype(aC)>(aC),detail::workaround_cast<T,
decltype(aD)>(aD),
2667 detail::workaround_cast<T,
decltype(aE)>(aE),detail::workaround_cast<T,
decltype(aF)>(aF),detail::workaround_cast<T,
decltype(aG)>(aG),
2668 detail::workaround_cast<T,
decltype(aH)>(aH),detail::workaround_cast<T,
decltype(aJ)>(aJ),detail::workaround_cast<T,
decltype(aK)>(aK),
2669 detail::workaround_cast<T,
decltype(aL)>(aL),detail::workaround_cast<T,
decltype(aM)>(aM),detail::workaround_cast<T,
decltype(aN)>(aN),
2670 detail::workaround_cast<T,
decltype(aP)>(aP),detail::workaround_cast<T,
decltype(aQ)>(aQ),detail::workaround_cast<T,
decltype(aR)>(aR)
2675constexpr auto tie_as_tuple(T& val, size_t_<88>)
noexcept {
2677 a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,S,U,V,W,X,Y,Z,
2678 aa,ab,ac,ad,ae,af,ag,ah,aj,ak,al,am,an,ap,aq,ar,as,at,au,av,aw,ax,ay,az,aA,aB,aC,aD,aE,aF,aG,aH,aJ,aK,aL,aM,aN,aP,aQ,aR,aS
2679 ] =
const_cast<std::remove_cv_t<T>&
>(val);
2681 return ::boost::pfr::detail::make_tuple_of_references(
2682 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
2683 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
2684 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
2685 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
2686 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
2687 detail::workaround_cast<T,
decltype(r)>(r),detail::workaround_cast<T,
decltype(s)>(s),detail::workaround_cast<T,
decltype(t)>(t),
2688 detail::workaround_cast<T,
decltype(u)>(u),detail::workaround_cast<T,
decltype(v)>(v),detail::workaround_cast<T,
decltype(w)>(w),
2689 detail::workaround_cast<T,
decltype(x)>(x),detail::workaround_cast<T,
decltype(y)>(y),detail::workaround_cast<T,
decltype(z)>(z),
2690 detail::workaround_cast<T,
decltype(A)>(A),detail::workaround_cast<T,
decltype(B)>(B),detail::workaround_cast<T,
decltype(C)>(C),
2691 detail::workaround_cast<T,
decltype(D)>(D),detail::workaround_cast<T,
decltype(E)>(E),detail::workaround_cast<T,
decltype(F)>(F),
2692 detail::workaround_cast<T,
decltype(G)>(G),detail::workaround_cast<T,
decltype(H)>(H),detail::workaround_cast<T,
decltype(J)>(J),
2693 detail::workaround_cast<T,
decltype(K)>(K),detail::workaround_cast<T,
decltype(L)>(L),detail::workaround_cast<T,
decltype(M)>(M),
2694 detail::workaround_cast<T,
decltype(N)>(N),detail::workaround_cast<T,
decltype(P)>(P),detail::workaround_cast<T,
decltype(Q)>(Q),
2695 detail::workaround_cast<T,
decltype(R)>(R),detail::workaround_cast<T,
decltype(S)>(S),detail::workaround_cast<T,
decltype(U)>(U),
2696 detail::workaround_cast<T,
decltype(V)>(V),detail::workaround_cast<T,
decltype(W)>(W),detail::workaround_cast<T,
decltype(X)>(X),
2697 detail::workaround_cast<T,
decltype(Y)>(Y),detail::workaround_cast<T,
decltype(Z)>(Z),detail::workaround_cast<T,
decltype(aa)>(aa),
2698 detail::workaround_cast<T,
decltype(ab)>(ab),detail::workaround_cast<T,
decltype(ac)>(ac),detail::workaround_cast<T,
decltype(ad)>(ad),
2699 detail::workaround_cast<T,
decltype(ae)>(ae),detail::workaround_cast<T,
decltype(af)>(af),detail::workaround_cast<T,
decltype(ag)>(ag),
2700 detail::workaround_cast<T,
decltype(ah)>(ah),detail::workaround_cast<T,
decltype(aj)>(aj),detail::workaround_cast<T,
decltype(ak)>(ak),
2701 detail::workaround_cast<T,
decltype(al)>(al),detail::workaround_cast<T,
decltype(am)>(am),detail::workaround_cast<T,
decltype(an)>(an),
2702 detail::workaround_cast<T,
decltype(ap)>(ap),detail::workaround_cast<T,
decltype(aq)>(aq),detail::workaround_cast<T,
decltype(ar)>(ar),
2703 detail::workaround_cast<T,
decltype(as)>(as),detail::workaround_cast<T,
decltype(at)>(at),detail::workaround_cast<T,
decltype(au)>(au),
2704 detail::workaround_cast<T,
decltype(av)>(av),detail::workaround_cast<T,
decltype(aw)>(aw),detail::workaround_cast<T,
decltype(ax)>(ax),
2705 detail::workaround_cast<T,
decltype(ay)>(ay),detail::workaround_cast<T,
decltype(az)>(az),detail::workaround_cast<T,
decltype(aA)>(aA),
2706 detail::workaround_cast<T,
decltype(aB)>(aB),detail::workaround_cast<T,
decltype(aC)>(aC),detail::workaround_cast<T,
decltype(aD)>(aD),
2707 detail::workaround_cast<T,
decltype(aE)>(aE),detail::workaround_cast<T,
decltype(aF)>(aF),detail::workaround_cast<T,
decltype(aG)>(aG),
2708 detail::workaround_cast<T,
decltype(aH)>(aH),detail::workaround_cast<T,
decltype(aJ)>(aJ),detail::workaround_cast<T,
decltype(aK)>(aK),
2709 detail::workaround_cast<T,
decltype(aL)>(aL),detail::workaround_cast<T,
decltype(aM)>(aM),detail::workaround_cast<T,
decltype(aN)>(aN),
2710 detail::workaround_cast<T,
decltype(aP)>(aP),detail::workaround_cast<T,
decltype(aQ)>(aQ),detail::workaround_cast<T,
decltype(aR)>(aR),
2711 detail::workaround_cast<T,
decltype(aS)>(aS)
2716constexpr auto tie_as_tuple(T& val, size_t_<89>)
noexcept {
2718 a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,S,U,V,W,X,Y,Z,
2719 aa,ab,ac,ad,ae,af,ag,ah,aj,ak,al,am,an,ap,aq,ar,as,at,au,av,aw,ax,ay,az,aA,aB,aC,aD,aE,aF,aG,aH,aJ,aK,aL,aM,aN,aP,aQ,aR,aS,aU
2720 ] =
const_cast<std::remove_cv_t<T>&
>(val);
2722 return ::boost::pfr::detail::make_tuple_of_references(
2723 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
2724 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
2725 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
2726 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
2727 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
2728 detail::workaround_cast<T,
decltype(r)>(r),detail::workaround_cast<T,
decltype(s)>(s),detail::workaround_cast<T,
decltype(t)>(t),
2729 detail::workaround_cast<T,
decltype(u)>(u),detail::workaround_cast<T,
decltype(v)>(v),detail::workaround_cast<T,
decltype(w)>(w),
2730 detail::workaround_cast<T,
decltype(x)>(x),detail::workaround_cast<T,
decltype(y)>(y),detail::workaround_cast<T,
decltype(z)>(z),
2731 detail::workaround_cast<T,
decltype(A)>(A),detail::workaround_cast<T,
decltype(B)>(B),detail::workaround_cast<T,
decltype(C)>(C),
2732 detail::workaround_cast<T,
decltype(D)>(D),detail::workaround_cast<T,
decltype(E)>(E),detail::workaround_cast<T,
decltype(F)>(F),
2733 detail::workaround_cast<T,
decltype(G)>(G),detail::workaround_cast<T,
decltype(H)>(H),detail::workaround_cast<T,
decltype(J)>(J),
2734 detail::workaround_cast<T,
decltype(K)>(K),detail::workaround_cast<T,
decltype(L)>(L),detail::workaround_cast<T,
decltype(M)>(M),
2735 detail::workaround_cast<T,
decltype(N)>(N),detail::workaround_cast<T,
decltype(P)>(P),detail::workaround_cast<T,
decltype(Q)>(Q),
2736 detail::workaround_cast<T,
decltype(R)>(R),detail::workaround_cast<T,
decltype(S)>(S),detail::workaround_cast<T,
decltype(U)>(U),
2737 detail::workaround_cast<T,
decltype(V)>(V),detail::workaround_cast<T,
decltype(W)>(W),detail::workaround_cast<T,
decltype(X)>(X),
2738 detail::workaround_cast<T,
decltype(Y)>(Y),detail::workaround_cast<T,
decltype(Z)>(Z),detail::workaround_cast<T,
decltype(aa)>(aa),
2739 detail::workaround_cast<T,
decltype(ab)>(ab),detail::workaround_cast<T,
decltype(ac)>(ac),detail::workaround_cast<T,
decltype(ad)>(ad),
2740 detail::workaround_cast<T,
decltype(ae)>(ae),detail::workaround_cast<T,
decltype(af)>(af),detail::workaround_cast<T,
decltype(ag)>(ag),
2741 detail::workaround_cast<T,
decltype(ah)>(ah),detail::workaround_cast<T,
decltype(aj)>(aj),detail::workaround_cast<T,
decltype(ak)>(ak),
2742 detail::workaround_cast<T,
decltype(al)>(al),detail::workaround_cast<T,
decltype(am)>(am),detail::workaround_cast<T,
decltype(an)>(an),
2743 detail::workaround_cast<T,
decltype(ap)>(ap),detail::workaround_cast<T,
decltype(aq)>(aq),detail::workaround_cast<T,
decltype(ar)>(ar),
2744 detail::workaround_cast<T,
decltype(as)>(as),detail::workaround_cast<T,
decltype(at)>(at),detail::workaround_cast<T,
decltype(au)>(au),
2745 detail::workaround_cast<T,
decltype(av)>(av),detail::workaround_cast<T,
decltype(aw)>(aw),detail::workaround_cast<T,
decltype(ax)>(ax),
2746 detail::workaround_cast<T,
decltype(ay)>(ay),detail::workaround_cast<T,
decltype(az)>(az),detail::workaround_cast<T,
decltype(aA)>(aA),
2747 detail::workaround_cast<T,
decltype(aB)>(aB),detail::workaround_cast<T,
decltype(aC)>(aC),detail::workaround_cast<T,
decltype(aD)>(aD),
2748 detail::workaround_cast<T,
decltype(aE)>(aE),detail::workaround_cast<T,
decltype(aF)>(aF),detail::workaround_cast<T,
decltype(aG)>(aG),
2749 detail::workaround_cast<T,
decltype(aH)>(aH),detail::workaround_cast<T,
decltype(aJ)>(aJ),detail::workaround_cast<T,
decltype(aK)>(aK),
2750 detail::workaround_cast<T,
decltype(aL)>(aL),detail::workaround_cast<T,
decltype(aM)>(aM),detail::workaround_cast<T,
decltype(aN)>(aN),
2751 detail::workaround_cast<T,
decltype(aP)>(aP),detail::workaround_cast<T,
decltype(aQ)>(aQ),detail::workaround_cast<T,
decltype(aR)>(aR),
2752 detail::workaround_cast<T,
decltype(aS)>(aS),detail::workaround_cast<T,
decltype(aU)>(aU)
2757constexpr auto tie_as_tuple(T& val, size_t_<90>)
noexcept {
2759 a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,S,U,V,W,X,Y,Z,
2760 aa,ab,ac,ad,ae,af,ag,ah,aj,ak,al,am,an,ap,aq,ar,as,at,au,av,aw,ax,ay,az,aA,aB,aC,aD,aE,aF,aG,aH,aJ,aK,aL,aM,aN,aP,aQ,aR,aS,aU,aV
2761 ] =
const_cast<std::remove_cv_t<T>&
>(val);
2763 return ::boost::pfr::detail::make_tuple_of_references(
2764 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
2765 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
2766 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
2767 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
2768 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
2769 detail::workaround_cast<T,
decltype(r)>(r),detail::workaround_cast<T,
decltype(s)>(s),detail::workaround_cast<T,
decltype(t)>(t),
2770 detail::workaround_cast<T,
decltype(u)>(u),detail::workaround_cast<T,
decltype(v)>(v),detail::workaround_cast<T,
decltype(w)>(w),
2771 detail::workaround_cast<T,
decltype(x)>(x),detail::workaround_cast<T,
decltype(y)>(y),detail::workaround_cast<T,
decltype(z)>(z),
2772 detail::workaround_cast<T,
decltype(A)>(A),detail::workaround_cast<T,
decltype(B)>(B),detail::workaround_cast<T,
decltype(C)>(C),
2773 detail::workaround_cast<T,
decltype(D)>(D),detail::workaround_cast<T,
decltype(E)>(E),detail::workaround_cast<T,
decltype(F)>(F),
2774 detail::workaround_cast<T,
decltype(G)>(G),detail::workaround_cast<T,
decltype(H)>(H),detail::workaround_cast<T,
decltype(J)>(J),
2775 detail::workaround_cast<T,
decltype(K)>(K),detail::workaround_cast<T,
decltype(L)>(L),detail::workaround_cast<T,
decltype(M)>(M),
2776 detail::workaround_cast<T,
decltype(N)>(N),detail::workaround_cast<T,
decltype(P)>(P),detail::workaround_cast<T,
decltype(Q)>(Q),
2777 detail::workaround_cast<T,
decltype(R)>(R),detail::workaround_cast<T,
decltype(S)>(S),detail::workaround_cast<T,
decltype(U)>(U),
2778 detail::workaround_cast<T,
decltype(V)>(V),detail::workaround_cast<T,
decltype(W)>(W),detail::workaround_cast<T,
decltype(X)>(X),
2779 detail::workaround_cast<T,
decltype(Y)>(Y),detail::workaround_cast<T,
decltype(Z)>(Z),detail::workaround_cast<T,
decltype(aa)>(aa),
2780 detail::workaround_cast<T,
decltype(ab)>(ab),detail::workaround_cast<T,
decltype(ac)>(ac),detail::workaround_cast<T,
decltype(ad)>(ad),
2781 detail::workaround_cast<T,
decltype(ae)>(ae),detail::workaround_cast<T,
decltype(af)>(af),detail::workaround_cast<T,
decltype(ag)>(ag),
2782 detail::workaround_cast<T,
decltype(ah)>(ah),detail::workaround_cast<T,
decltype(aj)>(aj),detail::workaround_cast<T,
decltype(ak)>(ak),
2783 detail::workaround_cast<T,
decltype(al)>(al),detail::workaround_cast<T,
decltype(am)>(am),detail::workaround_cast<T,
decltype(an)>(an),
2784 detail::workaround_cast<T,
decltype(ap)>(ap),detail::workaround_cast<T,
decltype(aq)>(aq),detail::workaround_cast<T,
decltype(ar)>(ar),
2785 detail::workaround_cast<T,
decltype(as)>(as),detail::workaround_cast<T,
decltype(at)>(at),detail::workaround_cast<T,
decltype(au)>(au),
2786 detail::workaround_cast<T,
decltype(av)>(av),detail::workaround_cast<T,
decltype(aw)>(aw),detail::workaround_cast<T,
decltype(ax)>(ax),
2787 detail::workaround_cast<T,
decltype(ay)>(ay),detail::workaround_cast<T,
decltype(az)>(az),detail::workaround_cast<T,
decltype(aA)>(aA),
2788 detail::workaround_cast<T,
decltype(aB)>(aB),detail::workaround_cast<T,
decltype(aC)>(aC),detail::workaround_cast<T,
decltype(aD)>(aD),
2789 detail::workaround_cast<T,
decltype(aE)>(aE),detail::workaround_cast<T,
decltype(aF)>(aF),detail::workaround_cast<T,
decltype(aG)>(aG),
2790 detail::workaround_cast<T,
decltype(aH)>(aH),detail::workaround_cast<T,
decltype(aJ)>(aJ),detail::workaround_cast<T,
decltype(aK)>(aK),
2791 detail::workaround_cast<T,
decltype(aL)>(aL),detail::workaround_cast<T,
decltype(aM)>(aM),detail::workaround_cast<T,
decltype(aN)>(aN),
2792 detail::workaround_cast<T,
decltype(aP)>(aP),detail::workaround_cast<T,
decltype(aQ)>(aQ),detail::workaround_cast<T,
decltype(aR)>(aR),
2793 detail::workaround_cast<T,
decltype(aS)>(aS),detail::workaround_cast<T,
decltype(aU)>(aU),detail::workaround_cast<T,
decltype(aV)>(aV)
2798constexpr auto tie_as_tuple(T& val, size_t_<91>)
noexcept {
2800 a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,S,U,V,W,X,Y,Z,
2801 aa,ab,ac,ad,ae,af,ag,ah,aj,ak,al,am,an,ap,aq,ar,as,at,au,av,aw,ax,ay,az,aA,aB,aC,aD,aE,aF,aG,aH,aJ,aK,aL,aM,aN,aP,aQ,aR,aS,aU,aV,aW
2802 ] =
const_cast<std::remove_cv_t<T>&
>(val);
2804 return ::boost::pfr::detail::make_tuple_of_references(
2805 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
2806 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
2807 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
2808 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
2809 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
2810 detail::workaround_cast<T,
decltype(r)>(r),detail::workaround_cast<T,
decltype(s)>(s),detail::workaround_cast<T,
decltype(t)>(t),
2811 detail::workaround_cast<T,
decltype(u)>(u),detail::workaround_cast<T,
decltype(v)>(v),detail::workaround_cast<T,
decltype(w)>(w),
2812 detail::workaround_cast<T,
decltype(x)>(x),detail::workaround_cast<T,
decltype(y)>(y),detail::workaround_cast<T,
decltype(z)>(z),
2813 detail::workaround_cast<T,
decltype(A)>(A),detail::workaround_cast<T,
decltype(B)>(B),detail::workaround_cast<T,
decltype(C)>(C),
2814 detail::workaround_cast<T,
decltype(D)>(D),detail::workaround_cast<T,
decltype(E)>(E),detail::workaround_cast<T,
decltype(F)>(F),
2815 detail::workaround_cast<T,
decltype(G)>(G),detail::workaround_cast<T,
decltype(H)>(H),detail::workaround_cast<T,
decltype(J)>(J),
2816 detail::workaround_cast<T,
decltype(K)>(K),detail::workaround_cast<T,
decltype(L)>(L),detail::workaround_cast<T,
decltype(M)>(M),
2817 detail::workaround_cast<T,
decltype(N)>(N),detail::workaround_cast<T,
decltype(P)>(P),detail::workaround_cast<T,
decltype(Q)>(Q),
2818 detail::workaround_cast<T,
decltype(R)>(R),detail::workaround_cast<T,
decltype(S)>(S),detail::workaround_cast<T,
decltype(U)>(U),
2819 detail::workaround_cast<T,
decltype(V)>(V),detail::workaround_cast<T,
decltype(W)>(W),detail::workaround_cast<T,
decltype(X)>(X),
2820 detail::workaround_cast<T,
decltype(Y)>(Y),detail::workaround_cast<T,
decltype(Z)>(Z),detail::workaround_cast<T,
decltype(aa)>(aa),
2821 detail::workaround_cast<T,
decltype(ab)>(ab),detail::workaround_cast<T,
decltype(ac)>(ac),detail::workaround_cast<T,
decltype(ad)>(ad),
2822 detail::workaround_cast<T,
decltype(ae)>(ae),detail::workaround_cast<T,
decltype(af)>(af),detail::workaround_cast<T,
decltype(ag)>(ag),
2823 detail::workaround_cast<T,
decltype(ah)>(ah),detail::workaround_cast<T,
decltype(aj)>(aj),detail::workaround_cast<T,
decltype(ak)>(ak),
2824 detail::workaround_cast<T,
decltype(al)>(al),detail::workaround_cast<T,
decltype(am)>(am),detail::workaround_cast<T,
decltype(an)>(an),
2825 detail::workaround_cast<T,
decltype(ap)>(ap),detail::workaround_cast<T,
decltype(aq)>(aq),detail::workaround_cast<T,
decltype(ar)>(ar),
2826 detail::workaround_cast<T,
decltype(as)>(as),detail::workaround_cast<T,
decltype(at)>(at),detail::workaround_cast<T,
decltype(au)>(au),
2827 detail::workaround_cast<T,
decltype(av)>(av),detail::workaround_cast<T,
decltype(aw)>(aw),detail::workaround_cast<T,
decltype(ax)>(ax),
2828 detail::workaround_cast<T,
decltype(ay)>(ay),detail::workaround_cast<T,
decltype(az)>(az),detail::workaround_cast<T,
decltype(aA)>(aA),
2829 detail::workaround_cast<T,
decltype(aB)>(aB),detail::workaround_cast<T,
decltype(aC)>(aC),detail::workaround_cast<T,
decltype(aD)>(aD),
2830 detail::workaround_cast<T,
decltype(aE)>(aE),detail::workaround_cast<T,
decltype(aF)>(aF),detail::workaround_cast<T,
decltype(aG)>(aG),
2831 detail::workaround_cast<T,
decltype(aH)>(aH),detail::workaround_cast<T,
decltype(aJ)>(aJ),detail::workaround_cast<T,
decltype(aK)>(aK),
2832 detail::workaround_cast<T,
decltype(aL)>(aL),detail::workaround_cast<T,
decltype(aM)>(aM),detail::workaround_cast<T,
decltype(aN)>(aN),
2833 detail::workaround_cast<T,
decltype(aP)>(aP),detail::workaround_cast<T,
decltype(aQ)>(aQ),detail::workaround_cast<T,
decltype(aR)>(aR),
2834 detail::workaround_cast<T,
decltype(aS)>(aS),detail::workaround_cast<T,
decltype(aU)>(aU),detail::workaround_cast<T,
decltype(aV)>(aV),
2835 detail::workaround_cast<T,
decltype(aW)>(aW)
2840constexpr auto tie_as_tuple(T& val, size_t_<92>)
noexcept {
2842 a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,S,U,V,W,X,Y,Z,
2843 aa,ab,ac,ad,ae,af,ag,ah,aj,ak,al,am,an,ap,aq,ar,as,at,au,av,aw,ax,ay,az,aA,aB,aC,aD,aE,aF,aG,aH,aJ,aK,aL,aM,aN,aP,aQ,aR,aS,aU,aV,aW,aX
2844 ] =
const_cast<std::remove_cv_t<T>&
>(val);
2846 return ::boost::pfr::detail::make_tuple_of_references(
2847 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
2848 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
2849 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
2850 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
2851 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
2852 detail::workaround_cast<T,
decltype(r)>(r),detail::workaround_cast<T,
decltype(s)>(s),detail::workaround_cast<T,
decltype(t)>(t),
2853 detail::workaround_cast<T,
decltype(u)>(u),detail::workaround_cast<T,
decltype(v)>(v),detail::workaround_cast<T,
decltype(w)>(w),
2854 detail::workaround_cast<T,
decltype(x)>(x),detail::workaround_cast<T,
decltype(y)>(y),detail::workaround_cast<T,
decltype(z)>(z),
2855 detail::workaround_cast<T,
decltype(A)>(A),detail::workaround_cast<T,
decltype(B)>(B),detail::workaround_cast<T,
decltype(C)>(C),
2856 detail::workaround_cast<T,
decltype(D)>(D),detail::workaround_cast<T,
decltype(E)>(E),detail::workaround_cast<T,
decltype(F)>(F),
2857 detail::workaround_cast<T,
decltype(G)>(G),detail::workaround_cast<T,
decltype(H)>(H),detail::workaround_cast<T,
decltype(J)>(J),
2858 detail::workaround_cast<T,
decltype(K)>(K),detail::workaround_cast<T,
decltype(L)>(L),detail::workaround_cast<T,
decltype(M)>(M),
2859 detail::workaround_cast<T,
decltype(N)>(N),detail::workaround_cast<T,
decltype(P)>(P),detail::workaround_cast<T,
decltype(Q)>(Q),
2860 detail::workaround_cast<T,
decltype(R)>(R),detail::workaround_cast<T,
decltype(S)>(S),detail::workaround_cast<T,
decltype(U)>(U),
2861 detail::workaround_cast<T,
decltype(V)>(V),detail::workaround_cast<T,
decltype(W)>(W),detail::workaround_cast<T,
decltype(X)>(X),
2862 detail::workaround_cast<T,
decltype(Y)>(Y),detail::workaround_cast<T,
decltype(Z)>(Z),detail::workaround_cast<T,
decltype(aa)>(aa),
2863 detail::workaround_cast<T,
decltype(ab)>(ab),detail::workaround_cast<T,
decltype(ac)>(ac),detail::workaround_cast<T,
decltype(ad)>(ad),
2864 detail::workaround_cast<T,
decltype(ae)>(ae),detail::workaround_cast<T,
decltype(af)>(af),detail::workaround_cast<T,
decltype(ag)>(ag),
2865 detail::workaround_cast<T,
decltype(ah)>(ah),detail::workaround_cast<T,
decltype(aj)>(aj),detail::workaround_cast<T,
decltype(ak)>(ak),
2866 detail::workaround_cast<T,
decltype(al)>(al),detail::workaround_cast<T,
decltype(am)>(am),detail::workaround_cast<T,
decltype(an)>(an),
2867 detail::workaround_cast<T,
decltype(ap)>(ap),detail::workaround_cast<T,
decltype(aq)>(aq),detail::workaround_cast<T,
decltype(ar)>(ar),
2868 detail::workaround_cast<T,
decltype(as)>(as),detail::workaround_cast<T,
decltype(at)>(at),detail::workaround_cast<T,
decltype(au)>(au),
2869 detail::workaround_cast<T,
decltype(av)>(av),detail::workaround_cast<T,
decltype(aw)>(aw),detail::workaround_cast<T,
decltype(ax)>(ax),
2870 detail::workaround_cast<T,
decltype(ay)>(ay),detail::workaround_cast<T,
decltype(az)>(az),detail::workaround_cast<T,
decltype(aA)>(aA),
2871 detail::workaround_cast<T,
decltype(aB)>(aB),detail::workaround_cast<T,
decltype(aC)>(aC),detail::workaround_cast<T,
decltype(aD)>(aD),
2872 detail::workaround_cast<T,
decltype(aE)>(aE),detail::workaround_cast<T,
decltype(aF)>(aF),detail::workaround_cast<T,
decltype(aG)>(aG),
2873 detail::workaround_cast<T,
decltype(aH)>(aH),detail::workaround_cast<T,
decltype(aJ)>(aJ),detail::workaround_cast<T,
decltype(aK)>(aK),
2874 detail::workaround_cast<T,
decltype(aL)>(aL),detail::workaround_cast<T,
decltype(aM)>(aM),detail::workaround_cast<T,
decltype(aN)>(aN),
2875 detail::workaround_cast<T,
decltype(aP)>(aP),detail::workaround_cast<T,
decltype(aQ)>(aQ),detail::workaround_cast<T,
decltype(aR)>(aR),
2876 detail::workaround_cast<T,
decltype(aS)>(aS),detail::workaround_cast<T,
decltype(aU)>(aU),detail::workaround_cast<T,
decltype(aV)>(aV),
2877 detail::workaround_cast<T,
decltype(aW)>(aW),detail::workaround_cast<T,
decltype(aX)>(aX)
2882constexpr auto tie_as_tuple(T& val, size_t_<93>)
noexcept {
2884 a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,S,U,V,W,X,Y,Z,
2885 aa,ab,ac,ad,ae,af,ag,ah,aj,ak,al,am,an,ap,aq,ar,as,at,au,av,aw,ax,ay,az,aA,aB,aC,aD,aE,aF,aG,aH,aJ,aK,aL,aM,aN,aP,aQ,aR,aS,aU,aV,aW,aX,aY
2886 ] =
const_cast<std::remove_cv_t<T>&
>(val);
2888 return ::boost::pfr::detail::make_tuple_of_references(
2889 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
2890 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
2891 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
2892 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
2893 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
2894 detail::workaround_cast<T,
decltype(r)>(r),detail::workaround_cast<T,
decltype(s)>(s),detail::workaround_cast<T,
decltype(t)>(t),
2895 detail::workaround_cast<T,
decltype(u)>(u),detail::workaround_cast<T,
decltype(v)>(v),detail::workaround_cast<T,
decltype(w)>(w),
2896 detail::workaround_cast<T,
decltype(x)>(x),detail::workaround_cast<T,
decltype(y)>(y),detail::workaround_cast<T,
decltype(z)>(z),
2897 detail::workaround_cast<T,
decltype(A)>(A),detail::workaround_cast<T,
decltype(B)>(B),detail::workaround_cast<T,
decltype(C)>(C),
2898 detail::workaround_cast<T,
decltype(D)>(D),detail::workaround_cast<T,
decltype(E)>(E),detail::workaround_cast<T,
decltype(F)>(F),
2899 detail::workaround_cast<T,
decltype(G)>(G),detail::workaround_cast<T,
decltype(H)>(H),detail::workaround_cast<T,
decltype(J)>(J),
2900 detail::workaround_cast<T,
decltype(K)>(K),detail::workaround_cast<T,
decltype(L)>(L),detail::workaround_cast<T,
decltype(M)>(M),
2901 detail::workaround_cast<T,
decltype(N)>(N),detail::workaround_cast<T,
decltype(P)>(P),detail::workaround_cast<T,
decltype(Q)>(Q),
2902 detail::workaround_cast<T,
decltype(R)>(R),detail::workaround_cast<T,
decltype(S)>(S),detail::workaround_cast<T,
decltype(U)>(U),
2903 detail::workaround_cast<T,
decltype(V)>(V),detail::workaround_cast<T,
decltype(W)>(W),detail::workaround_cast<T,
decltype(X)>(X),
2904 detail::workaround_cast<T,
decltype(Y)>(Y),detail::workaround_cast<T,
decltype(Z)>(Z),detail::workaround_cast<T,
decltype(aa)>(aa),
2905 detail::workaround_cast<T,
decltype(ab)>(ab),detail::workaround_cast<T,
decltype(ac)>(ac),detail::workaround_cast<T,
decltype(ad)>(ad),
2906 detail::workaround_cast<T,
decltype(ae)>(ae),detail::workaround_cast<T,
decltype(af)>(af),detail::workaround_cast<T,
decltype(ag)>(ag),
2907 detail::workaround_cast<T,
decltype(ah)>(ah),detail::workaround_cast<T,
decltype(aj)>(aj),detail::workaround_cast<T,
decltype(ak)>(ak),
2908 detail::workaround_cast<T,
decltype(al)>(al),detail::workaround_cast<T,
decltype(am)>(am),detail::workaround_cast<T,
decltype(an)>(an),
2909 detail::workaround_cast<T,
decltype(ap)>(ap),detail::workaround_cast<T,
decltype(aq)>(aq),detail::workaround_cast<T,
decltype(ar)>(ar),
2910 detail::workaround_cast<T,
decltype(as)>(as),detail::workaround_cast<T,
decltype(at)>(at),detail::workaround_cast<T,
decltype(au)>(au),
2911 detail::workaround_cast<T,
decltype(av)>(av),detail::workaround_cast<T,
decltype(aw)>(aw),detail::workaround_cast<T,
decltype(ax)>(ax),
2912 detail::workaround_cast<T,
decltype(ay)>(ay),detail::workaround_cast<T,
decltype(az)>(az),detail::workaround_cast<T,
decltype(aA)>(aA),
2913 detail::workaround_cast<T,
decltype(aB)>(aB),detail::workaround_cast<T,
decltype(aC)>(aC),detail::workaround_cast<T,
decltype(aD)>(aD),
2914 detail::workaround_cast<T,
decltype(aE)>(aE),detail::workaround_cast<T,
decltype(aF)>(aF),detail::workaround_cast<T,
decltype(aG)>(aG),
2915 detail::workaround_cast<T,
decltype(aH)>(aH),detail::workaround_cast<T,
decltype(aJ)>(aJ),detail::workaround_cast<T,
decltype(aK)>(aK),
2916 detail::workaround_cast<T,
decltype(aL)>(aL),detail::workaround_cast<T,
decltype(aM)>(aM),detail::workaround_cast<T,
decltype(aN)>(aN),
2917 detail::workaround_cast<T,
decltype(aP)>(aP),detail::workaround_cast<T,
decltype(aQ)>(aQ),detail::workaround_cast<T,
decltype(aR)>(aR),
2918 detail::workaround_cast<T,
decltype(aS)>(aS),detail::workaround_cast<T,
decltype(aU)>(aU),detail::workaround_cast<T,
decltype(aV)>(aV),
2919 detail::workaround_cast<T,
decltype(aW)>(aW),detail::workaround_cast<T,
decltype(aX)>(aX),detail::workaround_cast<T,
decltype(aY)>(aY)
2924constexpr auto tie_as_tuple(T& val, size_t_<94>)
noexcept {
2926 a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,S,U,V,W,X,Y,Z,
2927 aa,ab,ac,ad,ae,af,ag,ah,aj,ak,al,am,an,ap,aq,ar,as,at,au,av,aw,ax,ay,az,aA,aB,aC,aD,aE,aF,aG,aH,aJ,aK,aL,aM,aN,aP,aQ,aR,aS,aU,aV,aW,aX,aY,aZ
2928 ] =
const_cast<std::remove_cv_t<T>&
>(val);
2930 return ::boost::pfr::detail::make_tuple_of_references(
2931 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
2932 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
2933 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
2934 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
2935 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
2936 detail::workaround_cast<T,
decltype(r)>(r),detail::workaround_cast<T,
decltype(s)>(s),detail::workaround_cast<T,
decltype(t)>(t),
2937 detail::workaround_cast<T,
decltype(u)>(u),detail::workaround_cast<T,
decltype(v)>(v),detail::workaround_cast<T,
decltype(w)>(w),
2938 detail::workaround_cast<T,
decltype(x)>(x),detail::workaround_cast<T,
decltype(y)>(y),detail::workaround_cast<T,
decltype(z)>(z),
2939 detail::workaround_cast<T,
decltype(A)>(A),detail::workaround_cast<T,
decltype(B)>(B),detail::workaround_cast<T,
decltype(C)>(C),
2940 detail::workaround_cast<T,
decltype(D)>(D),detail::workaround_cast<T,
decltype(E)>(E),detail::workaround_cast<T,
decltype(F)>(F),
2941 detail::workaround_cast<T,
decltype(G)>(G),detail::workaround_cast<T,
decltype(H)>(H),detail::workaround_cast<T,
decltype(J)>(J),
2942 detail::workaround_cast<T,
decltype(K)>(K),detail::workaround_cast<T,
decltype(L)>(L),detail::workaround_cast<T,
decltype(M)>(M),
2943 detail::workaround_cast<T,
decltype(N)>(N),detail::workaround_cast<T,
decltype(P)>(P),detail::workaround_cast<T,
decltype(Q)>(Q),
2944 detail::workaround_cast<T,
decltype(R)>(R),detail::workaround_cast<T,
decltype(S)>(S),detail::workaround_cast<T,
decltype(U)>(U),
2945 detail::workaround_cast<T,
decltype(V)>(V),detail::workaround_cast<T,
decltype(W)>(W),detail::workaround_cast<T,
decltype(X)>(X),
2946 detail::workaround_cast<T,
decltype(Y)>(Y),detail::workaround_cast<T,
decltype(Z)>(Z),detail::workaround_cast<T,
decltype(aa)>(aa),
2947 detail::workaround_cast<T,
decltype(ab)>(ab),detail::workaround_cast<T,
decltype(ac)>(ac),detail::workaround_cast<T,
decltype(ad)>(ad),
2948 detail::workaround_cast<T,
decltype(ae)>(ae),detail::workaround_cast<T,
decltype(af)>(af),detail::workaround_cast<T,
decltype(ag)>(ag),
2949 detail::workaround_cast<T,
decltype(ah)>(ah),detail::workaround_cast<T,
decltype(aj)>(aj),detail::workaround_cast<T,
decltype(ak)>(ak),
2950 detail::workaround_cast<T,
decltype(al)>(al),detail::workaround_cast<T,
decltype(am)>(am),detail::workaround_cast<T,
decltype(an)>(an),
2951 detail::workaround_cast<T,
decltype(ap)>(ap),detail::workaround_cast<T,
decltype(aq)>(aq),detail::workaround_cast<T,
decltype(ar)>(ar),
2952 detail::workaround_cast<T,
decltype(as)>(as),detail::workaround_cast<T,
decltype(at)>(at),detail::workaround_cast<T,
decltype(au)>(au),
2953 detail::workaround_cast<T,
decltype(av)>(av),detail::workaround_cast<T,
decltype(aw)>(aw),detail::workaround_cast<T,
decltype(ax)>(ax),
2954 detail::workaround_cast<T,
decltype(ay)>(ay),detail::workaround_cast<T,
decltype(az)>(az),detail::workaround_cast<T,
decltype(aA)>(aA),
2955 detail::workaround_cast<T,
decltype(aB)>(aB),detail::workaround_cast<T,
decltype(aC)>(aC),detail::workaround_cast<T,
decltype(aD)>(aD),
2956 detail::workaround_cast<T,
decltype(aE)>(aE),detail::workaround_cast<T,
decltype(aF)>(aF),detail::workaround_cast<T,
decltype(aG)>(aG),
2957 detail::workaround_cast<T,
decltype(aH)>(aH),detail::workaround_cast<T,
decltype(aJ)>(aJ),detail::workaround_cast<T,
decltype(aK)>(aK),
2958 detail::workaround_cast<T,
decltype(aL)>(aL),detail::workaround_cast<T,
decltype(aM)>(aM),detail::workaround_cast<T,
decltype(aN)>(aN),
2959 detail::workaround_cast<T,
decltype(aP)>(aP),detail::workaround_cast<T,
decltype(aQ)>(aQ),detail::workaround_cast<T,
decltype(aR)>(aR),
2960 detail::workaround_cast<T,
decltype(aS)>(aS),detail::workaround_cast<T,
decltype(aU)>(aU),detail::workaround_cast<T,
decltype(aV)>(aV),
2961 detail::workaround_cast<T,
decltype(aW)>(aW),detail::workaround_cast<T,
decltype(aX)>(aX),detail::workaround_cast<T,
decltype(aY)>(aY),
2962 detail::workaround_cast<T,
decltype(aZ)>(aZ)
2967constexpr auto tie_as_tuple(T& val, size_t_<95>)
noexcept {
2969 a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,S,U,V,W,X,Y,Z,
2970 aa,ab,ac,ad,ae,af,ag,ah,aj,ak,al,am,an,ap,aq,ar,as,at,au,av,aw,ax,ay,az,aA,aB,aC,aD,aE,aF,aG,aH,aJ,aK,aL,aM,aN,aP,aQ,aR,aS,aU,aV,aW,aX,aY,aZ,
2972 ] =
const_cast<std::remove_cv_t<T>&
>(val);
2974 return ::boost::pfr::detail::make_tuple_of_references(
2975 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
2976 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
2977 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
2978 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
2979 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
2980 detail::workaround_cast<T,
decltype(r)>(r),detail::workaround_cast<T,
decltype(s)>(s),detail::workaround_cast<T,
decltype(t)>(t),
2981 detail::workaround_cast<T,
decltype(u)>(u),detail::workaround_cast<T,
decltype(v)>(v),detail::workaround_cast<T,
decltype(w)>(w),
2982 detail::workaround_cast<T,
decltype(x)>(x),detail::workaround_cast<T,
decltype(y)>(y),detail::workaround_cast<T,
decltype(z)>(z),
2983 detail::workaround_cast<T,
decltype(A)>(A),detail::workaround_cast<T,
decltype(B)>(B),detail::workaround_cast<T,
decltype(C)>(C),
2984 detail::workaround_cast<T,
decltype(D)>(D),detail::workaround_cast<T,
decltype(E)>(E),detail::workaround_cast<T,
decltype(F)>(F),
2985 detail::workaround_cast<T,
decltype(G)>(G),detail::workaround_cast<T,
decltype(H)>(H),detail::workaround_cast<T,
decltype(J)>(J),
2986 detail::workaround_cast<T,
decltype(K)>(K),detail::workaround_cast<T,
decltype(L)>(L),detail::workaround_cast<T,
decltype(M)>(M),
2987 detail::workaround_cast<T,
decltype(N)>(N),detail::workaround_cast<T,
decltype(P)>(P),detail::workaround_cast<T,
decltype(Q)>(Q),
2988 detail::workaround_cast<T,
decltype(R)>(R),detail::workaround_cast<T,
decltype(S)>(S),detail::workaround_cast<T,
decltype(U)>(U),
2989 detail::workaround_cast<T,
decltype(V)>(V),detail::workaround_cast<T,
decltype(W)>(W),detail::workaround_cast<T,
decltype(X)>(X),
2990 detail::workaround_cast<T,
decltype(Y)>(Y),detail::workaround_cast<T,
decltype(Z)>(Z),detail::workaround_cast<T,
decltype(aa)>(aa),
2991 detail::workaround_cast<T,
decltype(ab)>(ab),detail::workaround_cast<T,
decltype(ac)>(ac),detail::workaround_cast<T,
decltype(ad)>(ad),
2992 detail::workaround_cast<T,
decltype(ae)>(ae),detail::workaround_cast<T,
decltype(af)>(af),detail::workaround_cast<T,
decltype(ag)>(ag),
2993 detail::workaround_cast<T,
decltype(ah)>(ah),detail::workaround_cast<T,
decltype(aj)>(aj),detail::workaround_cast<T,
decltype(ak)>(ak),
2994 detail::workaround_cast<T,
decltype(al)>(al),detail::workaround_cast<T,
decltype(am)>(am),detail::workaround_cast<T,
decltype(an)>(an),
2995 detail::workaround_cast<T,
decltype(ap)>(ap),detail::workaround_cast<T,
decltype(aq)>(aq),detail::workaround_cast<T,
decltype(ar)>(ar),
2996 detail::workaround_cast<T,
decltype(as)>(as),detail::workaround_cast<T,
decltype(at)>(at),detail::workaround_cast<T,
decltype(au)>(au),
2997 detail::workaround_cast<T,
decltype(av)>(av),detail::workaround_cast<T,
decltype(aw)>(aw),detail::workaround_cast<T,
decltype(ax)>(ax),
2998 detail::workaround_cast<T,
decltype(ay)>(ay),detail::workaround_cast<T,
decltype(az)>(az),detail::workaround_cast<T,
decltype(aA)>(aA),
2999 detail::workaround_cast<T,
decltype(aB)>(aB),detail::workaround_cast<T,
decltype(aC)>(aC),detail::workaround_cast<T,
decltype(aD)>(aD),
3000 detail::workaround_cast<T,
decltype(aE)>(aE),detail::workaround_cast<T,
decltype(aF)>(aF),detail::workaround_cast<T,
decltype(aG)>(aG),
3001 detail::workaround_cast<T,
decltype(aH)>(aH),detail::workaround_cast<T,
decltype(aJ)>(aJ),detail::workaround_cast<T,
decltype(aK)>(aK),
3002 detail::workaround_cast<T,
decltype(aL)>(aL),detail::workaround_cast<T,
decltype(aM)>(aM),detail::workaround_cast<T,
decltype(aN)>(aN),
3003 detail::workaround_cast<T,
decltype(aP)>(aP),detail::workaround_cast<T,
decltype(aQ)>(aQ),detail::workaround_cast<T,
decltype(aR)>(aR),
3004 detail::workaround_cast<T,
decltype(aS)>(aS),detail::workaround_cast<T,
decltype(aU)>(aU),detail::workaround_cast<T,
decltype(aV)>(aV),
3005 detail::workaround_cast<T,
decltype(aW)>(aW),detail::workaround_cast<T,
decltype(aX)>(aX),detail::workaround_cast<T,
decltype(aY)>(aY),
3006 detail::workaround_cast<T,
decltype(aZ)>(aZ),detail::workaround_cast<T,
decltype(ba)>(ba)
3011constexpr auto tie_as_tuple(T& val, size_t_<96>)
noexcept {
3013 a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,S,U,V,W,X,Y,Z,
3014 aa,ab,ac,ad,ae,af,ag,ah,aj,ak,al,am,an,ap,aq,ar,as,at,au,av,aw,ax,ay,az,aA,aB,aC,aD,aE,aF,aG,aH,aJ,aK,aL,aM,aN,aP,aQ,aR,aS,aU,aV,aW,aX,aY,aZ,
3016 ] =
const_cast<std::remove_cv_t<T>&
>(val);
3018 return ::boost::pfr::detail::make_tuple_of_references(
3019 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
3020 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
3021 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
3022 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
3023 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
3024 detail::workaround_cast<T,
decltype(r)>(r),detail::workaround_cast<T,
decltype(s)>(s),detail::workaround_cast<T,
decltype(t)>(t),
3025 detail::workaround_cast<T,
decltype(u)>(u),detail::workaround_cast<T,
decltype(v)>(v),detail::workaround_cast<T,
decltype(w)>(w),
3026 detail::workaround_cast<T,
decltype(x)>(x),detail::workaround_cast<T,
decltype(y)>(y),detail::workaround_cast<T,
decltype(z)>(z),
3027 detail::workaround_cast<T,
decltype(A)>(A),detail::workaround_cast<T,
decltype(B)>(B),detail::workaround_cast<T,
decltype(C)>(C),
3028 detail::workaround_cast<T,
decltype(D)>(D),detail::workaround_cast<T,
decltype(E)>(E),detail::workaround_cast<T,
decltype(F)>(F),
3029 detail::workaround_cast<T,
decltype(G)>(G),detail::workaround_cast<T,
decltype(H)>(H),detail::workaround_cast<T,
decltype(J)>(J),
3030 detail::workaround_cast<T,
decltype(K)>(K),detail::workaround_cast<T,
decltype(L)>(L),detail::workaround_cast<T,
decltype(M)>(M),
3031 detail::workaround_cast<T,
decltype(N)>(N),detail::workaround_cast<T,
decltype(P)>(P),detail::workaround_cast<T,
decltype(Q)>(Q),
3032 detail::workaround_cast<T,
decltype(R)>(R),detail::workaround_cast<T,
decltype(S)>(S),detail::workaround_cast<T,
decltype(U)>(U),
3033 detail::workaround_cast<T,
decltype(V)>(V),detail::workaround_cast<T,
decltype(W)>(W),detail::workaround_cast<T,
decltype(X)>(X),
3034 detail::workaround_cast<T,
decltype(Y)>(Y),detail::workaround_cast<T,
decltype(Z)>(Z),detail::workaround_cast<T,
decltype(aa)>(aa),
3035 detail::workaround_cast<T,
decltype(ab)>(ab),detail::workaround_cast<T,
decltype(ac)>(ac),detail::workaround_cast<T,
decltype(ad)>(ad),
3036 detail::workaround_cast<T,
decltype(ae)>(ae),detail::workaround_cast<T,
decltype(af)>(af),detail::workaround_cast<T,
decltype(ag)>(ag),
3037 detail::workaround_cast<T,
decltype(ah)>(ah),detail::workaround_cast<T,
decltype(aj)>(aj),detail::workaround_cast<T,
decltype(ak)>(ak),
3038 detail::workaround_cast<T,
decltype(al)>(al),detail::workaround_cast<T,
decltype(am)>(am),detail::workaround_cast<T,
decltype(an)>(an),
3039 detail::workaround_cast<T,
decltype(ap)>(ap),detail::workaround_cast<T,
decltype(aq)>(aq),detail::workaround_cast<T,
decltype(ar)>(ar),
3040 detail::workaround_cast<T,
decltype(as)>(as),detail::workaround_cast<T,
decltype(at)>(at),detail::workaround_cast<T,
decltype(au)>(au),
3041 detail::workaround_cast<T,
decltype(av)>(av),detail::workaround_cast<T,
decltype(aw)>(aw),detail::workaround_cast<T,
decltype(ax)>(ax),
3042 detail::workaround_cast<T,
decltype(ay)>(ay),detail::workaround_cast<T,
decltype(az)>(az),detail::workaround_cast<T,
decltype(aA)>(aA),
3043 detail::workaround_cast<T,
decltype(aB)>(aB),detail::workaround_cast<T,
decltype(aC)>(aC),detail::workaround_cast<T,
decltype(aD)>(aD),
3044 detail::workaround_cast<T,
decltype(aE)>(aE),detail::workaround_cast<T,
decltype(aF)>(aF),detail::workaround_cast<T,
decltype(aG)>(aG),
3045 detail::workaround_cast<T,
decltype(aH)>(aH),detail::workaround_cast<T,
decltype(aJ)>(aJ),detail::workaround_cast<T,
decltype(aK)>(aK),
3046 detail::workaround_cast<T,
decltype(aL)>(aL),detail::workaround_cast<T,
decltype(aM)>(aM),detail::workaround_cast<T,
decltype(aN)>(aN),
3047 detail::workaround_cast<T,
decltype(aP)>(aP),detail::workaround_cast<T,
decltype(aQ)>(aQ),detail::workaround_cast<T,
decltype(aR)>(aR),
3048 detail::workaround_cast<T,
decltype(aS)>(aS),detail::workaround_cast<T,
decltype(aU)>(aU),detail::workaround_cast<T,
decltype(aV)>(aV),
3049 detail::workaround_cast<T,
decltype(aW)>(aW),detail::workaround_cast<T,
decltype(aX)>(aX),detail::workaround_cast<T,
decltype(aY)>(aY),
3050 detail::workaround_cast<T,
decltype(aZ)>(aZ),detail::workaround_cast<T,
decltype(ba)>(ba),detail::workaround_cast<T,
decltype(bb)>(bb)
3055constexpr auto tie_as_tuple(T& val, size_t_<97>)
noexcept {
3057 a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,S,U,V,W,X,Y,Z,
3058 aa,ab,ac,ad,ae,af,ag,ah,aj,ak,al,am,an,ap,aq,ar,as,at,au,av,aw,ax,ay,az,aA,aB,aC,aD,aE,aF,aG,aH,aJ,aK,aL,aM,aN,aP,aQ,aR,aS,aU,aV,aW,aX,aY,aZ,
3060 ] =
const_cast<std::remove_cv_t<T>&
>(val);
3062 return ::boost::pfr::detail::make_tuple_of_references(
3063 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
3064 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
3065 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
3066 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
3067 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
3068 detail::workaround_cast<T,
decltype(r)>(r),detail::workaround_cast<T,
decltype(s)>(s),detail::workaround_cast<T,
decltype(t)>(t),
3069 detail::workaround_cast<T,
decltype(u)>(u),detail::workaround_cast<T,
decltype(v)>(v),detail::workaround_cast<T,
decltype(w)>(w),
3070 detail::workaround_cast<T,
decltype(x)>(x),detail::workaround_cast<T,
decltype(y)>(y),detail::workaround_cast<T,
decltype(z)>(z),
3071 detail::workaround_cast<T,
decltype(A)>(A),detail::workaround_cast<T,
decltype(B)>(B),detail::workaround_cast<T,
decltype(C)>(C),
3072 detail::workaround_cast<T,
decltype(D)>(D),detail::workaround_cast<T,
decltype(E)>(E),detail::workaround_cast<T,
decltype(F)>(F),
3073 detail::workaround_cast<T,
decltype(G)>(G),detail::workaround_cast<T,
decltype(H)>(H),detail::workaround_cast<T,
decltype(J)>(J),
3074 detail::workaround_cast<T,
decltype(K)>(K),detail::workaround_cast<T,
decltype(L)>(L),detail::workaround_cast<T,
decltype(M)>(M),
3075 detail::workaround_cast<T,
decltype(N)>(N),detail::workaround_cast<T,
decltype(P)>(P),detail::workaround_cast<T,
decltype(Q)>(Q),
3076 detail::workaround_cast<T,
decltype(R)>(R),detail::workaround_cast<T,
decltype(S)>(S),detail::workaround_cast<T,
decltype(U)>(U),
3077 detail::workaround_cast<T,
decltype(V)>(V),detail::workaround_cast<T,
decltype(W)>(W),detail::workaround_cast<T,
decltype(X)>(X),
3078 detail::workaround_cast<T,
decltype(Y)>(Y),detail::workaround_cast<T,
decltype(Z)>(Z),detail::workaround_cast<T,
decltype(aa)>(aa),
3079 detail::workaround_cast<T,
decltype(ab)>(ab),detail::workaround_cast<T,
decltype(ac)>(ac),detail::workaround_cast<T,
decltype(ad)>(ad),
3080 detail::workaround_cast<T,
decltype(ae)>(ae),detail::workaround_cast<T,
decltype(af)>(af),detail::workaround_cast<T,
decltype(ag)>(ag),
3081 detail::workaround_cast<T,
decltype(ah)>(ah),detail::workaround_cast<T,
decltype(aj)>(aj),detail::workaround_cast<T,
decltype(ak)>(ak),
3082 detail::workaround_cast<T,
decltype(al)>(al),detail::workaround_cast<T,
decltype(am)>(am),detail::workaround_cast<T,
decltype(an)>(an),
3083 detail::workaround_cast<T,
decltype(ap)>(ap),detail::workaround_cast<T,
decltype(aq)>(aq),detail::workaround_cast<T,
decltype(ar)>(ar),
3084 detail::workaround_cast<T,
decltype(as)>(as),detail::workaround_cast<T,
decltype(at)>(at),detail::workaround_cast<T,
decltype(au)>(au),
3085 detail::workaround_cast<T,
decltype(av)>(av),detail::workaround_cast<T,
decltype(aw)>(aw),detail::workaround_cast<T,
decltype(ax)>(ax),
3086 detail::workaround_cast<T,
decltype(ay)>(ay),detail::workaround_cast<T,
decltype(az)>(az),detail::workaround_cast<T,
decltype(aA)>(aA),
3087 detail::workaround_cast<T,
decltype(aB)>(aB),detail::workaround_cast<T,
decltype(aC)>(aC),detail::workaround_cast<T,
decltype(aD)>(aD),
3088 detail::workaround_cast<T,
decltype(aE)>(aE),detail::workaround_cast<T,
decltype(aF)>(aF),detail::workaround_cast<T,
decltype(aG)>(aG),
3089 detail::workaround_cast<T,
decltype(aH)>(aH),detail::workaround_cast<T,
decltype(aJ)>(aJ),detail::workaround_cast<T,
decltype(aK)>(aK),
3090 detail::workaround_cast<T,
decltype(aL)>(aL),detail::workaround_cast<T,
decltype(aM)>(aM),detail::workaround_cast<T,
decltype(aN)>(aN),
3091 detail::workaround_cast<T,
decltype(aP)>(aP),detail::workaround_cast<T,
decltype(aQ)>(aQ),detail::workaround_cast<T,
decltype(aR)>(aR),
3092 detail::workaround_cast<T,
decltype(aS)>(aS),detail::workaround_cast<T,
decltype(aU)>(aU),detail::workaround_cast<T,
decltype(aV)>(aV),
3093 detail::workaround_cast<T,
decltype(aW)>(aW),detail::workaround_cast<T,
decltype(aX)>(aX),detail::workaround_cast<T,
decltype(aY)>(aY),
3094 detail::workaround_cast<T,
decltype(aZ)>(aZ),detail::workaround_cast<T,
decltype(ba)>(ba),detail::workaround_cast<T,
decltype(bb)>(bb),
3095 detail::workaround_cast<T,
decltype(bc)>(bc)
3100constexpr auto tie_as_tuple(T& val, size_t_<98>)
noexcept {
3102 a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,S,U,V,W,X,Y,Z,
3103 aa,ab,ac,ad,ae,af,ag,ah,aj,ak,al,am,an,ap,aq,ar,as,at,au,av,aw,ax,ay,az,aA,aB,aC,aD,aE,aF,aG,aH,aJ,aK,aL,aM,aN,aP,aQ,aR,aS,aU,aV,aW,aX,aY,aZ,
3105 ] =
const_cast<std::remove_cv_t<T>&
>(val);
3107 return ::boost::pfr::detail::make_tuple_of_references(
3108 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
3109 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
3110 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
3111 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
3112 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
3113 detail::workaround_cast<T,
decltype(r)>(r),detail::workaround_cast<T,
decltype(s)>(s),detail::workaround_cast<T,
decltype(t)>(t),
3114 detail::workaround_cast<T,
decltype(u)>(u),detail::workaround_cast<T,
decltype(v)>(v),detail::workaround_cast<T,
decltype(w)>(w),
3115 detail::workaround_cast<T,
decltype(x)>(x),detail::workaround_cast<T,
decltype(y)>(y),detail::workaround_cast<T,
decltype(z)>(z),
3116 detail::workaround_cast<T,
decltype(A)>(A),detail::workaround_cast<T,
decltype(B)>(B),detail::workaround_cast<T,
decltype(C)>(C),
3117 detail::workaround_cast<T,
decltype(D)>(D),detail::workaround_cast<T,
decltype(E)>(E),detail::workaround_cast<T,
decltype(F)>(F),
3118 detail::workaround_cast<T,
decltype(G)>(G),detail::workaround_cast<T,
decltype(H)>(H),detail::workaround_cast<T,
decltype(J)>(J),
3119 detail::workaround_cast<T,
decltype(K)>(K),detail::workaround_cast<T,
decltype(L)>(L),detail::workaround_cast<T,
decltype(M)>(M),
3120 detail::workaround_cast<T,
decltype(N)>(N),detail::workaround_cast<T,
decltype(P)>(P),detail::workaround_cast<T,
decltype(Q)>(Q),
3121 detail::workaround_cast<T,
decltype(R)>(R),detail::workaround_cast<T,
decltype(S)>(S),detail::workaround_cast<T,
decltype(U)>(U),
3122 detail::workaround_cast<T,
decltype(V)>(V),detail::workaround_cast<T,
decltype(W)>(W),detail::workaround_cast<T,
decltype(X)>(X),
3123 detail::workaround_cast<T,
decltype(Y)>(Y),detail::workaround_cast<T,
decltype(Z)>(Z),detail::workaround_cast<T,
decltype(aa)>(aa),
3124 detail::workaround_cast<T,
decltype(ab)>(ab),detail::workaround_cast<T,
decltype(ac)>(ac),detail::workaround_cast<T,
decltype(ad)>(ad),
3125 detail::workaround_cast<T,
decltype(ae)>(ae),detail::workaround_cast<T,
decltype(af)>(af),detail::workaround_cast<T,
decltype(ag)>(ag),
3126 detail::workaround_cast<T,
decltype(ah)>(ah),detail::workaround_cast<T,
decltype(aj)>(aj),detail::workaround_cast<T,
decltype(ak)>(ak),
3127 detail::workaround_cast<T,
decltype(al)>(al),detail::workaround_cast<T,
decltype(am)>(am),detail::workaround_cast<T,
decltype(an)>(an),
3128 detail::workaround_cast<T,
decltype(ap)>(ap),detail::workaround_cast<T,
decltype(aq)>(aq),detail::workaround_cast<T,
decltype(ar)>(ar),
3129 detail::workaround_cast<T,
decltype(as)>(as),detail::workaround_cast<T,
decltype(at)>(at),detail::workaround_cast<T,
decltype(au)>(au),
3130 detail::workaround_cast<T,
decltype(av)>(av),detail::workaround_cast<T,
decltype(aw)>(aw),detail::workaround_cast<T,
decltype(ax)>(ax),
3131 detail::workaround_cast<T,
decltype(ay)>(ay),detail::workaround_cast<T,
decltype(az)>(az),detail::workaround_cast<T,
decltype(aA)>(aA),
3132 detail::workaround_cast<T,
decltype(aB)>(aB),detail::workaround_cast<T,
decltype(aC)>(aC),detail::workaround_cast<T,
decltype(aD)>(aD),
3133 detail::workaround_cast<T,
decltype(aE)>(aE),detail::workaround_cast<T,
decltype(aF)>(aF),detail::workaround_cast<T,
decltype(aG)>(aG),
3134 detail::workaround_cast<T,
decltype(aH)>(aH),detail::workaround_cast<T,
decltype(aJ)>(aJ),detail::workaround_cast<T,
decltype(aK)>(aK),
3135 detail::workaround_cast<T,
decltype(aL)>(aL),detail::workaround_cast<T,
decltype(aM)>(aM),detail::workaround_cast<T,
decltype(aN)>(aN),
3136 detail::workaround_cast<T,
decltype(aP)>(aP),detail::workaround_cast<T,
decltype(aQ)>(aQ),detail::workaround_cast<T,
decltype(aR)>(aR),
3137 detail::workaround_cast<T,
decltype(aS)>(aS),detail::workaround_cast<T,
decltype(aU)>(aU),detail::workaround_cast<T,
decltype(aV)>(aV),
3138 detail::workaround_cast<T,
decltype(aW)>(aW),detail::workaround_cast<T,
decltype(aX)>(aX),detail::workaround_cast<T,
decltype(aY)>(aY),
3139 detail::workaround_cast<T,
decltype(aZ)>(aZ),detail::workaround_cast<T,
decltype(ba)>(ba),detail::workaround_cast<T,
decltype(bb)>(bb),
3140 detail::workaround_cast<T,
decltype(bc)>(bc),detail::workaround_cast<T,
decltype(bd)>(bd)
3145constexpr auto tie_as_tuple(T& val, size_t_<99>)
noexcept {
3147 a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,S,U,V,W,X,Y,Z,
3148 aa,ab,ac,ad,ae,af,ag,ah,aj,ak,al,am,an,ap,aq,ar,as,at,au,av,aw,ax,ay,az,aA,aB,aC,aD,aE,aF,aG,aH,aJ,aK,aL,aM,aN,aP,aQ,aR,aS,aU,aV,aW,aX,aY,aZ,
3150 ] =
const_cast<std::remove_cv_t<T>&
>(val);
3152 return ::boost::pfr::detail::make_tuple_of_references(
3153 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
3154 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
3155 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
3156 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
3157 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
3158 detail::workaround_cast<T,
decltype(r)>(r),detail::workaround_cast<T,
decltype(s)>(s),detail::workaround_cast<T,
decltype(t)>(t),
3159 detail::workaround_cast<T,
decltype(u)>(u),detail::workaround_cast<T,
decltype(v)>(v),detail::workaround_cast<T,
decltype(w)>(w),
3160 detail::workaround_cast<T,
decltype(x)>(x),detail::workaround_cast<T,
decltype(y)>(y),detail::workaround_cast<T,
decltype(z)>(z),
3161 detail::workaround_cast<T,
decltype(A)>(A),detail::workaround_cast<T,
decltype(B)>(B),detail::workaround_cast<T,
decltype(C)>(C),
3162 detail::workaround_cast<T,
decltype(D)>(D),detail::workaround_cast<T,
decltype(E)>(E),detail::workaround_cast<T,
decltype(F)>(F),
3163 detail::workaround_cast<T,
decltype(G)>(G),detail::workaround_cast<T,
decltype(H)>(H),detail::workaround_cast<T,
decltype(J)>(J),
3164 detail::workaround_cast<T,
decltype(K)>(K),detail::workaround_cast<T,
decltype(L)>(L),detail::workaround_cast<T,
decltype(M)>(M),
3165 detail::workaround_cast<T,
decltype(N)>(N),detail::workaround_cast<T,
decltype(P)>(P),detail::workaround_cast<T,
decltype(Q)>(Q),
3166 detail::workaround_cast<T,
decltype(R)>(R),detail::workaround_cast<T,
decltype(S)>(S),detail::workaround_cast<T,
decltype(U)>(U),
3167 detail::workaround_cast<T,
decltype(V)>(V),detail::workaround_cast<T,
decltype(W)>(W),detail::workaround_cast<T,
decltype(X)>(X),
3168 detail::workaround_cast<T,
decltype(Y)>(Y),detail::workaround_cast<T,
decltype(Z)>(Z),detail::workaround_cast<T,
decltype(aa)>(aa),
3169 detail::workaround_cast<T,
decltype(ab)>(ab),detail::workaround_cast<T,
decltype(ac)>(ac),detail::workaround_cast<T,
decltype(ad)>(ad),
3170 detail::workaround_cast<T,
decltype(ae)>(ae),detail::workaround_cast<T,
decltype(af)>(af),detail::workaround_cast<T,
decltype(ag)>(ag),
3171 detail::workaround_cast<T,
decltype(ah)>(ah),detail::workaround_cast<T,
decltype(aj)>(aj),detail::workaround_cast<T,
decltype(ak)>(ak),
3172 detail::workaround_cast<T,
decltype(al)>(al),detail::workaround_cast<T,
decltype(am)>(am),detail::workaround_cast<T,
decltype(an)>(an),
3173 detail::workaround_cast<T,
decltype(ap)>(ap),detail::workaround_cast<T,
decltype(aq)>(aq),detail::workaround_cast<T,
decltype(ar)>(ar),
3174 detail::workaround_cast<T,
decltype(as)>(as),detail::workaround_cast<T,
decltype(at)>(at),detail::workaround_cast<T,
decltype(au)>(au),
3175 detail::workaround_cast<T,
decltype(av)>(av),detail::workaround_cast<T,
decltype(aw)>(aw),detail::workaround_cast<T,
decltype(ax)>(ax),
3176 detail::workaround_cast<T,
decltype(ay)>(ay),detail::workaround_cast<T,
decltype(az)>(az),detail::workaround_cast<T,
decltype(aA)>(aA),
3177 detail::workaround_cast<T,
decltype(aB)>(aB),detail::workaround_cast<T,
decltype(aC)>(aC),detail::workaround_cast<T,
decltype(aD)>(aD),
3178 detail::workaround_cast<T,
decltype(aE)>(aE),detail::workaround_cast<T,
decltype(aF)>(aF),detail::workaround_cast<T,
decltype(aG)>(aG),
3179 detail::workaround_cast<T,
decltype(aH)>(aH),detail::workaround_cast<T,
decltype(aJ)>(aJ),detail::workaround_cast<T,
decltype(aK)>(aK),
3180 detail::workaround_cast<T,
decltype(aL)>(aL),detail::workaround_cast<T,
decltype(aM)>(aM),detail::workaround_cast<T,
decltype(aN)>(aN),
3181 detail::workaround_cast<T,
decltype(aP)>(aP),detail::workaround_cast<T,
decltype(aQ)>(aQ),detail::workaround_cast<T,
decltype(aR)>(aR),
3182 detail::workaround_cast<T,
decltype(aS)>(aS),detail::workaround_cast<T,
decltype(aU)>(aU),detail::workaround_cast<T,
decltype(aV)>(aV),
3183 detail::workaround_cast<T,
decltype(aW)>(aW),detail::workaround_cast<T,
decltype(aX)>(aX),detail::workaround_cast<T,
decltype(aY)>(aY),
3184 detail::workaround_cast<T,
decltype(aZ)>(aZ),detail::workaround_cast<T,
decltype(ba)>(ba),detail::workaround_cast<T,
decltype(bb)>(bb),
3185 detail::workaround_cast<T,
decltype(bc)>(bc),detail::workaround_cast<T,
decltype(bd)>(bd),detail::workaround_cast<T,
decltype(be)>(be)
3190constexpr auto tie_as_tuple(T& val, size_t_<100>)
noexcept {
3192 a,b,c,d,e,f,g,h,j,k,l,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,S,U,V,W,X,Y,Z,
3193 aa,ab,ac,ad,ae,af,ag,ah,aj,ak,al,am,an,ap,aq,ar,as,at,au,av,aw,ax,ay,az,aA,aB,aC,aD,aE,aF,aG,aH,aJ,aK,aL,aM,aN,aP,aQ,aR,aS,aU,aV,aW,aX,aY,aZ,
3195 ] =
const_cast<std::remove_cv_t<T>&
>(val);
3197 return ::boost::pfr::detail::make_tuple_of_references(
3198 detail::workaround_cast<T,
decltype(a)>(a),detail::workaround_cast<T,
decltype(b)>(b),detail::workaround_cast<T,
decltype(c)>(c),
3199 detail::workaround_cast<T,
decltype(d)>(d),detail::workaround_cast<T,
decltype(e)>(e),detail::workaround_cast<T,
decltype(f)>(f),
3200 detail::workaround_cast<T,
decltype(g)>(g),detail::workaround_cast<T,
decltype(h)>(h),detail::workaround_cast<T,
decltype(j)>(j),
3201 detail::workaround_cast<T,
decltype(k)>(k),detail::workaround_cast<T,
decltype(l)>(l),detail::workaround_cast<T,
decltype(m)>(m),
3202 detail::workaround_cast<T,
decltype(n)>(n),detail::workaround_cast<T,
decltype(p)>(p),detail::workaround_cast<T,
decltype(q)>(q),
3203 detail::workaround_cast<T,
decltype(r)>(r),detail::workaround_cast<T,
decltype(s)>(s),detail::workaround_cast<T,
decltype(t)>(t),
3204 detail::workaround_cast<T,
decltype(u)>(u),detail::workaround_cast<T,
decltype(v)>(v),detail::workaround_cast<T,
decltype(w)>(w),
3205 detail::workaround_cast<T,
decltype(x)>(x),detail::workaround_cast<T,
decltype(y)>(y),detail::workaround_cast<T,
decltype(z)>(z),
3206 detail::workaround_cast<T,
decltype(A)>(A),detail::workaround_cast<T,
decltype(B)>(B),detail::workaround_cast<T,
decltype(C)>(C),
3207 detail::workaround_cast<T,
decltype(D)>(D),detail::workaround_cast<T,
decltype(E)>(E),detail::workaround_cast<T,
decltype(F)>(F),
3208 detail::workaround_cast<T,
decltype(G)>(G),detail::workaround_cast<T,
decltype(H)>(H),detail::workaround_cast<T,
decltype(J)>(J),
3209 detail::workaround_cast<T,
decltype(K)>(K),detail::workaround_cast<T,
decltype(L)>(L),detail::workaround_cast<T,
decltype(M)>(M),
3210 detail::workaround_cast<T,
decltype(N)>(N),detail::workaround_cast<T,
decltype(P)>(P),detail::workaround_cast<T,
decltype(Q)>(Q),
3211 detail::workaround_cast<T,
decltype(R)>(R),detail::workaround_cast<T,
decltype(S)>(S),detail::workaround_cast<T,
decltype(U)>(U),
3212 detail::workaround_cast<T,
decltype(V)>(V),detail::workaround_cast<T,
decltype(W)>(W),detail::workaround_cast<T,
decltype(X)>(X),
3213 detail::workaround_cast<T,
decltype(Y)>(Y),detail::workaround_cast<T,
decltype(Z)>(Z),detail::workaround_cast<T,
decltype(aa)>(aa),
3214 detail::workaround_cast<T,
decltype(ab)>(ab),detail::workaround_cast<T,
decltype(ac)>(ac),detail::workaround_cast<T,
decltype(ad)>(ad),
3215 detail::workaround_cast<T,
decltype(ae)>(ae),detail::workaround_cast<T,
decltype(af)>(af),detail::workaround_cast<T,
decltype(ag)>(ag),
3216 detail::workaround_cast<T,
decltype(ah)>(ah),detail::workaround_cast<T,
decltype(aj)>(aj),detail::workaround_cast<T,
decltype(ak)>(ak),
3217 detail::workaround_cast<T,
decltype(al)>(al),detail::workaround_cast<T,
decltype(am)>(am),detail::workaround_cast<T,
decltype(an)>(an),
3218 detail::workaround_cast<T,
decltype(ap)>(ap),detail::workaround_cast<T,
decltype(aq)>(aq),detail::workaround_cast<T,
decltype(ar)>(ar),
3219 detail::workaround_cast<T,
decltype(as)>(as),detail::workaround_cast<T,
decltype(at)>(at),detail::workaround_cast<T,
decltype(au)>(au),
3220 detail::workaround_cast<T,
decltype(av)>(av),detail::workaround_cast<T,
decltype(aw)>(aw),detail::workaround_cast<T,
decltype(ax)>(ax),
3221 detail::workaround_cast<T,
decltype(ay)>(ay),detail::workaround_cast<T,
decltype(az)>(az),detail::workaround_cast<T,
decltype(aA)>(aA),
3222 detail::workaround_cast<T,
decltype(aB)>(aB),detail::workaround_cast<T,
decltype(aC)>(aC),detail::workaround_cast<T,
decltype(aD)>(aD),
3223 detail::workaround_cast<T,
decltype(aE)>(aE),detail::workaround_cast<T,
decltype(aF)>(aF),detail::workaround_cast<T,
decltype(aG)>(aG),
3224 detail::workaround_cast<T,
decltype(aH)>(aH),detail::workaround_cast<T,
decltype(aJ)>(aJ),detail::workaround_cast<T,
decltype(aK)>(aK),
3225 detail::workaround_cast<T,
decltype(aL)>(aL),detail::workaround_cast<T,
decltype(aM)>(aM),detail::workaround_cast<T,
decltype(aN)>(aN),
3226 detail::workaround_cast<T,
decltype(aP)>(aP),detail::workaround_cast<T,
decltype(aQ)>(aQ),detail::workaround_cast<T,
decltype(aR)>(aR),
3227 detail::workaround_cast<T,
decltype(aS)>(aS),detail::workaround_cast<T,
decltype(aU)>(aU),detail::workaround_cast<T,
decltype(aV)>(aV),
3228 detail::workaround_cast<T,
decltype(aW)>(aW),detail::workaround_cast<T,
decltype(aX)>(aX),detail::workaround_cast<T,
decltype(aY)>(aY),
3229 detail::workaround_cast<T,
decltype(aZ)>(aZ),detail::workaround_cast<T,
decltype(ba)>(ba),detail::workaround_cast<T,
decltype(bb)>(bb),
3230 detail::workaround_cast<T,
decltype(bc)>(bc),detail::workaround_cast<T,
decltype(bd)>(bd),detail::workaround_cast<T,
decltype(be)>(be),
3231 detail::workaround_cast<T,
decltype(bf)>(bf)
3236template <
class T, std::
size_t I>
3237constexpr void tie_as_tuple(T& , size_t_<I>)
noexcept {
3238 static_assert(
sizeof(T) &&
false,
3239 "====================> Boost.PFR: Too many fields in a structure T. Regenerate include/boost/pfr/detail/core17_generated.hpp file for appropriate count of fields. For example: `python ./misc/generate_cpp17.py 300 > include/boost/pfr/detail/core17_generated.hpp`");
3251#ifndef BOOST_PFR_DETAIL_FIELDS_COUNT_HPP
3252#define BOOST_PFR_DETAIL_FIELDS_COUNT_HPP
3259#ifndef BOOST_PFR_DETAIL_UNSAFE_DECLVAL_HPP
3260#define BOOST_PFR_DETAIL_UNSAFE_DECLVAL_HPP
3263#include <type_traits>
3265namespace boost {
namespace pfr {
namespace detail {
3269void report_if_you_see_link_error_with_this_function() noexcept;
3276constexpr T unsafe_declval() noexcept {
3277 report_if_you_see_link_error_with_this_function();
3279 typename std::remove_reference<T>::type* ptr =
nullptr;
3281 return static_cast<T
>(*ptr);
3291#include <type_traits>
3295# pragma clang diagnostic push
3296# pragma clang diagnostic ignored "-Wmissing-braces"
3297# pragma clang diagnostic ignored "-Wundefined-inline"
3298# pragma clang diagnostic ignored "-Wundefined-internal"
3299# pragma clang diagnostic ignored "-Wmissing-field-initializers"
3302namespace boost {
namespace pfr {
namespace detail {
3305struct ubiq_lref_constructor {
3307 template <
class Type>
constexpr operator Type&()
const &&
noexcept {
3308 return detail::unsafe_declval<Type&>();
3311 template <
class Type>
constexpr operator Type&()
const &
noexcept {
3312 return detail::unsafe_declval<Type&>();
3317struct ubiq_rref_constructor {
3319 template <
class Type>
operator Type() const && noexcept {
3320 return detail::unsafe_declval<Type>();
3325#ifndef __cpp_lib_is_aggregate
3329template <
class T,
bool IsCopyConstructible>
3330struct ubiq_constructor_except {
3332 template <
class Type>
constexpr operator std::enable_if_t<!std::is_same<T, Type>::value, Type&> ()
const noexcept;
3336struct ubiq_constructor_except<T, false> {
3338 template <
class Type>
constexpr operator std::enable_if_t<!std::is_same<T, Type>::value, Type&&> ()
const noexcept;
3343template <std::
size_t N,
class T>
struct is_single_field_and_aggregate_initializable: std::false_type {};
3344template <
class T>
struct is_single_field_and_aggregate_initializable<1, T>: std::integral_constant<
3345 bool, !std::is_constructible<T, ubiq_constructor_except<T, std::is_copy_constructible<T>::value>>::value
3352template <
class T, std::
size_t N>
3353struct is_aggregate_initializable_n {
3354 template <std::size_t ...I>
3355 static constexpr bool is_not_constructible_n(std::index_sequence<I...>)
noexcept {
3356 return (!std::is_constructible<T,
decltype(ubiq_lref_constructor{I})...>::value && !std::is_constructible<T,
decltype(ubiq_rref_constructor{I})...>::value)
3357 || is_single_field_and_aggregate_initializable<N, T>::value
3361 static constexpr bool value =
3362 std::is_empty<T>::value
3363 || std::is_array<T>::value
3364 || std::is_fundamental<T>::value
3365 || is_not_constructible_n(detail::make_index_sequence<N>{})
3372template <
class Derived,
class U>
3373constexpr bool static_assert_non_inherited() noexcept {
3375 !std::is_base_of<U, Derived>::value,
3376 "====================> Boost.PFR: Boost.PFR: Inherited types are not supported."
3381template <
class Derived>
3382struct ubiq_lref_base_asserting {
3383 template <
class Type>
constexpr operator Type&()
const &&
3384 noexcept(detail::static_assert_non_inherited<Derived, Type>())
3386 return detail::unsafe_declval<Type&>();
3389 template <
class Type>
constexpr operator Type&()
const &
3390 noexcept(detail::static_assert_non_inherited<Derived, Type>())
3392 return detail::unsafe_declval<Type&>();
3396template <
class Derived>
3397struct ubiq_rref_base_asserting {
3398 template <
class Type>
operator Type() const &&
3399 noexcept(detail::static_assert_non_inherited<Derived, Type>())
3401 return detail::unsafe_declval<Type>();
3405template <
class T, std::size_t I0, std::size_t... I,
class =
typename std::enable_if<std::is_copy_constructible<T>::value>::type>
3406constexpr auto assert_first_not_base(std::index_sequence<I0, I...>)
noexcept
3407 ->
typename std::add_pointer<
decltype(T{ ubiq_lref_base_asserting<T>{}, ubiq_lref_constructor{I}... })>::type
3412template <
class T, std::size_t I0, std::size_t... I,
class =
typename std::enable_if<!std::is_copy_constructible<T>::value>::type>
3413constexpr auto assert_first_not_base(std::index_sequence<I0, I...>)
noexcept
3414 ->
typename std::add_pointer<
decltype(T{ ubiq_rref_base_asserting<T>{}, ubiq_rref_constructor{I}... })>::type
3420constexpr void* assert_first_not_base(std::index_sequence<>)
noexcept
3426template <
class T, std::size_t... I,
class =
typename std::enable_if<std::is_copy_constructible<T>::value>::type>
3427constexpr auto enable_if_constructible_helper(std::index_sequence<I...>)
noexcept
3428 ->
typename std::add_pointer<
decltype(T{ ubiq_lref_constructor{I}... })>::type;
3430template <
class T, std::size_t... I,
class =
typename std::enable_if<!std::is_copy_constructible<T>::value>::type>
3431constexpr auto enable_if_constructible_helper(std::index_sequence<I...>)
noexcept
3432 ->
typename std::add_pointer<
decltype(T{ ubiq_rref_constructor{I}... })>::type;
3434template <
class T, std::size_t N,
class =
decltype( enable_if_constructible_helper<T>(detail::make_index_sequence<N>()) ) >
3435using enable_if_constructible_helper_t = std::size_t;
3438template <std::
size_t Begin, std::
size_t Last>
3439using is_one_element_range = std::integral_constant<bool, Begin == Last>;
3441using multi_element_range = std::false_type;
3442using one_element_range = std::true_type;
3445template <
class T, std::
size_t Begin, std::
size_t M
iddle>
3446constexpr std::size_t detect_fields_count(detail::one_element_range,
long)
noexcept {
3449 "====================> Boost.PFR: Internal logic error."
3454template <
class T, std::
size_t Begin, std::
size_t M
iddle>
3455constexpr std::size_t detect_fields_count(detail::multi_element_range,
int)
noexcept;
3457template <
class T, std::
size_t Begin, std::
size_t M
iddle>
3458constexpr auto detect_fields_count(detail::multi_element_range,
long)
noexcept
3459 -> detail::enable_if_constructible_helper_t<T, Middle>
3461 constexpr std::size_t next_v = Middle + (Middle - Begin + 1) / 2;
3462 return detail::detect_fields_count<T, Middle, next_v>(detail::is_one_element_range<Middle, next_v>{}, 1L);
3465template <
class T, std::
size_t Begin, std::
size_t M
iddle>
3466constexpr std::size_t detect_fields_count(detail::multi_element_range,
int)
noexcept {
3467 constexpr std::size_t next_v = Begin + (Middle - Begin) / 2;
3468 return detail::detect_fields_count<T, Begin, next_v>(detail::is_one_element_range<Begin, next_v>{}, 1L);
3472template <
class T, std::
size_t N>
3473constexpr auto detect_fields_count_greedy_remember(
long)
noexcept
3474 -> detail::enable_if_constructible_helper_t<T, N>
3479template <
class T, std::
size_t N>
3480constexpr std::size_t detect_fields_count_greedy_remember(
int)
noexcept {
3484template <
class T, std::
size_t Begin, std::
size_t Last>
3485constexpr std::size_t detect_fields_count_greedy(detail::one_element_range)
noexcept {
3488 "====================> Boost.PFR: Internal logic error."
3490 return detail::detect_fields_count_greedy_remember<T, Begin>(1L);
3493template <
class T, std::
size_t Begin, std::
size_t Last>
3494constexpr std::size_t detect_fields_count_greedy(detail::multi_element_range)
noexcept {
3495 constexpr std::size_t middle = Begin + (Last - Begin) / 2;
3496 constexpr std::size_t fields_count_big_range = detail::detect_fields_count_greedy<T, middle + 1, Last>(
3497 detail::is_one_element_range<middle + 1, Last>{}
3500 constexpr std::size_t small_range_begin = (fields_count_big_range ? 0 : Begin);
3501 constexpr std::size_t small_range_last = (fields_count_big_range ? 0 : middle);
3502 constexpr std::size_t fields_count_small_range = detail::detect_fields_count_greedy<T, small_range_begin, small_range_last>(
3503 detail::is_one_element_range<small_range_begin, small_range_last>{}
3505 return fields_count_big_range ? fields_count_big_range : fields_count_small_range;
3509template <
class T, std::
size_t N>
3510constexpr auto detect_fields_count_dispatch(size_t_<N>,
long,
long)
noexcept
3511 ->
typename std::enable_if<std::is_array<T>::value, std::size_t>::type
3513 return sizeof(T) /
sizeof(
typename std::remove_all_extents<T>::type);
3516template <
class T, std::
size_t N>
3517constexpr auto detect_fields_count_dispatch(size_t_<N>,
long,
int)
noexcept
3518 ->
decltype(
sizeof(T{}))
3520 constexpr std::size_t middle = N / 2 + 1;
3521 return detail::detect_fields_count<T, 0, middle>(detail::multi_element_range{}, 1L);
3524template <
class T, std::
size_t N>
3525constexpr std::size_t detect_fields_count_dispatch(size_t_<N>,
int,
int)
noexcept {
3529 return detail::detect_fields_count_greedy<T, 0, N>(detail::multi_element_range{});
3534constexpr std::size_t fields_count() noexcept {
3535 using type = std::remove_cv_t<T>;
3538 !std::is_reference<type>::value,
3539 "====================> Boost.PFR: Attempt to get fields count on a reference. This is not allowed because that could hide an issue and different library users expect different behavior in that case."
3542#if !BOOST_PFR_HAS_GUARANTEED_COPY_ELISION
3544 std::is_copy_constructible<std::remove_all_extents_t<type>>::value || (
3545 std::is_move_constructible<std::remove_all_extents_t<type>>::value
3546 && std::is_move_assignable<std::remove_all_extents_t<type>>::value
3548 "====================> Boost.PFR: Type and each field in the type must be copy constructible (or move constructible and move assignable)."
3553 !std::is_polymorphic<type>::value,
3554 "====================> Boost.PFR: Type must have no virtual function, because otherwise it is not aggregate initializable."
3557#ifdef __cpp_lib_is_aggregate
3559 std::is_aggregate<type>::value
3560 || std::is_scalar<type>::value,
3561 "====================> Boost.PFR: Type must be aggregate initializable."
3573#if defined(_MSC_VER) && (_MSC_VER <= 1920)
3575 constexpr std::size_t max_fields_count = (
sizeof(type) * CHAR_BIT >= 1024 ? 1024 :
sizeof(type) * CHAR_BIT);
3577 constexpr std::size_t max_fields_count = (
sizeof(type) * CHAR_BIT);
3580 constexpr std::size_t result = detail::detect_fields_count_dispatch<type>(size_t_<max_fields_count>{}, 1L, 1L);
3582 detail::assert_first_not_base<type>(detail::make_index_sequence<result>{});
3584#ifndef __cpp_lib_is_aggregate
3586 is_aggregate_initializable_n<type, result>::value,
3587 "====================> Boost.PFR: Types with user specified constructors (non-aggregate initializable types) are not supported."
3592 result != 0 || std::is_empty<type>::value || std::is_fundamental<type>::value || std::is_reference<type>::value,
3593 "====================> Boost.PFR: If there's no other failed static asserts then something went wrong. Please report this issue to the github along with the structure you're reflecting."
3602# pragma clang diagnostic pop
3611#ifndef BOOST_PFR_DETAIL_FOR_EACH_FIELD_IMPL_HPP
3612#define BOOST_PFR_DETAIL_FOR_EACH_FIELD_IMPL_HPP
3622#ifndef BOOST_PFR_DETAIL_RVALUE_T_HPP
3623#define BOOST_PFR_DETAIL_RVALUE_T_HPP
3625#include <type_traits>
3636namespace boost {
namespace pfr {
namespace detail {
3640#ifdef BOOST_PFR_DETAIL_STRICT_RVALUE_TESTING
3641 ,
class = std::enable_if_t<std::is_rvalue_reference<T&&>::value>
3644using rvalue_t = T&&;
3652namespace boost {
namespace pfr {
namespace detail {
3654template <std::
size_t Index>
3655using size_t_ = std::integral_constant<std::size_t, Index >;
3657template <class T, class F, class I, class = decltype(std::declval<F>()(std::declval<T>(), I{}))>
3658constexpr void for_each_field_impl_apply(T&& v, F&& f, I i,
long) {
3659 std::forward<F>(f)(std::forward<T>(v), i);
3662template <
class T,
class F,
class I>
3663constexpr void for_each_field_impl_apply(T&& v, F&& f, I ,
int) {
3664 std::forward<F>(f)(std::forward<T>(v));
3667#if !defined(__cpp_fold_expressions) || __cpp_fold_expressions < 201603
3668template <
class T,
class F, std::size_t... I>
3669constexpr void for_each_field_impl(T& t, F&& f, std::index_sequence<I...>, std::false_type ) {
3670 const int v[] = {0, (
3671 detail::for_each_field_impl_apply(sequence_tuple::get<I>(t), std::forward<F>(f), size_t_<I>{}, 1L),
3678template <
class T,
class F, std::size_t... I>
3679constexpr void for_each_field_impl(T& t, F&& f, std::index_sequence<I...>, std::true_type ) {
3680 const int v[] = {0, (
3681 detail::for_each_field_impl_apply(sequence_tuple::get<I>(std::move(t)), std::forward<F>(f), size_t_<I>{}, 1L),
3687template <
class T,
class F, std::size_t... I>
3688constexpr void for_each_field_impl(T& t, F&& f, std::index_sequence<I...>, std::false_type ) {
3689 (detail::for_each_field_impl_apply(sequence_tuple::get<I>(t), std::forward<F>(f), size_t_<I>{}, 1L), ...);
3692template <
class T,
class F, std::size_t... I>
3693constexpr void for_each_field_impl(T& t, F&& f, std::index_sequence<I...>, std::true_type ) {
3694 (detail::for_each_field_impl_apply(sequence_tuple::get<I>(std::move(t)), std::forward<F>(f), size_t_<I>{}, 1L), ...);
3703namespace boost {
namespace pfr {
namespace detail {
3706struct do_not_define_std_tuple_size_for_me {
3711constexpr bool do_structured_bindings_work() noexcept {
3731 do_structured_bindings_work<do_not_define_std_tuple_size_for_me>(),
3732 "====================> Boost.PFR: Your compiler can not handle C++17 structured bindings. Read the above comments for workarounds."
3737constexpr auto tie_as_tuple(T& val)
noexcept {
3739 !std::is_union<T>::value,
3740 "====================> Boost.PFR: For safety reasons it is forbidden to reflect unions. See `Reflection of unions` section in the docs for more info."
3742 typedef size_t_<boost::pfr::detail::fields_count<T>()> fields_count_tag;
3743 return boost::pfr::detail::tie_as_tuple(val, fields_count_tag{});
3746template <
class T,
class F, std::size_t... I>
3747constexpr void for_each_field_dispatcher(T& t, F&& f, std::index_sequence<I...>) {
3749 !std::is_union<T>::value,
3750 "====================> Boost.PFR: For safety reasons it is forbidden to reflect unions. See `Reflection of unions` section in the docs for more info."
3753 detail::tie_as_tuple(t)
3760#elif BOOST_PFR_USE_LOOPHOLE
3781#ifndef BOOST_PFR_DETAIL_CORE14_LOOPHOLE_HPP
3782#define BOOST_PFR_DETAIL_CORE14_LOOPHOLE_HPP
3785#include <type_traits>
3788#include <boost/pfr/detail/cast_to_layout_compatible.hpp>
3795#ifndef BOOST_PFR_DETAIL_OFFSET_BASED_GETTER_HPP
3796#define BOOST_PFR_DETAIL_OFFSET_BASED_GETTER_HPP
3799#include <type_traits>
3804namespace boost {
namespace pfr {
namespace detail {
3809template<std::
size_t s, std::
size_t a>
3810struct internal_aligned_storage {
3811 alignas(a)
char storage_[s];
3820template <
typename T>
3821struct tuple_of_aligned_storage;
3823template <
typename... Ts>
3824struct tuple_of_aligned_storage<sequence_tuple::tuple<Ts...>> {
3825 using type = sequence_tuple::tuple<internal_aligned_storage<
sizeof(Ts),
3826#
if defined(__GNUC__) && __GNUC__ < 8 && !defined(__x86_64__) && !defined(__CYGWIN__)
3829 (
alignof(Ts) > 4 ? 4 :
alignof(Ts))
3838template <
typename T>
3839using tuple_of_aligned_storage_t =
typename tuple_of_aligned_storage<T>::type;
3850template <
typename U,
typename S>
3851class offset_based_getter {
3852 using this_t = offset_based_getter<U, S>;
3854 static_assert(
sizeof(U) ==
sizeof(S),
"====================> Boost.PFR: Member sequence does not indicate correct size for struct type! Maybe the user-provided type is not a SimpleAggregate?");
3855 static_assert(
alignof(U) ==
alignof(S),
"====================> Boost.PFR: Member sequence does not indicate correct alignment for struct type!");
3857 static_assert(!std::is_const<U>::value,
"====================> Boost.PFR: const should be stripped from user-defined type when using offset_based_getter or overload resolution will be ambiguous later, this indicates an error within pfr");
3858 static_assert(!std::is_reference<U>::value,
"====================> Boost.PFR: reference should be stripped from user-defined type when using offset_based_getter or overload resolution will be ambiguous later, this indicates an error within pfr");
3859 static_assert(!std::is_volatile<U>::value,
"====================> Boost.PFR: volatile should be stripped from user-defined type when using offset_based_getter or overload resolution will be ambiguous later. this indicates an error within pfr");
3862 template <std::
size_t idx>
3863 using index_t =
typename sequence_tuple::tuple_element<idx, S>::type;
3868 template <std::
size_t idx>
3869 static constexpr std::ptrdiff_t offset() noexcept {
3870 constexpr tuple_of_aligned_storage_t<S> layout{};
3871 return &sequence_tuple::get<idx>(layout).storage_[0] - &sequence_tuple::get<0>(layout).storage_[0];
3875 template <std::
size_t idx>
3876 static index_t<idx> * get_pointer(U * u)
noexcept {
3877 return reinterpret_cast<index_t<idx> *
>(
reinterpret_cast<char *
>(u) + this_t::offset<idx>());
3880 template <std::
size_t idx>
3881 static const index_t<idx> * get_pointer(
const U * u)
noexcept {
3882 return reinterpret_cast<const index_t<idx> *
>(
reinterpret_cast<const char *
>(u) + this_t::offset<idx>());
3885 template <std::
size_t idx>
3886 static volatile index_t<idx> * get_pointer(
volatile U * u)
noexcept {
3887 return reinterpret_cast<volatile index_t<idx> *
>(
reinterpret_cast<volatile char *
>(u) + this_t::offset<idx>());
3890 template <std::
size_t idx>
3891 static const volatile index_t<idx> * get_pointer(
const volatile U * u)
noexcept {
3892 return reinterpret_cast<const volatile index_t<idx> *
>(
reinterpret_cast<const volatile char *
>(u) + this_t::offset<idx>());
3896 template <std::
size_t idx>
3897 index_t<idx> & get(U & u, size_t_<idx>)
const noexcept {
3898 return *this_t::get_pointer<idx>(std::addressof(u));
3901 template <std::
size_t idx>
3902 index_t<idx>
const & get(U
const & u, size_t_<idx>)
const noexcept {
3903 return *this_t::get_pointer<idx>(std::addressof(u));
3906 template <std::
size_t idx>
3907 index_t<idx>
volatile & get(U
volatile & u, size_t_<idx>)
const noexcept {
3908 return *this_t::get_pointer<idx>(std::addressof(u));
3911 template <std::
size_t idx>
3912 index_t<idx>
const volatile & get(U
const volatile & u, size_t_<idx>)
const noexcept {
3913 return *this_t::get_pointer<idx>(std::addressof(u));
3917 template <std::
size_t idx>
3918 index_t<idx> && get(rvalue_t<U> u, size_t_<idx>)
const =
delete;
3930#ifndef BOOST_PFR_DETAIL_MAKE_FLAT_TUPLE_OF_REFERENCES_HPP
3931#define BOOST_PFR_DETAIL_MAKE_FLAT_TUPLE_OF_REFERENCES_HPP
3937namespace boost {
namespace pfr {
namespace detail {
3939template <std::
size_t Index>
3940using size_t_ = std::integral_constant<std::size_t, Index >;
3944struct sequence_tuple_getter {
3945 template <std::
size_t idx,
typename TupleOfReferences>
3946 decltype(
auto) get(TupleOfReferences&& t, size_t_<idx>)
const noexcept {
3947 return sequence_tuple::get<idx>(std::forward<TupleOfReferences>(t));
3952template <
class TupleOrUserType,
class Getter, std::
size_t Begin, std::
size_t Size>
3953constexpr auto make_flat_tuple_of_references(TupleOrUserType&,
const Getter&, size_t_<Begin>, size_t_<Size>)
noexcept;
3955template <
class TupleOrUserType,
class Getter, std::
size_t Begin>
3956constexpr sequence_tuple::tuple<> make_flat_tuple_of_references(TupleOrUserType&,
const Getter&, size_t_<Begin>, size_t_<0>)
noexcept;
3958template <
class TupleOrUserType,
class Getter, std::
size_t Begin>
3959constexpr auto make_flat_tuple_of_references(TupleOrUserType&,
const Getter&, size_t_<Begin>, size_t_<1>)
noexcept;
3961template <
class... T>
3962constexpr auto tie_as_tuple_with_references(T&... args)
noexcept {
3963 return sequence_tuple::tuple<T&...>{ args... };
3966template <
class... T>
3967constexpr decltype(
auto) tie_as_tuple_with_references(detail::sequence_tuple::tuple<T...>& t)
noexcept {
3968 return detail::make_flat_tuple_of_references(t, sequence_tuple_getter{}, size_t_<0>{}, size_t_<sequence_tuple::tuple<T...>::size_v>{});
3971template <
class... T>
3972constexpr decltype(
auto) tie_as_tuple_with_references(
const detail::sequence_tuple::tuple<T...>& t)
noexcept {
3973 return detail::make_flat_tuple_of_references(t, sequence_tuple_getter{}, size_t_<0>{}, size_t_<sequence_tuple::tuple<T...>::size_v>{});
3976template <
class Tuple1, std::size_t... I1,
class Tuple2, std::size_t... I2>
3977constexpr auto my_tuple_cat_impl(
const Tuple1& t1, std::index_sequence<I1...>,
const Tuple2& t2, std::index_sequence<I2...>)
noexcept {
3978 return detail::tie_as_tuple_with_references(
3979 sequence_tuple::get<I1>(t1)...,
3980 sequence_tuple::get<I2>(t2)...
3984template <
class Tuple1,
class Tuple2>
3985constexpr auto my_tuple_cat(
const Tuple1& t1,
const Tuple2& t2)
noexcept {
3986 return detail::my_tuple_cat_impl(
3987 t1, detail::make_index_sequence< Tuple1::size_v >{},
3988 t2, detail::make_index_sequence< Tuple2::size_v >{}
3992template <
class TupleOrUserType,
class Getter, std::
size_t Begin, std::
size_t Size>
3993constexpr auto make_flat_tuple_of_references(TupleOrUserType& t,
const Getter& g, size_t_<Begin>, size_t_<Size>)
noexcept {
3994 constexpr std::size_t next_size = Size / 2;
3995 return detail::my_tuple_cat(
3996 detail::make_flat_tuple_of_references(t, g, size_t_<Begin>{}, size_t_<next_size>{}),
3997 detail::make_flat_tuple_of_references(t, g, size_t_<Begin + Size / 2>{}, size_t_<Size - next_size>{})
4001template <
class TupleOrUserType,
class Getter, std::
size_t Begin>
4002constexpr sequence_tuple::tuple<> make_flat_tuple_of_references(TupleOrUserType&,
const Getter&, size_t_<Begin>, size_t_<0>)
noexcept {
4006template <
class TupleOrUserType,
class Getter, std::
size_t Begin>
4007constexpr auto make_flat_tuple_of_references(TupleOrUserType& t,
const Getter& g, size_t_<Begin>, size_t_<1>)
noexcept {
4008 return detail::tie_as_tuple_with_references(
4009 g.get(t, size_t_<Begin>{})
4019# pragma clang diagnostic push
4020# pragma clang diagnostic ignored "-Wmissing-braces"
4021# pragma clang diagnostic ignored "-Wundefined-inline"
4022# pragma clang diagnostic ignored "-Wundefined-internal"
4023# pragma clang diagnostic ignored "-Wmissing-field-initializers"
4024#elif defined(__GNUC__)
4025# pragma GCC diagnostic push
4026# pragma GCC diagnostic ignored "-Wnon-template-friend"
4030namespace boost {
namespace pfr {
namespace detail {
4037template <
class T, std::
size_t N>
4039 friend auto loophole(tag<T,N>);
4043template <
class T,
class U, std::
size_t N,
bool B>
4045 friend auto loophole(tag<T,N>) {
4050 using no_extents_t = std::remove_all_extents_t<U>;
4051 return static_cast< std::conditional_t<std::is_move_constructible<no_extents_t>::value, no_extents_t&&, no_extents_t&
> >(
4052 boost::pfr::detail::unsafe_declval<no_extents_t&>()
4056template <
class T,
class U, std::
size_t N,
bool B>
4058 friend auto loophole(tag<T,N>) {
return std::move(boost::pfr::detail::unsafe_declval< std::remove_all_extents_t<U>& >()); }
4063template <
class T,
class U, std::
size_t N>
4064struct fn_def_lref<T, U, N, true> {};
4066template <
class T,
class U, std::
size_t N>
4067struct fn_def_rref<T, U, N, true> {};
4074template <
class T, std::
size_t N>
4075struct loophole_ubiq_lref {
4076 template<
class U, std::
size_t M>
static std::size_t ins(...);
4077 template<
class U, std::
size_t M, std::
size_t = sizeof(loophole(tag<T,M>{})) >
static char ins(
int);
4079 template<class U, std::size_t = sizeof(fn_def_lref<T, U, N, sizeof(ins<U, N>(0)) ==
sizeof(
char)>)>
4080 constexpr operator U&()
const&&
noexcept;
4083template <
class T, std::
size_t N>
4084struct loophole_ubiq_rref {
4085 template<
class U, std::
size_t M>
static std::size_t ins(...);
4086 template<
class U, std::
size_t M, std::
size_t = sizeof(loophole(tag<T,M>{})) >
static char ins(
int);
4088 template<class U, std::size_t = sizeof(fn_def_rref<T, U, N, sizeof(ins<U, N>(0)) ==
sizeof(
char)>)>
4089 constexpr operator U&&()
const&&
noexcept;
4094template <
class T,
class U>
4095struct loophole_type_list_lref;
4097template <
typename T, std::size_t... I>
4098struct loophole_type_list_lref< T, std::index_sequence<I...> >
4100 : sequence_tuple::tuple< decltype(T{ loophole_ubiq_lref<T, I>{}... }, 0) >
4102 using type = sequence_tuple::tuple<
decltype(loophole(tag<T, I>{}))... >;
4106template <
class T,
class U>
4107struct loophole_type_list_rref;
4109template <
typename T, std::size_t... I>
4110struct loophole_type_list_rref< T, std::index_sequence<I...> >
4112 : sequence_tuple::tuple< decltype(T{ loophole_ubiq_rref<T, I>{}... }, 0) >
4114 using type = sequence_tuple::tuple<
decltype(loophole(tag<T, I>{}))... >;
4119template <
bool IsCopyConstructible ,
class T,
class U>
4120struct loophole_type_list_selector {
4121 using type = loophole_type_list_lref<T, U>;
4124template <
class T,
class U>
4125struct loophole_type_list_selector<false , T, U> {
4126 using type = loophole_type_list_rref<T, U>;
4130auto tie_as_tuple_loophole_impl(T& lvalue)
noexcept {
4131 using type = std::remove_cv_t<std::remove_reference_t<T>>;
4132 using indexes = detail::make_index_sequence<fields_count<type>()>;
4133 using loophole_type_list =
typename detail::loophole_type_list_selector<
4134 std::is_copy_constructible<std::remove_all_extents_t<type>>::value, type, indexes
4136 using tuple_type =
typename loophole_type_list::type;
4138 return boost::pfr::detail::make_flat_tuple_of_references(
4140 offset_based_getter<type, tuple_type>{},
4142 size_t_<tuple_type::size_v>{}
4147auto tie_as_tuple(T& val)
noexcept {
4149 !std::is_union<T>::value,
4150 "====================> Boost.PFR: For safety reasons it is forbidden to reflect unions. See `Reflection of unions` section in the docs for more info."
4152 return boost::pfr::detail::tie_as_tuple_loophole_impl(
4157template <
class T,
class F, std::size_t... I>
4158void for_each_field_dispatcher(T& t, F&& f, std::index_sequence<I...>) {
4160 !std::is_union<T>::value,
4161 "====================> Boost.PFR: For safety reasons it is forbidden to reflect unions. See `Reflection of unions` section in the docs for more info."
4164 boost::pfr::detail::tie_as_tuple_loophole_impl(t)
4172# pragma clang diagnostic pop
4173#elif defined(__GNUC__)
4174# pragma GCC diagnostic pop
4186#ifndef BOOST_PFR_DETAIL_CORE14_CLASSIC_HPP
4187#define BOOST_PFR_DETAIL_CORE14_CLASSIC_HPP
4190#include <type_traits>
4198#ifndef BOOST_PFR_DETAIL_SIZE_ARRAY_HPP
4199#define BOOST_PFR_DETAIL_SIZE_ARRAY_HPP
4204namespace boost {
namespace pfr {
namespace detail {
4207template <std::
size_t N>
4209 typedef std::size_t type;
4210 std::size_t data[N];
4212 static constexpr std::size_t size() noexcept {
return N; }
4214 constexpr std::size_t count_nonzeros() const noexcept {
4215 std::size_t count = 0;
4216 for (std::size_t i = 0; i < size(); ++i) {
4224 constexpr std::size_t count_from_opening_till_matching_parenthis_seq(std::size_t from, std::size_t opening_parenthis, std::size_t closing_parenthis)
const noexcept {
4225 if (data[from] != opening_parenthis) {
4228 std::size_t unclosed_parnthesis = 0;
4229 std::size_t count = 0;
4231 if (data[from] == opening_parenthis) {
4232 ++ unclosed_parnthesis;
4233 }
else if (data[from] == closing_parenthis) {
4234 -- unclosed_parnthesis;
4238 if (unclosed_parnthesis == 0) {
4248struct size_array<0> {
4249 typedef std::size_t type;
4250 std::size_t data[1];
4252 static constexpr std::size_t size() noexcept {
return 0; }
4254 constexpr std::size_t count_nonzeros() const noexcept {
4259template <std::
size_t I, std::
size_t N>
4260constexpr std::size_t get(
const size_array<N>& a)
noexcept {
4261 static_assert(I < N,
"====================> Boost.PFR: Array index out of bounds");
4272# pragma clang diagnostic push
4273# pragma clang diagnostic ignored "-Wmissing-braces"
4274# pragma clang diagnostic ignored "-Wundefined-inline"
4275# pragma clang diagnostic ignored "-Wundefined-internal"
4276# pragma clang diagnostic ignored "-Wmissing-field-initializers"
4279namespace boost {
namespace pfr {
namespace detail {
4283template <
class T>
struct identity {
4288constexpr T construct_helper() noexcept {
4292template <
class T>
constexpr size_array<
sizeof(T) * 3> fields_count_and_type_ids_with_zeros() noexcept;
4293template <class T> constexpr auto flat_array_of_type_ids() noexcept;
4296namespace typeid_conversions {
4301# pragma warning( push )
4303# pragma warning( disable : 4554 )
4306constexpr std::size_t native_types_mask = 31;
4307constexpr std::size_t bits_per_extension = 3;
4308constexpr std::size_t extension_mask = (
4309 static_cast<std::size_t
>((1 << bits_per_extension) - 1)
4310 <<
static_cast<std::size_t
>(
sizeof(std::size_t) * 8 - bits_per_extension)
4312constexpr std::size_t native_ptr_type = (
4313 static_cast<std::size_t
>(1)
4314 <<
static_cast<std::size_t
>(
sizeof(std::size_t) * 8 - bits_per_extension)
4316constexpr std::size_t native_const_ptr_type = (
4317 static_cast<std::size_t
>(2)
4318 <<
static_cast<std::size_t
>(
sizeof(std::size_t) * 8 - bits_per_extension)
4321constexpr std::size_t native_const_volatile_ptr_type = (
4322 static_cast<std::size_t
>(3)
4323 <<
static_cast<std::size_t
>(
sizeof(std::size_t) * 8 - bits_per_extension)
4326constexpr std::size_t native_volatile_ptr_type = (
4327 static_cast<std::size_t
>(4)
4328 <<
static_cast<std::size_t
>(
sizeof(std::size_t) * 8 - bits_per_extension)
4331constexpr std::size_t native_ref_type = (
4332 static_cast<std::size_t
>(5)
4333 <<
static_cast<std::size_t
>(
sizeof(std::size_t) * 8 - bits_per_extension)
4336template <std::
size_t Index, std::
size_t Extension>
4337using if_extension = std::enable_if_t< (Index & extension_mask) == Extension >*;
4340template <std::
size_t Unptr>
4341constexpr std::size_t type_to_id_extension_apply(std::size_t ext)
noexcept {
4342 constexpr std::size_t native_id = (Unptr & native_types_mask);
4343 constexpr std::size_t extensions = (Unptr & ~native_types_mask);
4345 !((extensions >> bits_per_extension) & native_types_mask),
4346 "====================> Boost.PFR: Too many extensions for a single field (something close to `int************************** p;` is in the POD type)."
4349 return (extensions >> bits_per_extension) | native_id | ext;
4352template <std::
size_t Index>
4353using remove_1_ext = size_t_<
4354 ((Index & ~native_types_mask) << bits_per_extension) | (Index & native_types_mask)
4358# pragma warning( pop )
4363template <
class Type>
constexpr std::size_t type_to_id(identity<Type*>)
noexcept;
4364template <
class Type>
constexpr std::size_t type_to_id(identity<const Type*>)
noexcept;
4365template <
class Type>
constexpr std::size_t type_to_id(identity<const volatile Type*>)
noexcept;
4366template <
class Type>
constexpr std::size_t type_to_id(identity<volatile Type*>)
noexcept;
4367template <
class Type>
constexpr std::size_t type_to_id(identity<Type&>)
noexcept;
4368template <
class Type>
constexpr std::size_t type_to_id(identity<Type>, std::enable_if_t<std::is_enum<Type>::value>* =
nullptr) noexcept;
4369template <class Type> constexpr std::
size_t type_to_id(identity<Type>, std::enable_if_t<std::is_empty<Type>::value>* =
nullptr) noexcept;
4370template <class Type> constexpr std::
size_t type_to_id(identity<Type>, std::enable_if_t<std::is_union<Type>::value>* =
nullptr) noexcept;
4371template <class Type> constexpr size_array<sizeof(Type) * 3> type_to_id(identity<Type>, std::enable_if_t<!std::is_enum<Type>::value && !std::is_empty<Type>::value && !std::is_union<Type>::value>* = 0) noexcept;
4373template <std::
size_t Index> constexpr auto id_to_type(size_t_<Index >, if_extension<Index, native_const_ptr_type> =
nullptr) noexcept;
4374template <std::
size_t Index> constexpr auto id_to_type(size_t_<Index >, if_extension<Index, native_ptr_type> =
nullptr) noexcept;
4375template <std::
size_t Index> constexpr auto id_to_type(size_t_<Index >, if_extension<Index, native_const_volatile_ptr_type> =
nullptr) noexcept;
4376template <std::
size_t Index> constexpr auto id_to_type(size_t_<Index >, if_extension<Index, native_volatile_ptr_type> =
nullptr) noexcept;
4377template <std::
size_t Index> constexpr auto id_to_type(size_t_<Index >, if_extension<Index, native_ref_type> =
nullptr) noexcept;
4382#define BOOST_MAGIC_GET_REGISTER_TYPE(Type, Index) \
4383 constexpr std::size_t type_to_id(identity<Type>) noexcept { \
4386 constexpr Type id_to_type( size_t_<Index > ) noexcept { \
4387 return detail::construct_helper<Type>(); \
4394BOOST_MAGIC_GET_REGISTER_TYPE(
unsigned char , 1)
4395BOOST_MAGIC_GET_REGISTER_TYPE(
unsigned short , 2)
4396BOOST_MAGIC_GET_REGISTER_TYPE(
unsigned int , 3)
4397BOOST_MAGIC_GET_REGISTER_TYPE(
unsigned long , 4)
4398BOOST_MAGIC_GET_REGISTER_TYPE(
unsigned long long , 5)
4399BOOST_MAGIC_GET_REGISTER_TYPE(
signed char , 6)
4400BOOST_MAGIC_GET_REGISTER_TYPE(
short , 7)
4401BOOST_MAGIC_GET_REGISTER_TYPE(
int , 8)
4402BOOST_MAGIC_GET_REGISTER_TYPE(
long , 9)
4403BOOST_MAGIC_GET_REGISTER_TYPE(
long long , 10)
4404BOOST_MAGIC_GET_REGISTER_TYPE(
char , 11)
4405BOOST_MAGIC_GET_REGISTER_TYPE(
wchar_t , 12)
4406BOOST_MAGIC_GET_REGISTER_TYPE(
char16_t , 13)
4407BOOST_MAGIC_GET_REGISTER_TYPE(
char32_t , 14)
4408BOOST_MAGIC_GET_REGISTER_TYPE(
float , 15)
4409BOOST_MAGIC_GET_REGISTER_TYPE(
double , 16)
4410BOOST_MAGIC_GET_REGISTER_TYPE(
long double , 17)
4411BOOST_MAGIC_GET_REGISTER_TYPE(
bool , 18)
4412BOOST_MAGIC_GET_REGISTER_TYPE(
void* , 19)
4413BOOST_MAGIC_GET_REGISTER_TYPE(const
void* , 20)
4414BOOST_MAGIC_GET_REGISTER_TYPE(volatile
void* , 21)
4415BOOST_MAGIC_GET_REGISTER_TYPE(const volatile
void* , 22)
4416BOOST_MAGIC_GET_REGISTER_TYPE(std::nullptr_t , 23)
4417constexpr std::
size_t tuple_begin_tag = 24;
4418constexpr std::
size_t tuple_end_tag = 25;
4420#undef BOOST_MAGIC_GET_REGISTER_TYPE
4423template <
class Type>
4424constexpr std::size_t type_to_id(identity<Type*>)
noexcept {
4425 constexpr auto unptr = typeid_conversions::type_to_id(identity<Type>{});
4427 std::is_same<
const std::size_t,
decltype(unptr)>::value,
4428 "====================> Boost.PFR: Pointers to user defined types are not supported."
4430 return typeid_conversions::type_to_id_extension_apply<unptr>(native_ptr_type);
4433template <
class Type>
4434constexpr std::size_t type_to_id(identity<const Type*>)
noexcept {
4435 constexpr auto unptr = typeid_conversions::type_to_id(identity<Type>{});
4437 std::is_same<
const std::size_t,
decltype(unptr)>::value,
4438 "====================> Boost.PFR: Const pointers to user defined types are not supported."
4440 return typeid_conversions::type_to_id_extension_apply<unptr>(native_const_ptr_type);
4443template <
class Type>
4444constexpr std::size_t type_to_id(identity<const volatile Type*>)
noexcept {
4445 constexpr auto unptr = typeid_conversions::type_to_id(identity<Type>{});
4447 std::is_same<
const std::size_t,
decltype(unptr)>::value,
4448 "====================> Boost.PFR: Const volatile pointers to user defined types are not supported."
4450 return typeid_conversions::type_to_id_extension_apply<unptr>(native_const_volatile_ptr_type);
4453template <
class Type>
4454constexpr std::size_t type_to_id(identity<volatile Type*>)
noexcept {
4455 constexpr auto unptr = typeid_conversions::type_to_id(identity<Type>{});
4457 std::is_same<
const std::size_t,
decltype(unptr)>::value,
4458 "====================> Boost.PFR: Volatile pointers to user defined types are not supported."
4460 return typeid_conversions::type_to_id_extension_apply<unptr>(native_volatile_ptr_type);
4463template <
class Type>
4464constexpr std::size_t type_to_id(identity<Type&>)
noexcept {
4465 constexpr auto unptr = typeid_conversions::type_to_id(identity<Type>{});
4467 std::is_same<
const std::size_t,
decltype(unptr)>::value,
4468 "====================> Boost.PFR: References to user defined types are not supported."
4470 return typeid_conversions::type_to_id_extension_apply<unptr>(native_ref_type);
4473template <
class Type>
4474constexpr std::size_t type_to_id(identity<Type>, std::enable_if_t<std::is_enum<Type>::value>*) noexcept {
4475 return typeid_conversions::type_to_id(identity<
typename std::underlying_type<Type>::type >{});
4478template <
class Type>
4479constexpr std::size_t type_to_id(identity<Type>, std::enable_if_t<std::is_empty<Type>::value>*) noexcept {
4480 static_assert(!std::is_empty<Type>::value,
"====================> Boost.PFR: Empty classes/structures as members are not supported.");
4484template <
class Type>
4485constexpr std::size_t type_to_id(identity<Type>, std::enable_if_t<std::is_union<Type>::value>*) noexcept {
4487 !std::is_union<Type>::value,
4488 "====================> Boost.PFR: For safety reasons it is forbidden to reflect unions. See `Reflection of unions` section in the docs for more info."
4493template <
class Type>
4494constexpr size_array<
sizeof(Type) * 3> type_to_id(identity<Type>, std::enable_if_t<!std::is_enum<Type>::value && !std::is_empty<Type>::value && !std::is_union<Type>::value>*) noexcept {
4495 constexpr auto t = detail::flat_array_of_type_ids<Type>();
4496 size_array<
sizeof(Type) * 3> result {{tuple_begin_tag}};
4497 constexpr bool requires_tuplening = (
4498 (t.count_nonzeros() != 1) || (t.count_nonzeros() == t.count_from_opening_till_matching_parenthis_seq(0, tuple_begin_tag, tuple_end_tag))
4501 if (requires_tuplening) {
4502 for (std::size_t i = 0; i < t.size(); ++i)
4503 result.data[i + 1] = t.data[i];
4504 result.data[result.size() - 1] = tuple_end_tag;
4506 for (std::size_t i = 0; i < t.size(); ++i)
4507 result.data[i] = t.data[i];
4514template <std::
size_t Index>
4515constexpr auto id_to_type(size_t_<Index >, if_extension<Index, native_ptr_type>)
noexcept {
4516 typedef decltype( typeid_conversions::id_to_type(remove_1_ext<Index>()) )* res_t;
4517 return detail::construct_helper<res_t>();
4520template <std::
size_t Index>
4521constexpr auto id_to_type(size_t_<Index >, if_extension<Index, native_const_ptr_type>)
noexcept {
4522 typedef const decltype( typeid_conversions::id_to_type(remove_1_ext<Index>()) )* res_t;
4523 return detail::construct_helper<res_t>();
4526template <std::
size_t Index>
4527constexpr auto id_to_type(size_t_<Index >, if_extension<Index, native_const_volatile_ptr_type>)
noexcept {
4528 typedef const volatile decltype( typeid_conversions::id_to_type(remove_1_ext<Index>()) )* res_t;
4529 return detail::construct_helper<res_t>();
4533template <std::
size_t Index>
4534constexpr auto id_to_type(size_t_<Index >, if_extension<Index, native_volatile_ptr_type>)
noexcept {
4535 typedef volatile decltype( typeid_conversions::id_to_type(remove_1_ext<Index>()) )* res_t;
4536 return detail::construct_helper<res_t>();
4540template <std::
size_t Index>
4541constexpr auto id_to_type(size_t_<Index >, if_extension<Index, native_ref_type>)
noexcept {
4542 static_assert(!Index,
"====================> Boost.PFR: References are not supported");
4553 constexpr void assign(
const T& typeids)
const noexcept {
4554 for (std::size_t i = 0; i < T::size(); ++i)
4555 ref_[i] = typeids.data[i];
4558 constexpr void assign(std::size_t val)
const noexcept {
4562 template <
class Type>
4563 constexpr operator Type() const noexcept {
4564 constexpr auto typeids = typeid_conversions::type_to_id(identity<Type>{});
4566 return detail::construct_helper<Type>();
4574 template <
class Type>
4575 constexpr operator Type() const noexcept {
4576 ref_ =
sizeof(Type);
4577 return detail::construct_helper<Type>();
4582template <
class T, std::size_t N, std::size_t... I>
4583constexpr size_array<N> get_type_offsets() noexcept {
4584 typedef size_array<N> array_t;
4586 T tmp{ ubiq_sizes{sizes.data[I]}... };
4589 array_t offsets{{0}};
4590 for (std::size_t i = 1; i < N; ++i)
4591 offsets.data[i] = offsets.data[i - 1] + sizes.data[i - 1];
4597template <
class T, std::size_t N, std::size_t... I>
4598constexpr void* flat_type_to_array_of_type_ids(std::size_t* types, std::index_sequence<I...>)
noexcept
4602 "====================> Boost.PFR: Bit fields are not supported."
4605 constexpr auto offsets = detail::get_type_offsets<T, N, I...>();
4606 T tmp{ ubiq_val{types + get<I>(offsets) * 3}... };
4615constexpr size_array<
sizeof(T) * 3> fields_count_and_type_ids_with_zeros() noexcept {
4616 size_array<
sizeof(T) * 3> types{};
4617 constexpr std::size_t N = detail::fields_count<T>();
4618 detail::flat_type_to_array_of_type_ids<T, N>(types.data, detail::make_index_sequence<N>());
4624constexpr auto flat_array_of_type_ids() noexcept {
4625 constexpr auto types = detail::fields_count_and_type_ids_with_zeros<T>();
4626 constexpr std::size_t count = types.count_nonzeros();
4627 size_array<count> res{};
4629 for (std::size_t i = 0; i <
decltype(types)::size(); ++i) {
4630 if (types.data[i]) {
4631 res.data[j] = types.data[i];
4641template <
class T, std::size_t First, std::size_t... I>
4642constexpr auto as_flat_tuple_impl(std::index_sequence<First, I...>)
noexcept;
4645constexpr sequence_tuple::tuple<> as_flat_tuple_impl(std::index_sequence<>)
noexcept {
4646 return sequence_tuple::tuple<>{};
4649template <std::size_t Increment, std::size_t... I>
4650constexpr auto increment_index_sequence(std::index_sequence<I...>)
noexcept {
4651 return std::index_sequence<I + Increment...>{};
4654template <
class T, std::
size_t V, std::
size_t I, std::
size_t SubtupleLength>
4655constexpr auto prepare_subtuples(size_t_<V>, size_t_<I>, size_t_<SubtupleLength>)
noexcept {
4656 static_assert(SubtupleLength == 0,
"====================> Boost.PFR: Internal error while representing nested field as tuple");
4657 return typeid_conversions::id_to_type(size_t_<V>{});
4660template <
class T, std::
size_t I, std::
size_t SubtupleLength>
4661constexpr auto prepare_subtuples(size_t_<typeid_conversions::tuple_end_tag>, size_t_<I>, size_t_<SubtupleLength>)
noexcept {
4662 static_assert(
sizeof(T) == 0,
"====================> Boost.PFR: Internal error while representing nested field as tuple");
4666template <
class T, std::
size_t I, std::
size_t SubtupleLength>
4667constexpr auto prepare_subtuples(size_t_<typeid_conversions::tuple_begin_tag>, size_t_<I>, size_t_<SubtupleLength>)
noexcept {
4668 static_assert(SubtupleLength > 2,
"====================> Boost.PFR: Internal error while representing nested field as tuple");
4669 constexpr auto seq = detail::make_index_sequence<SubtupleLength - 2>{};
4670 return detail::as_flat_tuple_impl<T>( detail::increment_index_sequence<I + 1>(seq) );
4674template <
class Array>
4675constexpr Array remove_subtuples(Array indexes_plus_1,
const Array& subtuple_lengths)
noexcept {
4676 for (std::size_t i = 0; i < subtuple_lengths.size(); ++i) {
4677 if (subtuple_lengths.data[i]) {
4678 const std::size_t skips_count = subtuple_lengths.data[i];
4679 for (std::size_t j = i + 1; j < skips_count + i; ++j) {
4680 indexes_plus_1.data[j] = 0;
4682 i += skips_count - 1;
4685 return indexes_plus_1;
4688template <std::
size_t N,
class Array>
4689constexpr size_array<N> resize_dropping_zeros_and_decrementing(size_t_<N>,
const Array& a)
noexcept {
4690 size_array<N> result{};
4691 std::size_t result_indx = 0;
4692 for (std::size_t i = 0; i < a.size(); ++i) {
4694 result.data[result_indx] =
static_cast<std::size_t
>(a.data[i] - 1);
4702template <
class T, std::size_t First, std::size_t... I, std::size_t... INew>
4703constexpr auto as_flat_tuple_impl_drop_helpers(std::index_sequence<First, I...>, std::index_sequence<INew...>)
noexcept {
4704 constexpr auto a = detail::flat_array_of_type_ids<T>();
4706 constexpr size_array<
sizeof...(I) + 1> subtuples_length {{
4707 a.count_from_opening_till_matching_parenthis_seq(First, typeid_conversions::tuple_begin_tag, typeid_conversions::tuple_end_tag),
4708 a.count_from_opening_till_matching_parenthis_seq(I, typeid_conversions::tuple_begin_tag, typeid_conversions::tuple_end_tag)...
4711 constexpr size_array<
sizeof...(I) + 1> type_indexes_with_subtuple_internals {{ 1, 1 + I - First...}};
4712 constexpr auto type_indexes_plus_1_and_zeros_as_skips = detail::remove_subtuples(type_indexes_with_subtuple_internals, subtuples_length);
4713 constexpr auto new_size = size_t_<type_indexes_plus_1_and_zeros_as_skips.count_nonzeros()>{};
4714 constexpr auto type_indexes = detail::resize_dropping_zeros_and_decrementing(new_size, type_indexes_plus_1_and_zeros_as_skips);
4716 typedef sequence_tuple::tuple<
4717 decltype(detail::prepare_subtuples<T>(
4718 size_t_< a.data[ First + type_indexes.data[INew] ] >{},
4719 size_t_< First + type_indexes.data[INew] >{},
4720 size_t_< subtuples_length.data[ type_indexes.data[INew] ] >{}
4722 > subtuples_uncleanuped_t;
4724 return subtuples_uncleanuped_t{};
4727template <
class Array>
4728constexpr std::size_t count_skips_in_array(std::size_t begin_index, std::size_t end_index,
const Array& a)
noexcept {
4729 std::size_t skips = 0;
4730 for (std::size_t i = begin_index; i < end_index; ++i) {
4731 if (a.data[i] == typeid_conversions::tuple_begin_tag) {
4732 const std::size_t this_tuple_size = a.count_from_opening_till_matching_parenthis_seq(i, typeid_conversions::tuple_begin_tag, typeid_conversions::tuple_end_tag) - 1;
4733 skips += this_tuple_size;
4734 i += this_tuple_size - 1;
4741template <
class T, std::size_t First, std::size_t... I>
4742constexpr auto as_flat_tuple_impl(std::index_sequence<First, I...>)
noexcept {
4743 constexpr auto a = detail::flat_array_of_type_ids<T>();
4744 constexpr std::size_t count_of_I =
sizeof...(I);
4746 return detail::as_flat_tuple_impl_drop_helpers<T>(
4747 std::index_sequence<First, I...>{},
4748 detail::make_index_sequence< 1 + count_of_I - count_skips_in_array(First, First + count_of_I, a) >{}
4753constexpr auto internal_tuple_with_same_alignment() noexcept {
4754 typedef typename std::remove_cv<T>::type type;
4757 std::is_trivial<type>::value && std::is_standard_layout<type>::value,
4758 "====================> Boost.PFR: Type can not be reflected without Loophole or C++17, because it's not POD"
4760 static_assert(!std::is_reference<type>::value,
"====================> Boost.PFR: Not applyable");
4761 constexpr auto res = detail::as_flat_tuple_impl<type>(
4762 detail::make_index_sequence<
decltype(detail::flat_array_of_type_ids<type>())::size() >()
4769using internal_tuple_with_same_alignment_t =
decltype( detail::internal_tuple_with_same_alignment<T>() );
4773struct ubiq_is_flat_refelectable {
4774 bool& is_flat_refelectable;
4776 template <
class Type>
4777 constexpr operator Type() const noexcept {
4778 is_flat_refelectable = std::is_fundamental<std::remove_pointer_t<Type>>::value;
4783template <
class T, std::size_t... I>
4784constexpr bool is_flat_refelectable(std::index_sequence<I...>)
noexcept {
4785 constexpr std::size_t fields =
sizeof...(I);
4786 bool result[fields] = {
static_cast<bool>(I)...};
4787 const T v{ ubiq_is_flat_refelectable{result[I]}... };
4790 for (std::size_t i = 0; i < fields; ++i) {
4800constexpr bool is_flat_refelectable(std::index_sequence<>)
noexcept {
4805auto tie_as_flat_tuple(T& lvalue)
noexcept {
4807 !std::is_union<T>::value,
4808 "====================> Boost.PFR: For safety reasons it is forbidden to reflect unions. See `Reflection of unions` section in the docs for more info."
4810 using type = std::remove_cv_t<T>;
4811 using tuple_type = internal_tuple_with_same_alignment_t<type>;
4813 offset_based_getter<type, tuple_type> getter;
4814 return boost::pfr::detail::make_flat_tuple_of_references(lvalue, getter, size_t_<0>{}, size_t_<tuple_type::size_v>{});
4818auto tie_as_tuple(T& val)
noexcept {
4820 !std::is_union<T>::value,
4821 "====================> Boost.PFR: For safety reasons it is forbidden to reflect unions. See `Reflection of unions` section in the docs for more info."
4824 boost::pfr::detail::is_flat_refelectable<T>( detail::make_index_sequence<boost::pfr::detail::fields_count<T>()>{} ),
4825 "====================> Boost.PFR: Not possible in C++14 to represent that type without loosing information. Change type definition or enable C++17"
4827 return boost::pfr::detail::tie_as_flat_tuple(val);
4833struct ubiq_constructor_constexpr_copy {
4836 template <
class Type>
4837 constexpr operator Type() const noexcept {
4839 std::is_trivially_destructible<Type>::value,
4840 "====================> Boost.PFR: One of the fields in the type passed to `for_each_field` has non trivial destructor."
4848template <
class T, std::size_t... I>
4849struct is_constexpr_aggregate_initializable {
4850 template<
class T2, std::size_t... I2>
4851 static constexpr void* constexpr_aggregate_initializer() noexcept {
4852 T2 tmp{ ubiq_constructor_constexpr_copy{I2}... };
4857 template <
void* = constexpr_aggregate_initializer<T, I...>() >
4858 static std::true_type test(
long)
noexcept;
4860 static std::false_type test(...) noexcept;
4862 static constexpr
bool value = decltype(test(0)){};
4866template <
class T,
class F, std::size_t I0, std::size_t... I,
class... Fields>
4867void for_each_field_in_depth(T& t, F&& f, std::index_sequence<I0, I...>, identity<Fields>...);
4869template <
class T,
class F,
class... Fields>
4870void for_each_field_in_depth(T& t, F&& f, std::index_sequence<>, identity<Fields>...);
4872template <
class T,
class F,
class IndexSeq,
class... Fields>
4877 template <
class Field>
4878 operator Field()
const {
4879 boost::pfr::detail::for_each_field_in_depth(
4883 identity<Fields>{}...,
4891template <
class T,
class F, std::size_t I0, std::size_t... I,
class... Fields>
4892void for_each_field_in_depth(T& t, F&& f, std::index_sequence<I0, I...>, identity<Fields>...) {
4893 (void)std::add_const_t<std::remove_reference_t<T>>{
4895 next_step<T, F, std::index_sequence<I...>, Fields...>{t, f},
4896 ubiq_constructor_constexpr_copy{I}...
4900template <
class T,
class F,
class... Fields>
4901void for_each_field_in_depth(T& lvalue, F&& f, std::index_sequence<>, identity<Fields>...) {
4902 using tuple_type = sequence_tuple::tuple<Fields...>;
4904 offset_based_getter<std::remove_cv_t<std::remove_reference_t<T>>, tuple_type> getter;
4906 boost::pfr::detail::make_flat_tuple_of_references(lvalue, getter, size_t_<0>{}, size_t_<
sizeof...(Fields)>{})
4910template <
class T,
class F, std::size_t... I>
4911void for_each_field_dispatcher_1(T& t, F&& f, std::index_sequence<I...>, std::true_type ) {
4913 boost::pfr::detail::tie_as_flat_tuple(t)
4918template <
class T,
class F, std::size_t... I>
4919void for_each_field_dispatcher_1(T& t, F&& f, std::index_sequence<I...>, std::false_type ) {
4920 boost::pfr::detail::for_each_field_in_depth(
4923 std::index_sequence<I...>{}
4927template <
class T,
class F, std::size_t... I>
4928void for_each_field_dispatcher(T& t, F&& f, std::index_sequence<I...>) {
4930 !std::is_union<T>::value,
4931 "====================> Boost.PFR: For safety reasons it is forbidden to reflect unions. See `Reflection of unions` section in the docs for more info."
4933 static_assert(is_constexpr_aggregate_initializable<T, I...>::value,
"====================> Boost.PFR: T must be a constexpr initializable type");
4935 constexpr bool is_flat_refelectable_val = detail::is_flat_refelectable<T>( std::index_sequence<I...>{} );
4936 detail::for_each_field_dispatcher_1(
4939 std::index_sequence<I...>{},
4940 std::integral_constant<bool, is_flat_refelectable_val>{}
4948# pragma clang diagnostic pop
4963#ifndef BOOST_PFR_DETAIL_STDTUPLE_HPP
4964#define BOOST_PFR_DETAIL_STDTUPLE_HPP
4971namespace boost {
namespace pfr {
namespace detail {
4973template <
class T, std::size_t... I>
4974constexpr auto make_stdtuple_from_tietuple(
const T& t, std::index_sequence<I...>)
noexcept {
4975 return std::make_tuple(
4976 boost::pfr::detail::sequence_tuple::get<I>(t)...
4980template <
class T, std::size_t... I>
4981constexpr auto make_stdtiedtuple_from_tietuple(
const T& t, std::index_sequence<I...>)
noexcept {
4983 boost::pfr::detail::sequence_tuple::get<I>(t)...
4987template <
class T, std::size_t... I>
4988constexpr auto make_conststdtiedtuple_from_tietuple(
const T& t, std::index_sequence<I...>)
noexcept {
4990 std::add_lvalue_reference_t<std::add_const_t<
4991 std::remove_reference_t<decltype(boost::pfr::detail::sequence_tuple::get<I>(t))>
4994 boost::pfr::detail::sequence_tuple::get<I>(t)...
5007#ifndef BOOST_PFR_DETAIL_TIE_FROM_STRUCTURE_TUPLE_HPP
5008#define BOOST_PFR_DETAIL_TIE_FROM_STRUCTURE_TUPLE_HPP
5018#ifndef BOOST_PFR_TUPLE_SIZE_HPP
5019#define BOOST_PFR_TUPLE_SIZE_HPP
5022#include <type_traits>
5030namespace boost {
namespace pfr {
5040using tuple_size = detail::size_t_< boost::pfr::detail::fields_count<T>() >;
5051constexpr std::size_t tuple_size_v = tuple_size<T>::value;
5059namespace boost {
namespace pfr {
namespace detail {
5065template <
typename... Elements>
5066struct tie_from_structure_tuple : std::tuple<Elements&...> {
5067 using base = std::tuple<Elements&...>;
5070 template <
typename T>
5071 constexpr tie_from_structure_tuple& operator= (T
const& t) {
5073 detail::make_stdtiedtuple_from_tietuple(
5074 detail::tie_as_tuple(t),
5075 detail::make_index_sequence<tuple_size_v<T>>()));
5084#include <type_traits>
5093namespace boost {
namespace pfr {
5110template <std::
size_t I,
class T>
5111constexpr decltype(
auto) get(
const T& val)
noexcept {
5112 return detail::sequence_tuple::get<I>( detail::tie_as_tuple(val) );
5116template <std::
size_t I,
class T>
5117constexpr decltype(
auto) get(T& val
5118#
if !BOOST_PFR_USE_CPP17
5119 , std::enable_if_t<std::is_assignable<T, T>::value>* =
nullptr
5122 return detail::sequence_tuple::get<I>( detail::tie_as_tuple(val) );
5125#if !BOOST_PFR_USE_CPP17
5127template <std::
size_t I,
class T>
5128constexpr auto get(T&, std::enable_if_t<!std::is_assignable<T, T>::value>* =
nullptr) noexcept {
5129 static_assert(
sizeof(T) &&
false,
"====================> Boost.PFR: Calling boost::pfr::get on non const non assignable type is allowed only in C++17");
5136template <std::
size_t I,
class T>
5137constexpr auto get(T&& val, std::enable_if_t< std::is_rvalue_reference<T&&>::value>* =
nullptr) noexcept {
5138 return std::move(detail::sequence_tuple::get<I>( detail::tie_as_tuple(val) ));
5143template <
class U,
class T>
5144constexpr const U& get(
const T& val)
noexcept {
5145 return detail::sequence_tuple::get_by_type_impl<const U&>( detail::tie_as_tuple(val) );
5150template <
class U,
class T>
5151constexpr U& get(T& val
5152#
if !BOOST_PFR_USE_CPP17
5153 , std::enable_if_t<std::is_assignable<T, T>::value>* =
nullptr
5156 return detail::sequence_tuple::get_by_type_impl<U&>( detail::tie_as_tuple(val) );
5159#if !BOOST_PFR_USE_CPP17
5161template <
class U,
class T>
5162constexpr U& get(T&, std::enable_if_t<!std::is_assignable<T, T>::value>* =
nullptr) noexcept {
5163 static_assert(
sizeof(T) &&
false,
"====================> Boost.PFR: Calling boost::pfr::get on non const non assignable type is allowed only in C++17");
5170template <
class U,
class T>
5171constexpr U&& get(T&& val, std::enable_if_t< std::is_rvalue_reference<T&&>::value>* =
nullptr) noexcept {
5172 return std::move(detail::sequence_tuple::get_by_type_impl<U&>( detail::tie_as_tuple(val) ));
5182template <std::
size_t I,
class T>
5183using tuple_element = detail::sequence_tuple::tuple_element<I, decltype( ::boost::pfr::detail::tie_as_tuple(std::declval<T&>()) ) >;
5192template <std::
size_t I,
class T>
5193using tuple_element_t =
typename tuple_element<I, T>::type;
5206constexpr auto structure_to_tuple(
const T& val)
noexcept {
5207 return detail::make_stdtuple_from_tietuple(
5208 detail::tie_as_tuple(val),
5209 detail::make_index_sequence< tuple_size_v<T> >()
5231constexpr auto structure_tie(
const T& val)
noexcept {
5232 return detail::make_conststdtiedtuple_from_tietuple(
5233 detail::tie_as_tuple(
const_cast<T&
>(val)),
5234 detail::make_index_sequence< tuple_size_v<T> >()
5241constexpr auto structure_tie(T& val
5242#
if !BOOST_PFR_USE_CPP17
5243 , std::enable_if_t<std::is_assignable<T, T>::value>* =
nullptr
5246 return detail::make_stdtiedtuple_from_tietuple(
5247 detail::tie_as_tuple(val),
5248 detail::make_index_sequence< tuple_size_v<T> >()
5252#if !BOOST_PFR_USE_CPP17
5255constexpr auto structure_tie(T&, std::enable_if_t<!std::is_assignable<T, T>::value>* =
nullptr) noexcept {
5256 static_assert(
sizeof(T) &&
false,
"====================> Boost.PFR: Calling boost::pfr::structure_tie on non const non assignable type is allowed only in C++17");
5264constexpr auto structure_tie(T&&, std::enable_if_t< std::is_rvalue_reference<T&&>::value>* =
nullptr) noexcept {
5265 static_assert(
sizeof(T) &&
false,
"====================> Boost.PFR: Calling boost::pfr::structure_tie on rvalue references is forbidden");
5285template <
class T,
class F>
5286constexpr void for_each_field(T&& value, F&& func) {
5287 constexpr std::size_t fields_count_val = boost::pfr::detail::fields_count<std::remove_reference_t<T>>();
5289 ::boost::pfr::detail::for_each_field_dispatcher(
5291 [f = std::forward<F>(func)](
auto&& t)
mutable {
5293 constexpr std::size_t fields_count_val_in_lambda
5294 = boost::pfr::detail::fields_count<std::remove_reference_t<T>>();
5296 ::boost::pfr::detail::for_each_field_impl(
5299 detail::make_index_sequence<fields_count_val_in_lambda>{},
5300 std::is_rvalue_reference<T&&>{}
5303 detail::make_index_sequence<fields_count_val>{}
5321template <
typename... Elements>
5322constexpr detail::tie_from_structure_tuple<Elements...> tie_from_structure(Elements&... args)
noexcept {
5323 return detail::tie_from_structure_tuple<Elements...>(args...);
5339#ifndef BOOST_PFR_CORE_NAME_HPP
5340#define BOOST_PFR_CORE_NAME_HPP
5353#ifndef BOOST_PFR_DETAIL_CORE_NAME_HPP
5354#define BOOST_PFR_DETAIL_CORE_NAME_HPP
5362#if BOOST_PFR_CORE_NAME_ENABLED
5373#ifndef BOOST_PFR_DETAIL_CORE_NAME20_STATIC_HPP
5374#define BOOST_PFR_DETAIL_CORE_NAME20_STATIC_HPP
5381#ifndef BOOST_PFR_DETAIL_STDARRAY_HPP
5382#define BOOST_PFR_DETAIL_STDARRAY_HPP
5387#include <type_traits>
5391namespace boost {
namespace pfr {
namespace detail {
5393template <
class... Types>
5394constexpr auto make_stdarray(
const Types&... t)
noexcept {
5395 return std::array<std::common_type_t<Types...>,
sizeof...(Types)>{t...};
5398template <
class T, std::size_t... I>
5399constexpr auto make_stdarray_from_tietuple(
const T& t, std::index_sequence<I...>,
int)
noexcept {
5400 return detail::make_stdarray(
5401 boost::pfr::detail::sequence_tuple::get<I>(t)...
5406constexpr auto make_stdarray_from_tietuple(
const T&, std::index_sequence<>,
long)
noexcept {
5407 return std::array<std::nullptr_t, 0>{};
5424#ifndef BOOST_PFR_DETAIL_FAKE_OBJECT_HPP
5425#define BOOST_PFR_DETAIL_FAKE_OBJECT_HPP
5428namespace boost {
namespace pfr {
namespace detail {
5431extern const T fake_object;
5437#include <type_traits>
5438#include <string_view>
5442namespace boost {
namespace pfr {
namespace detail {
5444struct core_name_skip {
5445 std::size_t size_at_begin;
5446 std::size_t size_at_end;
5448 std::string_view until_runtime;
5450 consteval std::string_view apply(std::string_view sv)
const noexcept {
5453 sv.remove_prefix((std::min)(size_at_begin, sv.size()));
5454 sv.remove_suffix((std::min)(size_at_end, sv.size()));
5455 if (until_runtime.empty()) {
5459 const auto found = is_backward ? sv.rfind(until_runtime)
5460 : sv.find(until_runtime);
5462 const auto cut_until = found + until_runtime.size();
5463 const auto safe_cut_until = (std::min)(cut_until, sv.size());
5464 return sv.substr(safe_cut_until);
5469 explicit consteval backward(std::string_view value) noexcept
5473 std::string_view value;
5476consteval core_name_skip make_core_name_skip(std::size_t size_at_begin,
5477 std::size_t size_at_end,
5478 std::string_view until_runtime)
noexcept
5480 return core_name_skip{size_at_begin, size_at_end,
false, until_runtime};
5483consteval core_name_skip make_core_name_skip(std::size_t size_at_begin,
5484 std::size_t size_at_end,
5485 backward until_runtime)
noexcept
5487 return core_name_skip{size_at_begin, size_at_end,
true, until_runtime.value};
5493consteval std::string_view clang_workaround(std::string_view value)
noexcept
5498template <
class MsvcWorkaround, auto ptr>
5499consteval auto name_of_field_impl() noexcept {
5503#ifndef BOOST_PFR_FUNCTION_SIGNATURE
5504# if defined(__FUNCSIG__)
5505# define BOOST_PFR_FUNCTION_SIGNATURE __FUNCSIG__
5506# elif defined(__PRETTY_FUNCTION__) || defined(__GNUC__) || defined(__clang__)
5507# define BOOST_PFR_FUNCTION_SIGNATURE __PRETTY_FUNCTION__
5509# define BOOST_PFR_FUNCTION_SIGNATURE ""
5513 constexpr std::string_view sv = detail::clang_workaround<MsvcWorkaround>(BOOST_PFR_FUNCTION_SIGNATURE);
5514 static_assert(!sv.empty(),
5515 "====================> Boost.PFR: Field reflection parser configured in a wrong way. "
5516 "Please define the BOOST_PFR_FUNCTION_SIGNATURE to a compiler specific macro, "
5517 "that outputs the whole function signature including non-type template parameters."
5520 constexpr auto skip = detail::make_core_name_skip BOOST_PFR_CORE_NAME_PARSING;
5521 static_assert(skip.size_at_begin + skip.size_at_end + skip.until_runtime.size() < sv.size(),
5522 "====================> Boost.PFR: Field reflection parser configured in a wrong way. "
5523 "It attempts to skip more chars than available. "
5524 "Please define BOOST_PFR_CORE_NAME_PARSING to correct values. See documentation section "
5525 "'Limitations and Configuration' for more information."
5527 constexpr auto fn = skip.apply(sv);
5530 "====================> Boost.PFR: Extraction of field name is misconfigured for your compiler. "
5531 "It skipped all the input, leaving the field name empty. "
5532 "Please define BOOST_PFR_CORE_NAME_PARSING to correct values. See documentation section "
5533 "'Limitations and Configuration' for more information."
5535 auto res = std::array<char, fn.size()+1>{};
5537 auto* out = res.data();
5547#pragma clang diagnostic push
5548#pragma clang diagnostic ignored "-Wundefined-var-template"
5555struct clang_wrapper_t {
5559clang_wrapper_t(T) -> clang_wrapper_t<T>;
5562constexpr auto make_clang_wrapper(
const T& arg)
noexcept {
5563 return clang_wrapper_t{arg};
5569constexpr const T& make_clang_wrapper(
const T& arg)
noexcept {
5577template <
class MsvcWorkaround, auto ptr>
5578consteval auto name_of_field() noexcept {
5581 sizeof(MsvcWorkaround)
5582 && std::string_view{
5583 detail::name_of_field_impl<
5584 core_name_skip, detail::make_clang_wrapper(std::addressof(
5585 fake_object<core_name_skip>.size_at_begin
5588 } ==
"size_at_begin",
5589 "====================> Boost.PFR: Extraction of field name is misconfigured for your compiler. "
5590 "It does not return the proper field name. "
5591 "Please define BOOST_PFR_CORE_NAME_PARSING to correct values. See documentation section "
5592 "'Limitations and Configuration' for more information."
5595 return detail::name_of_field_impl<MsvcWorkaround, ptr>();
5602template <
class T, std::
size_t I>
5603inline constexpr auto stored_name_of_field = detail::name_of_field<T,
5604 detail::make_clang_wrapper(std::addressof(detail::sequence_tuple::get<I>(
5605 detail::tie_as_tuple(detail::fake_object<T>)
5610#pragma clang diagnostic pop
5613template <
class T, std::size_t... I>
5614constexpr auto tie_as_names_tuple_impl(std::index_sequence<I...>)
noexcept {
5615 return detail::sequence_tuple::make_sequence_tuple(std::string_view{stored_name_of_field<T, I>.data()}...);
5618template <
class T, std::
size_t I>
5619constexpr std::string_view get_name() noexcept {
5621 !std::is_union<T>::value,
5622 "====================> Boost.PFR: For safety reasons it is forbidden to reflect unions. See `Reflection of unions` section in the docs for more info."
5625 !std::is_array<T>::value,
5626 "====================> Boost.PFR: It is impossible to extract name from old C array since it doesn't have named members"
5629 sizeof(T) && BOOST_PFR_USE_CPP17,
5630 "====================> Boost.PFR: Extraction of field's names is allowed only when the BOOST_PFR_USE_CPP17 macro enabled."
5633 return stored_name_of_field<T, I>.data();
5637constexpr auto tie_as_names_tuple() noexcept {
5639 !std::is_union<T>::value,
5640 "====================> Boost.PFR: For safety reasons it is forbidden to reflect unions. See `Reflection of unions` section in the docs for more info."
5643 !std::is_array<T>::value,
5644 "====================> Boost.PFR: It is impossible to extract name from old C array since it doesn't have named members"
5647 sizeof(T) && BOOST_PFR_USE_CPP17,
5648 "====================> Boost.PFR: Extraction of field's names is allowed only when the BOOST_PFR_USE_CPP17 macro enabled."
5651 return detail::tie_as_names_tuple_impl<T>(detail::make_index_sequence<detail::fields_count<T>()>{});
5669#ifndef BOOST_PFR_DETAIL_CORE_NAME14_DISABLED_HPP
5670#define BOOST_PFR_DETAIL_CORE_NAME14_DISABLED_HPP
5673namespace boost {
namespace pfr {
namespace detail {
5675template <
class T, std::
size_t I>
5676constexpr auto get_name() noexcept {
5679 "====================> Boost.PFR: Field's names extracting functionality requires C++20."
5686constexpr auto tie_as_names_tuple() noexcept {
5689 "====================> Boost.PFR: Field's names extracting functionality requires C++20."
5692 return detail::sequence_tuple::make_sequence_tuple();
5715namespace boost {
namespace pfr {
5726template <std::
size_t I,
class T>
5728#ifdef BOOST_PFR_DOXYGEN_INVOKED
5733get_name() noexcept {
5734 return detail::get_name<T, I>();
5753#ifdef BOOST_PFR_DOXYGEN_INVOKED
5754std::array<std::string_view, boost::pfr::tuple_size_v<T>>
5758names_as_array() noexcept {
5759 return detail::make_stdarray_from_tietuple(
5760 detail::tie_as_names_tuple<T>(),
5761 detail::make_index_sequence< tuple_size_v<T> >(),
5775#ifndef BOOST_PFR_FUNCTIONS_FOR_HPP
5776#define BOOST_PFR_FUNCTIONS_FOR_HPP
5784#ifndef BOOST_PFR_OPS_FIELDS_HPP
5785#define BOOST_PFR_OPS_FIELDS_HPP
5793#ifndef BOOST_PFR_DETAIL_FUNCTIONAL_HPP
5794#define BOOST_PFR_DETAIL_FUNCTIONAL_HPP
5797#include <functional>
5801namespace boost {
namespace pfr {
namespace detail {
5802 template <std::
size_t I, std::
size_t N>
5804 template <
class T,
class U>
5805 constexpr static bool cmp(
const T& v1,
const U& v2)
noexcept {
5806 return ::boost::pfr::detail::sequence_tuple::get<I>(v1) == ::boost::pfr::detail::sequence_tuple::get<I>(v2)
5807 && equal_impl<I + 1, N>::cmp(v1, v2);
5811 template <std::
size_t N>
5812 struct equal_impl<N, N> {
5813 template <
class T,
class U>
5814 constexpr static bool cmp(
const T&,
const U&)
noexcept {
5815 return T::size_v == U::size_v;
5819 template <std::
size_t I, std::
size_t N>
5820 struct not_equal_impl {
5821 template <
class T,
class U>
5822 constexpr static bool cmp(
const T& v1,
const U& v2)
noexcept {
5823 return ::boost::pfr::detail::sequence_tuple::get<I>(v1) != ::boost::pfr::detail::sequence_tuple::get<I>(v2)
5824 || not_equal_impl<I + 1, N>::cmp(v1, v2);
5828 template <std::
size_t N>
5829 struct not_equal_impl<N, N> {
5830 template <
class T,
class U>
5831 constexpr static bool cmp(
const T&,
const U&)
noexcept {
5832 return T::size_v != U::size_v;
5836 template <std::
size_t I, std::
size_t N>
5838 template <
class T,
class U>
5839 constexpr static bool cmp(
const T& v1,
const U& v2)
noexcept {
5840 return sequence_tuple::get<I>(v1) < sequence_tuple::get<I>(v2)
5841 || (sequence_tuple::get<I>(v1) == sequence_tuple::get<I>(v2) && less_impl<I + 1, N>::cmp(v1, v2));
5845 template <std::
size_t N>
5846 struct less_impl<N, N> {
5847 template <
class T,
class U>
5848 constexpr static bool cmp(
const T&,
const U&)
noexcept {
5849 return T::size_v < U::size_v;
5853 template <std::
size_t I, std::
size_t N>
5854 struct less_equal_impl {
5855 template <
class T,
class U>
5856 constexpr static bool cmp(
const T& v1,
const U& v2)
noexcept {
5857 return sequence_tuple::get<I>(v1) < sequence_tuple::get<I>(v2)
5858 || (sequence_tuple::get<I>(v1) == sequence_tuple::get<I>(v2) && less_equal_impl<I + 1, N>::cmp(v1, v2));
5862 template <std::
size_t N>
5863 struct less_equal_impl<N, N> {
5864 template <
class T,
class U>
5865 constexpr static bool cmp(
const T&,
const U&)
noexcept {
5866 return T::size_v <= U::size_v;
5870 template <std::
size_t I, std::
size_t N>
5871 struct greater_impl {
5872 template <
class T,
class U>
5873 constexpr static bool cmp(
const T& v1,
const U& v2)
noexcept {
5874 return sequence_tuple::get<I>(v1) > sequence_tuple::get<I>(v2)
5875 || (sequence_tuple::get<I>(v1) == sequence_tuple::get<I>(v2) && greater_impl<I + 1, N>::cmp(v1, v2));
5879 template <std::
size_t N>
5880 struct greater_impl<N, N> {
5881 template <
class T,
class U>
5882 constexpr static bool cmp(
const T&,
const U&)
noexcept {
5883 return T::size_v > U::size_v;
5887 template <std::
size_t I, std::
size_t N>
5888 struct greater_equal_impl {
5889 template <
class T,
class U>
5890 constexpr static bool cmp(
const T& v1,
const U& v2)
noexcept {
5891 return sequence_tuple::get<I>(v1) > sequence_tuple::get<I>(v2)
5892 || (sequence_tuple::get<I>(v1) == sequence_tuple::get<I>(v2) && greater_equal_impl<I + 1, N>::cmp(v1, v2));
5896 template <std::
size_t N>
5897 struct greater_equal_impl<N, N> {
5898 template <
class T,
class U>
5899 constexpr static bool cmp(
const T&,
const U&)
noexcept {
5900 return T::size_v >= U::size_v;
5915 template <
typename SizeT>
5916 constexpr void hash_combine(SizeT& seed, SizeT value)
noexcept {
5917 seed ^= value + 0x9e3779b9 + (seed<<6) + (seed>>2);
5920 constexpr auto rotl(std::uint32_t x, std::uint32_t r)
noexcept {
5921 return (x << r) | (x >> (32 - r));
5924 constexpr void hash_combine(std::uint32_t& h1, std::uint32_t k1)
noexcept {
5925 const std::uint32_t c1 = 0xcc9e2d51;
5926 const std::uint32_t c2 = 0x1b873593;
5929 k1 = detail::rotl(k1,15);
5933 h1 = detail::rotl(h1,13);
5934 h1 = h1*5+0xe6546b64;
5937#if defined(INT64_MIN) && defined(UINT64_MAX)
5938 constexpr void hash_combine(std::uint64_t& h, std::uint64_t k)
noexcept {
5939 const std::uint64_t m = 0xc6a4a7935bd1e995ULL;
5955 template <
typename T>
5956 auto compute_hash(
const T& value,
long )
5957 ->
decltype(std::hash<T>()(value))
5959 return std::hash<T>()(value);
5962 template <
typename T>
5963 std::size_t compute_hash(
const T& ,
int ) {
5964 static_assert(
sizeof(T) &&
false,
"====================> Boost.PFR: std::hash not specialized for type T");
5968 template <std::
size_t I, std::
size_t N>
5971 constexpr static std::size_t compute(
const T& val)
noexcept {
5972 std::size_t h = detail::compute_hash( ::boost::pfr::detail::sequence_tuple::get<I>(val), 1L );
5973 detail::hash_combine(h, hash_impl<I + 1, N>::compute(val) );
5978 template <std::
size_t N>
5979 struct hash_impl<N, N> {
5981 constexpr static std::size_t compute(
const T&)
noexcept {
5987 constexpr std::size_t min_size(std::size_t x, std::size_t y)
noexcept {
5988 return x < y ? x : y;
5991 template <
template <std::
size_t, std::
size_t>
class Visitor,
class T,
class U>
5992 constexpr bool binary_visit(
const T& x,
const U& y) {
5993 constexpr std::size_t fields_count_lhs = detail::fields_count<std::remove_reference_t<T>>();
5994 constexpr std::size_t fields_count_rhs = detail::fields_count<std::remove_reference_t<U>>();
5995 constexpr std::size_t fields_count_min = detail::min_size(fields_count_lhs, fields_count_rhs);
5996 typedef Visitor<0, fields_count_min> visitor_t;
5998#if BOOST_PFR_USE_CPP17 || BOOST_PFR_USE_LOOPHOLE
5999 return visitor_t::cmp(detail::tie_as_tuple(x), detail::tie_as_tuple(y));
6002 ::boost::pfr::detail::for_each_field_dispatcher(
6004 [&result, &y](
const auto& lhs) {
6005 constexpr std::size_t fields_count_rhs_ = detail::fields_count<std::remove_reference_t<U>>();
6006 ::boost::pfr::detail::for_each_field_dispatcher(
6008 [&result, &lhs](
const auto& rhs) {
6009 result = visitor_t::cmp(lhs, rhs);
6011 detail::make_index_sequence<fields_count_rhs_>{}
6014 detail::make_index_sequence<fields_count_lhs>{}
6044namespace boost {
namespace pfr {
6051 template <
class T,
class U>
6052 constexpr bool eq_fields(
const T& lhs,
const U& rhs)
noexcept {
6053 return detail::binary_visit<detail::equal_impl>(lhs, rhs);
6062 template <
class T,
class U>
6063 constexpr bool ne_fields(
const T& lhs,
const U& rhs)
noexcept {
6064 return detail::binary_visit<detail::not_equal_impl>(lhs, rhs);
6072 template <
class T,
class U>
6073 constexpr bool gt_fields(
const T& lhs,
const U& rhs)
noexcept {
6074 return detail::binary_visit<detail::greater_impl>(lhs, rhs);
6083 template <
class T,
class U>
6084 constexpr bool lt_fields(
const T& lhs,
const U& rhs)
noexcept {
6085 return detail::binary_visit<detail::less_impl>(lhs, rhs);
6094 template <
class T,
class U>
6095 constexpr bool ge_fields(
const T& lhs,
const U& rhs)
noexcept {
6096 return detail::binary_visit<detail::greater_equal_impl>(lhs, rhs);
6105 template <
class T,
class U>
6106 constexpr bool le_fields(
const T& lhs,
const U& rhs)
noexcept {
6107 return detail::binary_visit<detail::less_equal_impl>(lhs, rhs);
6115 std::size_t hash_fields(
const T& x) {
6116 constexpr std::size_t fields_count_val = boost::pfr::detail::fields_count<std::remove_reference_t<T>>();
6117#if BOOST_PFR_USE_CPP17 || BOOST_PFR_USE_LOOPHOLE
6118 return detail::hash_impl<0, fields_count_val>::compute(detail::tie_as_tuple(x));
6120 std::size_t result = 0;
6121 ::boost::pfr::detail::for_each_field_dispatcher(
6123 [&result](
const auto& lhs) {
6126 constexpr std::size_t fields_count_val_lambda = boost::pfr::detail::fields_count<std::remove_reference_t<T>>();
6127 result = detail::hash_impl<0, fields_count_val_lambda>::compute(lhs);
6129 detail::make_index_sequence<fields_count_val>{}
6144#ifndef BOOST_PFR_IO_FIELDS_HPP
6145#define BOOST_PFR_IO_FIELDS_HPP
6149#include <type_traits>
6157#ifndef BOOST_PFR_DETAIL_IO_HPP
6158#define BOOST_PFR_DETAIL_IO_HPP
6164#if defined(__has_include)
6165# if __has_include(<string_view>) && BOOST_PFR_USE_CPP17
6166# include <string_view>
6170namespace boost {
namespace pfr {
namespace detail {
6172inline auto quoted_helper(
const std::string& s)
noexcept {
6173 return std::quoted(s);
6176#if defined(__has_include)
6177# if __has_include(<string_view>) && BOOST_PFR_USE_CPP17
6178template <
class CharT,
class Traits>
6179inline auto quoted_helper(std::basic_string_view<CharT, Traits> s)
noexcept {
6180 return std::quoted(s);
6185inline auto quoted_helper(std::string& s)
noexcept {
6186 return std::quoted(s);
6190inline decltype(
auto) quoted_helper(T&& v)
noexcept {
6191 return std::forward<T>(v);
6194template <std::
size_t I, std::
size_t N>
6196 template <
class Stream,
class T>
6197 static void print (Stream& out,
const T& value) {
6198 if (!!I) out <<
", ";
6199 out << detail::quoted_helper(boost::pfr::detail::sequence_tuple::get<I>(value));
6200 print_impl<I + 1, N>::print(out, value);
6204template <std::
size_t I>
6205struct print_impl<I, I> {
6206 template <
class Stream,
class T>
static void print (Stream&,
const T&)
noexcept {}
6210template <std::
size_t I, std::
size_t N>
6212 template <
class Stream,
class T>
6213 static void read (Stream& in,
const T& value) {
6217 if (ignore !=
',') in.setstate(Stream::failbit);
6219 if (ignore !=
' ') in.setstate(Stream::failbit);
6221 in >> detail::quoted_helper( boost::pfr::detail::sequence_tuple::get<I>(value) );
6222 read_impl<I + 1, N>::read(in, value);
6226template <std::
size_t I>
6227struct read_impl<I, I> {
6228 template <
class Stream,
class T>
static void read (Stream&,
const T&) {}
6258namespace boost {
namespace pfr {
6263struct io_fields_impl {
6268template <
class Char,
class Traits,
class T>
6269std::basic_ostream<Char, Traits>& operator<<(std::basic_ostream<Char, Traits>& out, io_fields_impl<const T&>&& x) {
6270 const T& value = x.value;
6271 constexpr std::size_t fields_count_val = boost::pfr::detail::fields_count<T>();
6273#if BOOST_PFR_USE_CPP17 || BOOST_PFR_USE_LOOPHOLE
6274 detail::print_impl<0, fields_count_val>::print(out, detail::tie_as_tuple(value));
6276 ::boost::pfr::detail::for_each_field_dispatcher(
6278 [&out](
const auto& val) {
6281 constexpr std::size_t fields_count_val_lambda = boost::pfr::detail::fields_count<T>();
6282 detail::print_impl<0, fields_count_val_lambda>::print(out, val);
6284 detail::make_index_sequence<fields_count_val>{}
6291template <
class Char,
class Traits,
class T>
6292std::basic_ostream<Char, Traits>& operator<<(std::basic_ostream<Char, Traits>& out, io_fields_impl<T>&& x) {
6293 return out << io_fields_impl<const std::remove_reference_t<T>&>{x.value};
6296template <
class Char,
class Traits,
class T>
6297std::basic_istream<Char, Traits>& operator>>(std::basic_istream<Char, Traits>& in, io_fields_impl<T&>&& x) {
6299 constexpr std::size_t fields_count_val = boost::pfr::detail::fields_count<T>();
6301 const auto prev_exceptions = in.exceptions();
6302 in.exceptions(
typename std::basic_istream<Char, Traits>::iostate(0) );
6303 const auto prev_flags = in.flags(
typename std::basic_istream<Char, Traits>::fmtflags(0) );
6305 char parenthis = {};
6307 if (parenthis !=
'{') in.setstate(std::basic_istream<Char, Traits>::failbit);
6309#if BOOST_PFR_USE_CPP17 || BOOST_PFR_USE_LOOPHOLE
6310 detail::read_impl<0, fields_count_val>::read(in, detail::tie_as_tuple(value));
6312 ::boost::pfr::detail::for_each_field_dispatcher(
6314 [&in](
const auto& val) {
6317 constexpr std::size_t fields_count_val_lambda = boost::pfr::detail::fields_count<T>();
6318 detail::read_impl<0, fields_count_val_lambda>::read(in, val);
6320 detail::make_index_sequence<fields_count_val>{}
6325 if (parenthis !=
'}') in.setstate(std::basic_istream<Char, Traits>::failbit);
6327 in.flags(prev_flags);
6328 in.exceptions(prev_exceptions);
6333template <
class Char,
class Traits,
class T>
6334std::basic_istream<Char, Traits>& operator>>(std::basic_istream<Char, Traits>& in, io_fields_impl<const T&>&& ) {
6335 static_assert(
sizeof(T) &&
false,
"====================> Boost.PFR: Attempt to use istream operator on a boost::pfr::io_fields wrapped type T with const qualifier.");
6339template <
class Char,
class Traits,
class T>
6340std::basic_istream<Char, Traits>& operator>>(std::basic_istream<Char, Traits>& in, io_fields_impl<T>&& ) {
6341 static_assert(
sizeof(T) &&
false,
"====================> Boost.PFR: Attempt to use istream operator on a boost::pfr::io_fields wrapped temporary of type T.");
6370auto io_fields(T&& value)
noexcept {
6371 return detail::io_fields_impl<T>{std::forward<T>(value)};
6435#define BOOST_PFR_FUNCTIONS_FOR(T) \
6436 BOOST_PFR_MAYBE_UNUSED inline bool operator==(const T& lhs, const T& rhs) { return ::boost::pfr::eq_fields(lhs, rhs); } \
6437 BOOST_PFR_MAYBE_UNUSED inline bool operator!=(const T& lhs, const T& rhs) { return ::boost::pfr::ne_fields(lhs, rhs); } \
6438 BOOST_PFR_MAYBE_UNUSED inline bool operator< (const T& lhs, const T& rhs) { return ::boost::pfr::lt_fields(lhs, rhs); } \
6439 BOOST_PFR_MAYBE_UNUSED inline bool operator> (const T& lhs, const T& rhs) { return ::boost::pfr::gt_fields(lhs, rhs); } \
6440 BOOST_PFR_MAYBE_UNUSED inline bool operator<=(const T& lhs, const T& rhs) { return ::boost::pfr::le_fields(lhs, rhs); } \
6441 BOOST_PFR_MAYBE_UNUSED inline bool operator>=(const T& lhs, const T& rhs) { return ::boost::pfr::ge_fields(lhs, rhs); } \
6442 template <class Char, class Traits> \
6443 BOOST_PFR_MAYBE_UNUSED inline ::std::basic_ostream<Char, Traits>& operator<<(::std::basic_ostream<Char, Traits>& out, const T& value) { \
6444 return out << ::boost::pfr::io_fields(value); \
6446 template <class Char, class Traits> \
6447 BOOST_PFR_MAYBE_UNUSED inline ::std::basic_istream<Char, Traits>& operator>>(::std::basic_istream<Char, Traits>& in, T& value) { \
6448 return in >> ::boost::pfr::io_fields(value); \
6450 BOOST_PFR_MAYBE_UNUSED inline std::size_t hash_value(const T& v) { \
6451 return ::boost::pfr::hash_fields(v); \
6462#ifndef BOOST_PFR_FUNCTORS_HPP
6463#define BOOST_PFR_FUNCTORS_HPP
6471#ifndef BOOST_PFR_OPS_HPP
6472#define BOOST_PFR_OPS_HPP
6480#ifndef BOOST_PFR_DETAIL_DETECTORS_HPP
6481#define BOOST_PFR_DETAIL_DETECTORS_HPP
6484#include <functional>
6485#include <type_traits>
6487namespace boost {
namespace pfr {
namespace detail {
6489 struct can_not_apply{};
6491 template <
template <
class,
class>
class Detector,
class Tleft,
class Tright>
6492 struct not_appliable {
6493 static constexpr bool value = std::is_same<
6494 Detector<Tleft, Tright>,
6500 template <
class S,
class T>
auto comp_eq_detector_msvc_helper(
long) ->
decltype(std::declval<S>() == std::declval<T>());
6501 template <
class S,
class T> can_not_apply comp_eq_detector_msvc_helper(
int);
6502 template <
class T1,
class T2>
using comp_eq_detector =
decltype(comp_eq_detector_msvc_helper<T1,T2>(1L));
6504 template <
class S,
class T>
auto comp_ne_detector_msvc_helper(
long) ->
decltype(std::declval<S>() != std::declval<T>());
6505 template <
class S,
class T> can_not_apply comp_ne_detector_msvc_helper(
int);
6506 template <
class T1,
class T2>
using comp_ne_detector =
decltype(comp_ne_detector_msvc_helper<T1,T2>(1L));
6508 template <
class S,
class T>
auto comp_lt_detector_msvc_helper(
long) ->
decltype(std::declval<S>() < std::declval<T>());
6509 template <
class S,
class T> can_not_apply comp_lt_detector_msvc_helper(
int);
6510 template <
class T1,
class T2>
using comp_lt_detector =
decltype(comp_lt_detector_msvc_helper<T1,T2>(1L));
6512 template <
class S,
class T>
auto comp_le_detector_msvc_helper(
long) ->
decltype(std::declval<S>() <= std::declval<T>());
6513 template <
class S,
class T> can_not_apply comp_le_detector_msvc_helper(
int);
6514 template <
class T1,
class T2>
using comp_le_detector =
decltype(comp_le_detector_msvc_helper<T1,T2>(1L));
6516 template <
class S,
class T>
auto comp_gt_detector_msvc_helper(
long) ->
decltype(std::declval<S>() > std::declval<T>());
6517 template <
class S,
class T> can_not_apply comp_gt_detector_msvc_helper(
int);
6518 template <
class T1,
class T2>
using comp_gt_detector =
decltype(comp_gt_detector_msvc_helper<T1,T2>(1L));
6520 template <
class S,
class T>
auto comp_ge_detector_msvc_helper(
long) ->
decltype(std::declval<S>() >= std::declval<T>());
6521 template <
class S,
class T> can_not_apply comp_ge_detector_msvc_helper(
int);
6522 template <
class T1,
class T2>
using comp_ge_detector =
decltype(comp_ge_detector_msvc_helper<T1,T2>(1L));
6525 template <
class S>
auto hash_detector_msvc_helper(
long) ->
decltype(std::hash<S>{}(std::declval<S>()));
6526 template <
class S> can_not_apply hash_detector_msvc_helper(
int);
6527 template <
class T1,
class T2>
using hash_detector =
decltype(hash_detector_msvc_helper<T1,T2>(1L));
6530 template <
class S,
class T>
auto ostreamable_detector_msvc_helper(
long) ->
decltype(std::declval<S>() << std::declval<T>());
6531 template <
class S,
class T> can_not_apply ostreamable_detector_msvc_helper(
int);
6532 template <
class S,
class T>
using ostreamable_detector =
decltype(ostreamable_detector_msvc_helper<S,T>(1L));
6534 template <
class S,
class T>
auto istreamable_detector_msvc_helper(
long) ->
decltype(std::declval<S>() >> std::declval<T>());
6535 template <
class S,
class T> can_not_apply istreamable_detector_msvc_helper(
int);
6536 template <
class S,
class T>
using istreamable_detector =
decltype(istreamable_detector_msvc_helper<S,T>(1L));
6565namespace boost {
namespace pfr {
6570 template <
template <
class,
class>
class Detector,
class T,
class U>
6571 using enable_not_comp_base_t = std::enable_if_t<
6572 not_appliable<Detector, T const&, U const&>::value,
6576 template <
template <
class,
class>
class Detector,
class T,
class U>
6577 using enable_comp_base_t = std::enable_if_t<
6578 !not_appliable<Detector, T const&, U const&>::value,
6583 template <
class T,
class U>
using enable_not_eq_comp_t = enable_not_comp_base_t<comp_eq_detector, T, U>;
6584 template <
class T,
class U>
using enable_not_ne_comp_t = enable_not_comp_base_t<comp_ne_detector, T, U>;
6585 template <
class T,
class U>
using enable_not_lt_comp_t = enable_not_comp_base_t<comp_lt_detector, T, U>;
6586 template <
class T,
class U>
using enable_not_le_comp_t = enable_not_comp_base_t<comp_le_detector, T, U>;
6587 template <
class T,
class U>
using enable_not_gt_comp_t = enable_not_comp_base_t<comp_gt_detector, T, U>;
6588 template <
class T,
class U>
using enable_not_ge_comp_t = enable_not_comp_base_t<comp_ge_detector, T, U>;
6590 template <
class T>
using enable_not_hashable_t = std::enable_if_t<
6591 not_appliable<hash_detector, const T&, const T&>::value,
6596 template <
class T,
class U>
using enable_eq_comp_t = enable_comp_base_t<comp_eq_detector, T, U>;
6597 template <
class T,
class U>
using enable_ne_comp_t = enable_comp_base_t<comp_ne_detector, T, U>;
6598 template <
class T,
class U>
using enable_lt_comp_t = enable_comp_base_t<comp_lt_detector, T, U>;
6599 template <
class T,
class U>
using enable_le_comp_t = enable_comp_base_t<comp_le_detector, T, U>;
6600 template <
class T,
class U>
using enable_gt_comp_t = enable_comp_base_t<comp_gt_detector, T, U>;
6601 template <
class T,
class U>
using enable_ge_comp_t = enable_comp_base_t<comp_ge_detector, T, U>;
6603 template <
class T>
using enable_hashable_t = std::enable_if_t<
6604 !not_appliable<hash_detector, const T&, const T&>::value,
6613template <
class T,
class U>
6614constexpr detail::enable_not_eq_comp_t<T, U> eq(
const T& lhs,
const U& rhs)
noexcept {
6615 return boost::pfr::eq_fields(lhs, rhs);
6619template <
class T,
class U>
6620constexpr detail::enable_eq_comp_t<T, U> eq(
const T& lhs,
const U& rhs) {
6628template <
class T,
class U>
6629constexpr detail::enable_not_ne_comp_t<T, U> ne(
const T& lhs,
const U& rhs)
noexcept {
6630 return boost::pfr::ne_fields(lhs, rhs);
6634template <
class T,
class U>
6635constexpr detail::enable_ne_comp_t<T, U> ne(
const T& lhs,
const U& rhs) {
6643template <
class T,
class U>
6644constexpr detail::enable_not_lt_comp_t<T, U> lt(
const T& lhs,
const U& rhs)
noexcept {
6645 return boost::pfr::lt_fields(lhs, rhs);
6649template <
class T,
class U>
6650constexpr detail::enable_lt_comp_t<T, U> lt(
const T& lhs,
const U& rhs) {
6658template <
class T,
class U>
6659constexpr detail::enable_not_gt_comp_t<T, U> gt(
const T& lhs,
const U& rhs)
noexcept {
6660 return boost::pfr::gt_fields(lhs, rhs);
6664template <
class T,
class U>
6665constexpr detail::enable_gt_comp_t<T, U> gt(
const T& lhs,
const U& rhs) {
6673template <
class T,
class U>
6674constexpr detail::enable_not_le_comp_t<T, U> le(
const T& lhs,
const U& rhs)
noexcept {
6675 return boost::pfr::le_fields(lhs, rhs);
6679template <
class T,
class U>
6680constexpr detail::enable_le_comp_t<T, U> le(
const T& lhs,
const U& rhs) {
6688template <
class T,
class U>
6689constexpr detail::enable_not_ge_comp_t<T, U> ge(
const T& lhs,
const U& rhs)
noexcept {
6690 return boost::pfr::ge_fields(lhs, rhs);
6694template <
class T,
class U>
6695constexpr detail::enable_ge_comp_t<T, U> ge(
const T& lhs,
const U& rhs) {
6704constexpr detail::enable_not_hashable_t<T> hash_value(
const T& value)
noexcept {
6705 return boost::pfr::hash_fields(value);
6710constexpr detail::enable_hashable_t<T> hash_value(
const T& value) {
6711 return std::hash<T>{}(value);
6739namespace boost {
namespace pfr {
6744template <
class T =
void>
struct equal_to {
6746 bool operator()(
const T& x,
const T& y)
const {
6747 return boost::pfr::eq(x, y);
6750#ifdef BOOST_PFR_DOXYGEN_INVOKED
6752 typedef std::true_type is_transparent;
6756 template <
class V,
class U>
bool operator()(
const V& x,
const U& y)
const;
6761template <>
struct equal_to<void> {
6762 template <
class T,
class U>
6763 bool operator()(
const T& x,
const U& y)
const {
6764 return boost::pfr::eq(x, y);
6767 typedef std::true_type is_transparent;
6772template <
class T =
void>
struct not_equal {
6774 bool operator()(
const T& x,
const T& y)
const {
6775 return boost::pfr::ne(x, y);
6778#ifdef BOOST_PFR_DOXYGEN_INVOKED
6780 typedef std::true_type is_transparent;
6784 template <
class V,
class U>
bool operator()(
const V& x,
const U& y)
const;
6789template <>
struct not_equal<void> {
6790 template <
class T,
class U>
6791 bool operator()(
const T& x,
const U& y)
const {
6792 return boost::pfr::ne(x, y);
6795 typedef std::true_type is_transparent;
6800template <
class T =
void>
struct greater {
6802 bool operator()(
const T& x,
const T& y)
const {
6803 return boost::pfr::gt(x, y);
6806#ifdef BOOST_PFR_DOXYGEN_INVOKED
6808 typedef std::true_type is_transparent;
6812 template <
class V,
class U>
bool operator()(
const V& x,
const U& y)
const;
6817template <>
struct greater<void> {
6818 template <
class T,
class U>
6819 bool operator()(
const T& x,
const U& y)
const {
6820 return boost::pfr::gt(x, y);
6823 typedef std::true_type is_transparent;
6828template <
class T =
void>
struct less {
6830 bool operator()(
const T& x,
const T& y)
const {
6831 return boost::pfr::lt(x, y);
6834#ifdef BOOST_PFR_DOXYGEN_INVOKED
6836 typedef std::true_type is_transparent;
6840 template <
class V,
class U>
bool operator()(
const V& x,
const U& y)
const;
6845template <>
struct less<void> {
6846 template <
class T,
class U>
6847 bool operator()(
const T& x,
const U& y)
const {
6848 return boost::pfr::lt(x, y);
6851 typedef std::true_type is_transparent;
6856template <
class T =
void>
struct greater_equal {
6859 bool operator()(
const T& x,
const T& y)
const {
6860 return boost::pfr::ge(x, y);
6863#ifdef BOOST_PFR_DOXYGEN_INVOKED
6865 typedef std::true_type is_transparent;
6869 template <
class V,
class U>
bool operator()(
const V& x,
const U& y)
const;
6874template <>
struct greater_equal<void> {
6875 template <
class T,
class U>
6876 bool operator()(
const T& x,
const U& y)
const {
6877 return boost::pfr::ge(x, y);
6880 typedef std::true_type is_transparent;
6885template <
class T =
void>
struct less_equal {
6888 bool operator()(
const T& x,
const T& y)
const {
6889 return boost::pfr::le(x, y);
6892#ifdef BOOST_PFR_DOXYGEN_INVOKED
6894 typedef std::true_type is_transparent;
6898 template <
class V,
class U>
bool operator()(
const V& x,
const U& y)
const;
6903template <>
struct less_equal<void> {
6904 template <
class T,
class U>
6905 bool operator()(
const T& x,
const U& y)
const {
6906 return boost::pfr::le(x, y);
6909 typedef std::true_type is_transparent;
6915template <
class T>
struct hash {
6917 std::size_t operator()(
const T& x)
const {
6918 return boost::pfr::hash_value(x);
6930#ifndef BOOST_PFR_IO_HPP
6931#define BOOST_PFR_IO_HPP
6954namespace boost {
namespace pfr {
6959 template <
class Stream,
class Type>
6960 using enable_not_ostreamable_t = std::enable_if_t<
6961 not_appliable<ostreamable_detector, Stream&, const std::remove_reference_t<Type>&>::value,
6965 template <
class Stream,
class Type>
6966 using enable_not_istreamable_t = std::enable_if_t<
6967 not_appliable<istreamable_detector, Stream&, Type&>::value,
6971 template <
class Stream,
class Type>
6972 using enable_ostreamable_t = std::enable_if_t<
6973 !not_appliable<ostreamable_detector, Stream&, const std::remove_reference_t<Type>&>::value,
6977 template <
class Stream,
class Type>
6978 using enable_istreamable_t = std::enable_if_t<
6979 !not_appliable<istreamable_detector, Stream&, Type&>::value,
6990template <
class Char,
class Traits,
class T>
6991enable_not_ostreamable_t<std::basic_ostream<Char, Traits>, T> operator<<(std::basic_ostream<Char, Traits>& out, io_impl<T>&& x) {
6992 return out << boost::pfr::io_fields(std::forward<T>(x.value));
6995template <
class Char,
class Traits,
class T>
6996enable_ostreamable_t<std::basic_ostream<Char, Traits>, T> operator<<(std::basic_ostream<Char, Traits>& out, io_impl<T>&& x) {
6997 return out << x.value;
7000template <
class Char,
class Traits,
class T>
7001enable_not_istreamable_t<std::basic_istream<Char, Traits>, T> operator>>(std::basic_istream<Char, Traits>& in, io_impl<T>&& x) {
7002 return in >> boost::pfr::io_fields(std::forward<T>(x.value));
7005template <
class Char,
class Traits,
class T>
7006enable_istreamable_t<std::basic_istream<Char, Traits>, T> operator>>(std::basic_istream<Char, Traits>& in, io_impl<T>&& x) {
7007 return in >> x.value;
7027auto io(T&& value)
noexcept {
7028 return detail::io_impl<T>{std::forward<T>(value)};
7039#ifndef BOOST_PFR_DETAIL_TRAITS_FWD_HPP
7040#define BOOST_PFR_DETAIL_TRAITS_FWD_HPP
7043namespace boost {
namespace pfr {
7045template<
class T,
class WhatFor>
7046struct is_reflectable;
7058#ifndef BOOST_PFR_TRAITS_HPP
7059#define BOOST_PFR_TRAITS_HPP
7067#ifndef BOOST_PFR_DETAIL_POSSIBLE_REFLECTABLE_HPP
7068#define BOOST_PFR_DETAIL_POSSIBLE_REFLECTABLE_HPP
7071#include <type_traits>
7073namespace boost {
namespace pfr {
namespace detail {
7076template <
class T,
class WhatFor>
7077constexpr decltype(is_reflectable<T, WhatFor>::value) possible_reflectable(
long)
noexcept {
7078 return is_reflectable<T, WhatFor>::value;
7081#if BOOST_PFR_ENABLE_IMPLICIT_REFLECTION
7083template <
class T,
class WhatFor>
7084constexpr bool possible_reflectable(
int)
noexcept {
7085# if defined(__cpp_lib_is_aggregate)
7086 using type = std::remove_cv_t<T>;
7087 return std::is_aggregate<type>();
7095template <
class T,
class WhatFor>
7096constexpr bool possible_reflectable(
int)
noexcept {
7108#include <type_traits>
7115namespace boost {
namespace pfr {
7128template<
class T,
class WhatFor>
7129struct is_reflectable { };
7133template<
class T,
class WhatFor>
7134struct is_reflectable<const T, WhatFor> : boost::pfr::is_reflectable<T, WhatFor> {};
7136template<
class T,
class WhatFor>
7137struct is_reflectable<volatile T, WhatFor> : boost::pfr::is_reflectable<T, WhatFor> {};
7139template<
class T,
class WhatFor>
7140struct is_reflectable<const volatile T, WhatFor> : boost::pfr::is_reflectable<T, WhatFor> {};
7144template<
class T,
class WhatFor>
7145using is_implicitly_reflectable = std::integral_constant< bool, boost::pfr::detail::possible_reflectable<T, WhatFor>(1L) >;
7149template<
class T,
class WhatFor>
7150constexpr bool is_implicitly_reflectable_v = is_implicitly_reflectable<T, WhatFor>::value;