conversion_dispatch::accessor
// (1)
template <class F, class C, class... Os>
struct accessor {
accessor() = delete;
};
// (2)
template <class F, class C, class... Os>
requires(sizeof...(Os) > 1u && (std::is_trivial_v<accessor<F, C, Os>> && ...))
struct accessor<F, C, Os...> : accessor<F, C, Os>... {
using accessor<F, C, Os>::operator T...;
};
// (3)
template <class F, class C>
struct accessor<F, C, T() cv ref noex> {
explicit(Expl) operator T() cv ref noex;
};
Let SELF
be std::forward<accessor cv ref>(*this)
.
(1)
The default implementation of accessor
is not constructible.
(2)
When sizeof...(Os)
is greater than 1
, and accessor<F, C, Os>...
are trivial types, inherits all accessor<F, C, Os>...
types and using
their operator T
.
(3)
When sizeof...(Os)
is 1
and the only type O
in Os
is T() cv ref noex
, provides an explicit (when Expl
is true
) or implicit (when Expl
is false
) operator T()
with the same cv ref noex specifiers. accessor::operator T()
is equivalent to return proxy_invoke<C, T() cv ref noex>(access_proxy<F>(SELF))
.