13 concept CustomClonable = concepts::TagInvocable<CloneFunction, T const&> &&
14 concepts::MaybeFallible<meta::TagInvokeResult<CloneFunction, T const&>, T>;
17 concept MemberClonable =
requires(T
const&
value) {
18 {
value.clone() } -> concepts::MaybeFallible<T>;
21 struct CloneFunction {
23 requires(concepts::CopyConstructible<T> || CustomClonable<T> || MemberClonable<T> ||
24 concepts::CreatableFrom<T, T const&>)
25 constexpr auto operator()(T
const&
value)
const {
26 if constexpr (concepts::CopyConstructible<T>) {
28 }
else if constexpr (CustomClonable<T>) {
30 }
else if constexpr (MemberClonable<T>) {
39constexpr inline auto clone = detail::CloneFunction {};
Definition any_storable.h:9
constexpr tag_invoke_detail::TagInvokeFn tag_invoke
Definition tag_invoke.h:22
constexpr auto value
Definition value.h:34
constexpr auto clone
Definition clone.h:39
constexpr auto create(Args &&... args)
Definition create.h:21
Definition any_storable.h:9