Рассмотрим следующий код:
template <class>
struct test: std::integral_constant<int, 0> {};
template<class R, class C, class... Args>
struct test<R(C::*)(Args...)>: std::integral_constant<int, 1> {};
template<class R, class C, class... Args>
struct test<R(*C::*)(Args...)>: std::integral_constant<int, 2> {};
template<class R, class C, class... Args>
struct test<R(**C::*)(Args...)>: std::integral_constant<int, 3> {};
template<class R, class C, class... Args>
struct test<R(C::**)(Args...)>: std::integral_constant<int, 4> {};
template<class R, class C, class... Args>
struct test<R(C::***)(Args...)>: std::integral_constant<int, 5> {};
Я совершенно не знаю, что означают (*C::*), (**C::*), (C::**) и (C::***). Я хотел бы привести пример test<decltype(f)>, чей value будет равен 2, 3, 4 и 5. Плюс, в этом случае, как синтаксис для f, который вызовет функцию-член?