Когда я компилирую следующий фрагмент с g++
template<class T>
class A
{};
template<class T>
class B
{
public:
typedef A<T> A;
};
компилятор говорит мне
error: declaration of ‘typedef class A<T> B<T>::A’
error: changes meaning of ‘A’ from ‘class A<T>’
С другой стороны, если я изменю typedef
на
typedef ::A<T> A;
все компилируется с помощью g++
. Clang++ 3.1 все равно.
Почему это происходит? И второй стандарт поведения?