当我编译以下代码片段时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 不关心任何一种方式。
为什么会这样?第二个行为标准是什么?