typedef cambia el significado
Cuando compilo el siguiente fragmento de código cong++
template<class T>
class A
{};
template<class T>
class B
{
public:
typedef A<T> A;
};
el compilador me dice
error: declaration of ‘typedef class A<T> B<T>::A’
error: changes meaning of ‘A’ from ‘class A<T>’
Por otro lado, si cambio eltypedef
a
typedef ::A<T> A;
todo se compila bien cong++
. A Clang ++ 3.1 no le importa de ninguna manera.
¿Por qué está pasando esto? ¿Y es el segundo comportamiento estándar?