struct meow { void f(int, char, float) { } }; template void test() { using FTypeTraits = function_traits; static_assert(typename FTypeTraits::arity() == 3, "fail"); static_assert(std::is_same(), "fail"); static_assert(std::is_same, int>(), "fail"); static_assert(std::is_same, char>(), "fail"); static_assert(std::is_same, float>(), "fail"); } void test1() { using FType = void(int, char, float); test(); } void test2() { using FType = function_type::type; test(); } void test3() { using FType = function_type::type; test(); } void test4() { using FType = function_type>::type; test(); }