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?