31namespace triqs::utility {
35 template <
typename F>
struct callable_traits_impl;
37 template <
typename ClassType,
typename ReturnType,
typename... Args>
struct callable_traits_impl<ReturnType (ClassType::*)(Args...) const> {
38 static constexpr int arity =
sizeof...(Args);
39 using result_type = ReturnType;
40 template <std::
size_t N>
using arg_t = std::tuple_element_t<N, std::tuple<Args...>>;
41 template <std::
size_t N>
using decay_arg_t = std::decay_t<arg_t<N>>;
44 template <
typename ClassType,
typename ReturnType,
typename... Args>
45 struct callable_traits_impl<ReturnType (ClassType::*)(Args...)> : callable_traits_impl<ReturnType (ClassType::*)(Args...) const> {};
63 template <
typename F>
struct callable_traits :
public detail::callable_traits_impl<decltype(&F::operator())> {};
Type trait for a callable type with a single, non-overloaded operator().