ocultamiento del parámetro de plantilla de plantilla de miembro

detemperatura local :

En la definición de un miembro de una plantilla de clase que aparece fuera de la definición de plantilla de clase, el nombre de un miembro de la plantilla de clase oculta el nombre de un parámetro de plantilla de cualquier plantilla de clase adjunta (pero no un parámetro de plantilla del miembro si el miembro es una clase o plantilla de función) [Ejemplo:

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
}

- ejemplo final]

el problema es que, cada compilador, que he probado (g ++, vc, icc, clang), trata a C enA<B>::g(C) como nombre de miembro de A y no compila ese ejemplo.

¿Es este un error común?

Respuestas a la pregunta(1)

Su respuesta a la pregunta