13template<std::size_t I,
typename... Args>
14using nth_type_t = std::tuple_element_t<I, std::tuple<Args...>>;
19template<
typename... Args>
25template<
typename... Args>
32struct function_traits :
public function_traits<decltype(std::function{ std::declval<F>() })> {};
38template<
typename R,
typename... Args>
39struct function_traits<
std::function<R(Args...)>> {
40 using return_type = R;
42 using arguments_tuple_type = std::tuple<Args...>;
44 template<std::
size_t I>
47 static constexpr std::size_t arity =
sizeof...(Args);
53template<
typename... Rest>
58struct unique_types<> {};
64struct unique_types<T1> {};
70template<
class T1,
class T2>
71struct unique_types<T1, T2> {
72 static_assert(!std::is_same<T1, T2>::value,
"Types must be unique within parameter pack");
80template<
typename T1,
typename T2,
typename... Rest>
81struct unique_types<T1, T2, Rest...>
82 : unique_types<T1, T2>
83 , unique_types<T1, Rest...>
84 , unique_types<T2, Rest...> {};
Definition component.hpp:17
std::tuple_element_t< I, std::tuple< Args... > > nth_type_t
Extracts Nth type parameter from parameter pack.
Definition type_traits.hpp:14
nth_type_t< 1, Args... > second_type_t
Extracts the second type parameter in parameter pack.
Definition type_traits.hpp:26
nth_type_t< 0, Args... > first_type_t
Extracts the first type parameter in parameter pack.
Definition type_traits.hpp:20