typedef zmienia znaczenie

Kiedy kompiluję poniższy fragment kodug++

template<class T>
class A
{};

template<class T>
class B
{
    public:
        typedef A<T> A;
};

kompilator mi mówi

error: declaration of ‘typedef class A<T> B<T>::A’
error: changes meaning of ‘A’ from ‘class A<T>’

Z drugiej strony, jeśli zmieniętypedef do

typedef ::A<T> A;

wszystko dobrze się kompilujeg++. Clang ++ 3.1 nie obchodzi w żaden sposób.

Dlaczego to się dzieje? I czy drugi standard zachowania?

questionAnswers(2)

yourAnswerToTheQuestion