dla następującego kodu:Deklaracja metody zmienia znaczenie symbolu
struct foo {};
struct A
{
typedef foo foo_type;
void foo();
};
GCC daje błąd kompilatora:
test.cpp:7:14: error: declaration of 'void A::foo()' [-fpermissive]
void foo();
^
test.cpp:1:8: error: changes meaning of 'foo' from 'struct foo' [-fpermissive]
struct foo {};
^
Ale dzyń akceptuje je bez błędów kompilatora. Kto ma rację?
Należy pamiętać, że jeśli typedef został usunięty lub zmieniony na typedef ::foo foo_type
, zarówno gcc jak i clang akceptują kod.
Prawdziwe pytanie brzmi: * Dlaczego * czy Clang zawsze ma rację? –
kiedy nie ma typedef, to nie jest dziwne – 4pie0
@ cf16: Nie powiedziałem, że to było. Chciałem tylko wskazać, że pomimo błędu, który nie wspomniał o typedef, typedef ma coś wspólnego z błędem. – HighCommander4