Iros
 
Loading...
Searching...
No Matches
create.h
Go to the documentation of this file.
1#pragma once
2
3#include "di/types/prelude.h"
6#include "di/util/forward.h"
7
8namespace di::concepts {
9template<typename T, typename... Args>
11 requires(Args&&... args) { util::create_in_place(in_place_type<T>, util::forward<Args>(args)...); };
12
13template<template<typename...> typename Template, typename... Args>
15 CreateDeducible<Template, Args...> && CreatableFrom<meta::DeduceCreate<Template, Args...>, Args...>;
16}
17
18namespace di::util {
19template<typename T, typename... Args>
21constexpr auto create(Args&&... args) {
22 if constexpr (!concepts::LanguageVoid<T>) {
23 return create_in_place(in_place_type<T>, util::forward<Args>(args)...);
24 }
25}
26
27template<template<typename...> typename Template, typename... Args>
28requires(concepts::TemplateCreatableFrom<Template, Args...>)
29constexpr auto create(Args&&... args) {
30 return create_in_place(in_place_type<meta::DeduceCreate<Template, Args...>>, util::forward<Args>(args)...);
31}
32}
33
34namespace di {
35using util::create;
36}
Definition create.h:10
Definition deduce_create.h:30
Definition core.h:128
Definition any_storable.h:9
decltype(util::deduce_create(in_place_template< Template >, util::declval< Args >()...)) DeduceCreate
Definition deduce_create.h:36
Definition vocab.h:96
constexpr auto create(Args &&... args)
Definition create.h:21
constexpr auto create_in_place
Definition create_in_place.h:38
Definition zstring_parser.h:9
constexpr auto in_place_type
Definition in_place_type.h:12
@ T
Definition key.h:29