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