24template<
typename... Types>
26 :
public TupleImpl<meta::IndexSequenceFor<Types...>, Types...>
39 constexpr Tuple(Types
const&... args)
43 template<
typename... Args>
44 requires(
sizeof...(Types) ==
sizeof...(Args) &&
sizeof...(Types) > 0 &&
48 template<
typename Tup>
83 template<concepts::TupleLike Tup>
85 requires(Base& self, Tup&& other) { Base::static_assign(self, util::forward<Tup>(other)); })
86 constexpr auto operator=(Tup&& other) ->
Tuple& {
91 template<concepts::TupleLike Tup>
93 requires(Base
const& self, Tup&& other) { Base::static_assign(self, util::forward<Tup>(other)); })
94 constexpr auto operator=(Tup&& other)
const ->
Tuple const& {
100 template<
typename... Other>
101 requires(
sizeof...(Types) ==
sizeof...(Other) &&
110 template<
typename... Other>
111 requires(
sizeof...(Types) ==
sizeof...(Other) &&
115 if constexpr (
sizeof...(Types) == 0) {
116 return di::strong_ordering::equal;
122 if constexpr (index ==
sizeof...(Types) - 1) {
123 return di::strong_ordering::equal;
132 template<concepts::DerivedFrom<Tuple> Self = Tuple>
134 return sizeof...(Types);
139 template<types::
size_t index, concepts::DerivedFrom<Tuple> Self = Tuple>
145 template<types::
size_t index, concepts::DerivedFrom<Tuple> Self = Tuple>
151 template<types::
size_t index,
typename Self>
160 template<
typename T,
typename Self = Tuple>
164 constexpr auto index = meta::Lookup<T,
meta::List<Types...>>;
171template<
typename... Types>
177 template<
typename...>
180 template<
typename T, concepts::CommonWith<T> U>
183 struct HasCommonType {
184 template<
typename... Types>
188 template<
typename...>
191 template<
typename T, concepts::CommonWith<T> U>
194 struct HasCommonReference {
195 template<
typename... Types>
200template<concepts::TupleLike A, concepts::TupleLike B>
209template<concepts::TupleLike A, concepts::TupleLike B,
template<
typename>
typename AQual,
210 template<
typename>
typename BQual>
constexpr Tuple()=default
constexpr friend auto tag_invoke(types::Tag< util::get_in_place >, Constexpr< index >, Self &&self) -> meta::Like< Self, meta::TupleElement< Self, index > > &&
Definition tuple.h:153
constexpr Tuple(Tuple &&)=default
constexpr auto operator=(Tuple const &other) -> Tuple &requires(concepts::CopyAssignable< Types > &&...)
Definition tuple.h:55
constexpr auto operator=(Tuple &&other) -> Tuple &requires(concepts::MoveAssignable< Types > &&...)
Definition tuple.h:69
constexpr friend auto tag_invoke(types::Tag< tuple_size >, types::InPlaceType< Self >) -> types::size_t
Definition tuple.h:133
constexpr ~Tuple()=default
constexpr Tuple(Types const &... args)
Definition tuple.h:39
constexpr Tuple(Tup &&value)
Definition tuple.h:51
constexpr friend auto tag_invoke(types::Tag< tuple_element >, types::InPlaceType< Self const >, Constexpr< index >) -> InPlaceType< meta::At< TypeList, index > const >
Definition tuple.h:146
constexpr friend auto operator<=>(Tuple const &a, Tuple< Other... > const &b) -> meta::CommonComparisonCategory< meta::CompareThreeWayResult< Types, Other >... >
Definition tuple.h:113
constexpr auto operator=(Tuple &&other) const -> Tuple const &requires(concepts::AssignableFrom< Types const &, Types > &&...)
Definition tuple.h:76
constexpr Tuple()=default
constexpr friend auto tag_invoke(types::Tag< tuple_element >, types::InPlaceType< Self >, Constexpr< index >) -> InPlaceType< meta::At< TypeList, index > >
Definition tuple.h:140
constexpr Tuple(Tuple const &)=default
constexpr auto operator=(Tuple const &other) const -> Tuple const &requires(concepts::CopyAssignable< Types const > &&...)
Definition tuple.h:62
constexpr friend auto tag_invoke(types::Tag< util::get_in_place >, InPlaceType< T >, Self &&self) -> meta::Like< Self, T > &&
Definition tuple.h:162
Definition operations.h:19
Definition operations.h:11
Definition operations.h:37
Definition operations.h:34
Definition operations.h:24
Definition operations.h:114
Definition operations.h:46
constexpr auto unpack
Definition unpack.h:24
constexpr auto ycombinator
Definition ycombinator.h:63
std::size_t size_t
Definition size_t.h:12
di::meta::Decay< decltype(T)> Tag
Definition tag_invoke.h:28
constexpr auto get(T &&value) -> decltype(auto)
Definition get.h:8
constexpr auto forward_as_base(meta::RemoveReference< Derived > &derived) -> meta::Like< meta::RemoveReference< Derived > &, Base > &&
Definition forward_as_base.h:12
constexpr auto construct_tuple_impl_from_tuplelike
Definition tuple_impl.h:21
Tuple(Types...) -> Tuple< Types... >
constexpr auto construct_tuple_impl_valuewise
Definition tuple_impl.h:17
Definition any_storable.h:9
constexpr auto c_
A value of type Constexpr<val>.
Definition constexpr.h:252
Definition in_place_type.h:5
Definition add_member_get.h:10
constexpr bool has_common_reference_helper
Definition tuple.h:189
constexpr bool has_common_type_helper
Definition tuple.h:178