из temp.local:
В определении члена шаблона класса, который появляется за пределами определения шаблона класса, имя члена класса template скрывает имя шаблона-параметра любого входящего класса шаблоны (, но не шаблонный параметр члена, если член шаблон класса или функции). [Пример:
template<class T> struct A { struct B { /* ... */ }; typedef void C; void f(); template<class U> void g(U); }; template<class B> void A<B>::f() { B b; // A B, not the template parameter } template<class B> template<class C> void A<B>::g(C) { B b; // A B, not the template parameter C c; // the template parameter C, not A C }
- конец примера]
проблема заключается в том, что каждый компилятор, который я пробовал (g++, vc, icc, clang), рассматривает C в A<B>::g(C)
как имя члена A и не компилирует этот пример.
Это обычная ошибка.?