23 template<
typename T,
typename Concrete>
37 template<
typename U = T,
typename Sub =
typename U::value_type>
46 return static_cast<Concrete&
> (*this);
65 template<
typename T,
typename... Tags>
68 using PKey::IndirectHolderBase::IndirectHolderBase;
71 template<
typename T,
typename... Args>
77 using Unique::IndirectHolderBase::IndirectHolderBase;
86 using NotNull::IndirectHolderBase::IndirectHolderBase;
100 template<
typename U,
typename... Tags>
113 using References::IndirectHolderBase::IndirectHolderBase;
115 template<
typename T,
typename... Tags>
121 template<
typename T,
typename... Tags>
132 template<
size_t... Fields>
135 template<
size_t... Fields>
138 template<
typename... Args>
141 template<
auto... Fields>
144 template<
typename... Args>
150 template<
typename T,
typename... Args>
164 constexpr inline static struct DefaultTag {}
Default {};
165 constexpr inline static struct IgnoreTag {}
Ignore {};
169 template<
auto... Ptrs>
172 template<
auto... Ptrs>
175 constexpr inline static struct PKeyType {}
PKey {};
typename References< Ptr >::value_type ReferencesValue_t
typename NotNull< T >::value_type NotNullValue_t
typename PKey< T, Args... >::value_type PKeyValue_t
typename Unique< T >::value_type UniqueValue_t
MemberTypeType_t< decltype(Ptr)> MemberPtrType_t
const value_type * operator->() const
IndirectHolderBase(Sub val)
IndirectHolderBase(T val)
const value_type & operator*() const
IndirectHolderBase()=default
Concrete & operator=(T val)
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)
MemberPtrType_t< Ptr > member_type
References & operator=(const PKey< T, Tags... > &key)