51template <
template <
typename...>
class CompT,
typename... C>
61 sfinae(b, obj, 0, std::forward<Arg>(arg));
66 template <
typename Up,
typename Arg>
67 auto sfinae(
bool& b, Up& obj,
int, Arg&& arg)
68 ->
decltype(obj.derive(arg.template get_component<C>()...), void())
70 b = obj.derive(arg.template get_component<C>()...);
73 template <
typename Up,
typename Arg>
74 void sfinae(
bool&, Up&,
long, Arg&&)
94 using derived_t =
typename std::tuple_element<Idx, derived_tuple_t>::type;
97 template <
typename... Args>
100 template <typename Arg, size_t N = std::tuple_size<derived_tuple_t>::value,
101 std::enable_if_t<N != 0> = 0>
107 sfinae(obj, 0, 0, std::forward<Arg>(arg));
110 template <
template <
typename...>
class BundleT,
typename... Args>
114 constexpr auto N = std::tuple_size<derived_tuple_t>::value;
117 sfinae(obj, 0, 0, arg);
122 template <
typename Up,
size_t... Idx,
typename... Args>
126 fold_derive<derived_t<Idx>>(b, obj, std::forward<Args>(args)...));
131 template <
typename Up,
typename... Args>
132 auto sfinae(Up& obj,
int,
int, Args&&... args)
133 ->
decltype(obj.derive(std::forward<Args>(args)...), void())
135 obj.derive(std::forward<Args>(args)...);
139 template <
typename Up,
typename... Args>
140 auto sfinae(Up& obj,
int,
long, Args&&...) ->
decltype(obj.derive(), void())
146 template <
typename Up,
typename... Args>
147 void sfinae(Up&,
long,
long, Args&&...)
155template <
typename Tp>
156template <
typename... Args>
159 sfinae(obj, 0, 0, std::forward<Args>(args)...);
std::make_integer_sequence< size_t, Num > make_index_sequence
Alias template make_index_sequence.
std::integer_sequence< size_t, Idx... > index_sequence
Alias template index_sequence.
The declaration for the types for operations without definitions.
Include the macros for operations.
Declare the operations types.
derive(type &obj, Arg &&arg)
(derive) private typename std::tuple_element< Idx, derived_tuple_t >::type derived_t
derive(type &obj, BundleT< Args... > &arg)
derive(type &obj, Args &&... args)
TIMEMORY_DELETED_OBJECT(fold_derive) template< typename Up
std::tuple< type_list<> > type
#define TIMEMORY_DELETED_OBJECT(NAME)
#define TIMEMORY_FOLD_EXPRESSION(...)
typename typename typename