скрытие параметра шаблона элемента-члена

от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) как имя члена А и не компилирует этот пример.

Это распространенная ошибка?

Ответы на вопрос(1)

Ваш ответ на вопрос