Рассмотрим следующий код:
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
, который вызовет функцию-член?