37 template<
typename T,
typename Concrete>
50 :
Val_ { std::move (val) }
54 template<
typename Arg,
typename... Args>
55 requires std::constructible_from<
value_type, Arg&&, Args&&...> &&
58 :
Val_ { std::forward<Arg> (arg), std::forward<Args> (args)... }
64 Val_ = std::move (val);
65 return static_cast<Concrete&
> (*this);
86 friend constexpr bool operator== (
const Concrete& c1,
const Concrete& c2)
88 return c1.Val_ == c2.Val_;
96 friend constexpr auto operator<=> (
const Concrete& c1,
const Concrete& c2)
97 requires std::three_way_comparable<T>
99 return c1.Val_ <=> c2.Val_;
103 requires std::three_way_comparable<T>
109 template<
typename T,
typename...
Tags>
112 using PKey::IndirectHolderBase::IndirectHolderBase;
115 template<
typename T,
typename... Args>
121 using Unique::IndirectHolderBase::IndirectHolderBase;
130 using NotNull::IndirectHolderBase::IndirectHolderBase;
144 template<
typename U,
typename...
Tags>
159 using References::IndirectHolderBase::IndirectHolderBase;
161 template<
typename T,
typename...
Tags>
167 template<
typename T,
typename...
Tags>
178 template<
auto... Fields>
181 template<
auto... Fields>
184 template<
typename... Args>
187 template<
auto... Fields>
190 template<
typename... Args>
198 constexpr static struct DefaultTag {}
Default {};
199 constexpr static struct IgnoreTag {}
Ignore {};
203 template<
auto... Ptrs>
206 template<
auto... Ptrs>
209 constexpr static struct WholeType {}
Whole {};
std::conditional_t< Indirect< T >, T, WrapDirect< T > >::value_type UnwrapIndirect_t
Typelist< Args... > Constraints
Typelist< Args... > Indices
References< Ptr >::value_type ReferencesValue_t
Unique< T >::value_type UniqueValue_t
PKey< T, Args... >::value_type PKeyValue_t
NotNull< T >::value_type NotNullValue_t
Unique< NotNull< T > > UniqueNotNull
MemberTypeType_t< decltype(Ptr)> MemberPtrType_t
Concrete & operator=(value_type val)
IndirectHolderBase(Arg &&arg, Args &&... args)
friend constexpr auto operator<=>(const Concrete &c1, const Concrete &c2)
const value_type & operator*() const
IndirectHolderBase()=default
detail::UnwrapIndirect_t< T > value_type
friend constexpr bool operator==(const Concrete &c1, const Concrete &c2)
IndirectHolderBase(value_type val)
static constexpr bool IsIndirect
static constexpr struct LC::Util::oral::InsertAction::Replace::WholeType Whole
static constexpr FieldsType< Ptrs... > Fields
static constexpr struct LC::Util::oral::InsertAction::IgnoreTag Ignore
static constexpr struct LC::Util::oral::InsertAction::DefaultTag Default
References(const PKey< T, Tags... > &key)
static constexpr bool IsReferences
MemberPtrType_t< Ptr > member_type
References & operator=(const PKey< T, Tags... > &key)