SSCCE моей проблемы:
template <class T> class MyClass
{
template <void (MyClass::*M)() const> struct wrapper
{
virtual void call();
};
};
template <typename T>
template <void (MyClass<T>::*M)() const>
void MyClass<T>::wrapper<M>::call()
{
}
Этот код скомпилирован в gcc, но не с ошибкой:
error: nested name specifier 'MyClass<T>::wrapper<M>::' for declaration does not refer into a class, class template or class template partial specialization
void MyClass<T>::wrapper<M>::call()
~~~~~~~~~~~~~~~~~~~~~~~~~^
в clang++. Почему?
В определении класса вызова решает проблему, я знаю. Любые шаблоны без указателя к методу отлично работают везде. Эксперименты с шаблоном /typename не имеют результата.