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?

Respuestas a la pregunta(2)

Su respuesta a la pregunta