14#ifndef __cpp_pack_indexing
22 template<
class T, std::
size_t I>
25 constexpr static std::size_t index{I};
35 template<std::size_t... Is,
class... Ts>
36 requires (
sizeof...(Is) ==
sizeof...(Ts))
40 requires (std::is_default_constructible_v<Ts> && ...)
45 requires (
sizeof...(Ts) >= 1) && (std::is_copy_constructible_v<Ts> && ...)
46 : indexed_element<Ts, Is>{ts}...
50 friend auto constexpr operator<=>(
const mem_ordered_tuple&,
const mem_ordered_tuple&)
noexcept =
default;
54 template<std::
size_t I,
class T>
57 template<std::
size_t I,
class T>
63 constexpr mem_ordered_tuple()
requires (std::is_default_constructible_v<Ts> && ...) =
default;
65 constexpr explicit(!(std::convertible_to<const Ts&, Ts> && ...))
mem_ordered_tuple(
const Ts&... ts)
66 requires (
sizeof...(Ts) >= 1) && (std::is_copy_constructible_v<Ts> && ...)
71 friend auto constexpr operator<=>(
const mem_ordered_tuple&,
const mem_ordered_tuple&)
noexcept =
default;
73 template<std::size_t I,
class... Us>
74 friend constexpr mem_ordered_tuple_element_t<I, mem_ordered_tuple<Us...>>& get(mem_ordered_tuple<Us...>&)
noexcept;
76 template<std::size_t I,
class... Us>
77 friend constexpr mem_ordered_tuple_element_t<I, mem_ordered_tuple<Us...>>
const& get(mem_ordered_tuple<Us...>
const&)
noexcept;
79 template<std::size_t I,
class... Us>
80 friend constexpr mem_ordered_tuple_element_t<I, mem_ordered_tuple<Us...>>&& get(mem_ordered_tuple<Us...>&&) noexcept;
82 template<std::
size_t I, class... Us>
83 friend constexpr mem_ordered_tuple_element_t<I, mem_ordered_tuple<Us...>> const&& get(mem_ordered_tuple<Us...> const&&) noexcept;
86 template<std::
size_t I, class... Ts>
89 #ifdef __cpp_pack_indexing
90 using type = Ts...[I];
92 using type = std::tuple_element_t<I, std::tuple<Ts...>>;
97 template<std::size_t I,
class... Ts>
103 template<std::size_t I,
class... Ts>
105 constexpr const mem_ordered_tuple_element_t<I, mem_ordered_tuple<Ts...>>& get(
const mem_ordered_tuple<Ts...>& t)
noexcept {
106 return static_cast<const impl::indexed_element<mem_ordered_tuple_element_t<I, mem_ordered_tuple<Ts...
>>, I>&>(t).value;
109 template<std::size_t I,
class... Ts>
111 constexpr mem_ordered_tuple_element_t<I, mem_ordered_tuple<Ts...>>&& get(mem_ordered_tuple<Ts...>&& t)
noexcept {
112 return static_cast<impl::indexed_element<mem_ordered_tuple_element_t<I, mem_ordered_tuple<Ts...
>>, I>&&>(t).value;
115 template<std::size_t I,
class... Ts>
117 constexpr const mem_ordered_tuple_element_t<I, mem_ordered_tuple<Ts...>>&& get(
const mem_ordered_tuple<Ts...>&& t)
noexcept {
118 return static_cast<const impl::indexed_element<mem_ordered_tuple_element_t<I, mem_ordered_tuple<Ts...
>>, I>&&>(t).value;
Definition: MemOrderedTuple.hpp:24
Definition: MemOrderedTuple.hpp:33
Definition: MemOrderedTuple.hpp:55
Definition: MemOrderedTuple.hpp:62