#include #include #include #include #include "test.hpp" struct foo; template struct N {}; int main() { { using f = void(N<0>, N<1>); using test = expand_args_left_t; using expect = std::tuple< N<0>, N<1>, char, int>; CT_ASSERT(std::is_same::value); } #ifndef CALLABLE_TRAITS_DISABLE_ABOMINABLE_FUNCTIONS { using f = void(N<0>, N<1>) const volatile; using test = expand_args_left_t; using expect = std::tuple< N<0>, N<1>, char, int>; CT_ASSERT(std::is_same::value); } #endif // #ifndef CALLABLE_TRAITS_DISABLE_ABOMINABLE_FUNCTIONS { using f = void(&)(N<0>, N<1>); using test = expand_args_left_t; using expect = std::tuple< N<0>, N<1>, char, int>; CT_ASSERT(std::is_same::value); } { using f = void(*)(N<0>, N<1>); using test = expand_args_left_t; using expect = std::tuple< N<0>, N<1>, char, int>; CT_ASSERT(std::is_same::value); } { using f = void(foo::*)(N<0>, N<1>); using test = expand_args_left_t; using expect = std::tuple, N<1>, char, int>; CT_ASSERT(std::is_same::value); } { using f = void(foo::*)(N<0>, N<1>) const; using test = expand_args_left_t; using expect = std::tuple, N<1>, char, int>; CT_ASSERT(std::is_same::value); } }