11 struct CreateInPlaceFunction;
13 template<
typename T,
typename... Args>
14 concept CustomCreatable =
15 concepts::TagInvocable<CreateInPlaceFunction, InPlaceType<T>, Args...> &&
16 concepts::MaybeFallible<meta::TagInvokeResult<CreateInPlaceFunction, InPlaceType<T>, Args...>, T>;
18 template<
typename T,
typename... Args>
19 concept StaticCreatable =
requires(Args&&... args) {
20 { T::create(util::forward<Args>(args)...) } -> concepts::MaybeFallible<T>;
23 struct CreateInPlaceFunction {
24 template<
typename T,
typename... Args>
25 requires(concepts::ConstructibleFrom<T, Args...> || CustomCreatable<T, Args...> || StaticCreatable<T, Args...>)
26 constexpr auto operator()(InPlaceType<T>, Args&&... args)
const {
27 if constexpr (concepts::ConstructibleFrom<T, Args...>) {
28 return T(util::forward<Args>(args)...);
29 }
else if constexpr (CustomCreatable<T, Args...>) {
32 return T::create(util::forward<Args>(args)...);
constexpr tag_invoke_detail::TagInvokeFn tag_invoke
Definition tag_invoke.h:22
constexpr auto create_in_place
Definition create_in_place.h:38
Definition any_storable.h:9
constexpr auto in_place_type
Definition in_place_type.h:12