57 template <
typename Arg,
typename... Args>
60 template <
typename... Args,
enable_if_t<
sizeof...(Args) == 0,
int> = 0>
63 template <
typename... Args,
64 enable_if_t<std::is_constructible<Tp, Args...>::value,
int> = 0>
65 static auto get(Args&&... args)
67 return Tp(std::forward<Args>(args)...);
70 template <
typename... Args,
enable_if_t<!std::is_constructible<Tp, Args...>::value &&
71 std::is_default_constructible<Tp>::value,
73 static auto get(Args&&...)
81 template <
typename Up,
typename... Args>
82 auto sfinae(Up& obj,
int, Args&&... args)
83 ->
decltype(Up(std::forward<Args>(args)...), void())
85 obj = Up(std::forward<Args>(args)...);
90 template <
typename Up,
typename... Args>
91 auto sfinae(Up&,
long, Args&&...) ->
decltype(void(), void())
100 template <
typename... Args>
107template <
typename Tp>
108struct construct<
std::shared_ptr<Tp>>
110 using base_type = construct<Tp>;
112 template <
typename... Args>
113 static auto get(Args&&...)
115 return std::shared_ptr<Tp>(
nullptr);
119template <
typename Tp,
typename... Deleter>
120struct construct<
std::unique_ptr<Tp, Deleter...>>
122 using base_type = construct<Tp>;
124 template <
typename... Args>
125 static auto get(Args&&...)
127 return std::unique_ptr<Tp, Deleter...>(
nullptr);
133template <
typename Tp>
134template <
typename Arg,
typename... Args>
137 sfinae(obj, 0, std::forward<Arg>(arg), std::forward<Args>(args)...);
142template <
typename Tp>
143template <
typename... Args,
enable_if_t<
sizeof...(Args) == 0,
int>>
typename std::enable_if< B, T >::type enable_if_t
Alias template for enable_if.
The declaration for the types for operations without definitions.
Include the macros for operations.
Declare the operations types.
static Tp * get(Args &&...)
The purpose of this operation class is construct an object with specific args.
TIMEMORY_DELETED_OBJECT(construct) template< typename Arg
static auto get(Args &&... args)
typename Args construct(type &obj, Arg &&arg, Args &&... args)
static auto get(Args &&...)