Я видел это недавно:
template <class U> struct ST
{
...
};
template <class U, class V>
struct ST<U V::*>
{
...
};
Я предполагаю, что второй шаблон является специализацией первого.
Но какова семантика U V::*
???
Это означает «указатель на член класса V
где тип члена U
«. Например,
struct X
{
int x = 0;
};
// ...
int X::*p = &X::x; // <== Declares p as pointer-to-member
ST<decltype(&X::x)> s; // <== Will instantiate your template specialization,
// with U = int and V = X
ST<int X::*> t; // <== Will instantiate your template specialization,
// with U = int and V = X
Других решений пока нет …