12template <
typename Function>
21template <
typename Result,
typename Class,
typename... Args>
24 using type = boost::mp11::mp_list<Args...>;
28template <
typename Result,
typename Class,
typename... Args>
31 using type = boost::mp11::mp_list<Args...>;
35template <
typename Result,
typename... Args>
38 using type = boost::mp11::mp_list<Args...>;
42template <
typename Function>
44 std::type_identity<boost::mp11::mp_transform<
48template <
typename Function>
57template <
typename Result,
typename Class,
typename... Args>
64template <
typename Result,
typename Class,
typename... Args>
71template <
typename Result,
typename... Args>
82template <
typename Object,
84 typename... MemberFunctionArgumentTypesPlain>
86 boost::mp11::mp_list<MemberFunctionArgumentTypesPlain...> ,
91 decltype(&std::decay_t<Object>::operator())>::type
98template <
typename Result,
102 typename... MemberFunctionArgumentTypesPlain>
104 boost::mp11::mp_list<MemberFunctionArgumentTypesPlain...> ,
105 Result (Object::*m)(Args...),
114template <
typename Result,
118 typename... MemberFunctionArgumentTypesPlain>
120 boost::mp11::mp_list<MemberFunctionArgumentTypesPlain...> ,
121 Result (Object::*m)(Args...),
130template <
typename Result,
134 typename... MemberFunctionArgumentTypesPlain>
136 boost::mp11::mp_list<MemberFunctionArgumentTypesPlain...> ,
137 Result (Object::*m)(Args...)
const,
146template <
typename Result,
149 typename... FunctionArgumentTypesPlain>
151 boost::mp11::mp_list<FunctionArgumentTypesPlain...> ,
152 Result (*fct)(Args...),
158template <
typename Function,
typename... PassedArgsTuples>
169template <
typename Result,
171 typename... DeclaredArgs,
173 typename... PassedArgsTuples>
181 std::remove_cvref_t<PassedArgsTuples>...>
::type;
185template <
typename Result,
187 typename... DeclaredArgs,
188 typename... ClassAndPassedArgsTuples>
190 ClassAndPassedArgsTuples...>
193 ClassAndPassedArgsTuples...>
198template <
typename Result,
typename... DeclaredArgs,
typename... Tuples>
202 std::remove_cvref_t<Tuples>...>
::type;
215template <
typename Function,
typename... Args>
221 using FunctionPlain = std::decay_t<Function>;
222 using FlattenedTuple =
224 using FlattenedTupleOfPlainTypes =
225 mp_transform<std::remove_cvref_t, FlattenedTuple>;
229 "The types of all elements of all passed tuples must be unique.");
231 using FunctionArgumentTypesPlain =
236 "The argument types of the function to be called must be unique.");
239 std::forward<Function>(f),
240 std::forward<Args>(args)...);
252template <
typename Function,
typename... Tuples>
253auto apply(Function& f, Tuples&... ts) ->
256 static_assert(boost::mp11::mp_similar<std::tuple<>,
257 std::remove_cv_t<Tuples>...>::value,
258 "In the argument ts... there must be only std::tuple's.");
269template <
typename Function,
typename... Tuples>
270auto eval(Function& f, Tuples&... ts) ->
273 static_assert(boost::mp11::mp_similar<std::tuple<>,
274 std::remove_cv_t<Tuples>...>::value,
275 "In the argument ts... there must be only std::tuple's.");
289template <
typename Functions,
typename... Tuples>
292 boost::mp11::tuple_for_each(fs, [&ts...](
auto& f) { eval(f, ts...); });
auto unpackAndInvoke(boost::mp11::mp_list< MemberFunctionArgumentTypesPlain... >, Object &&o, Tuples &... ts) -> typename GetFunctionReturnType< decltype(&std::decay_t< Object >::operator())>::type
auto applyImpl(Function &&f, Args &&... args) -> typename detail::GetFunctionReturnType< std::decay_t< Function > >::type
std::type_identity< boost::mp11::mp_transform< std::remove_cvref_t, typename GetFunctionArgumentTypes< Function >::type > > GetFunctionArgumentTypesPlain
auto apply(Function &f, Tuples &... ts) -> typename detail::GetFunctionReturnType< std::decay_t< Function > >::type
auto & get(Tuples &... ts)
void evalAllInOrder(Functions &fs, Tuples &... ts)
auto eval(Function &f, Tuples &... ts) -> typename detail::GetFunctionReturnType< decltype(&Function::eval)>::type
constexpr bool mp_is_set_v
typename detail::GetFlattenedTupleTypes< std::remove_cvref_t< PassedArgsTuples >... >::type type
typename detail::GetFlattenedTupleTypes< std::remove_cvref_t< Tuples >... >::type type
boost::mp11::mp_list< Args... > type
boost::mp11::mp_list< Args... > type
boost::mp11::mp_list< Args... > type