当我编译g++
typedef的变化意味着
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不关心任何一种方式。
这是怎么发生的?并且是第二个行为标准?
它必须是警告级别,默认情况下显示为错误。与你可以有一个功能缺失返回一样,可以报告为错误或警告。一般来说,我会避免宣布A型为A。这会在以后引起混淆。 –
Grzegorz
我不知道这个标准说了些什么,但我很高兴g ++抱怨说......这很愚蠢。 –
我认为这既不愚蠢也不混淆。我经常遇到这个问题。至于警告错误转换,我不给g ++任何标志,默认情况下会转换为错误的警告? – foxcub