Для следующего кода:Декларация метода изменяет значение символа
struct foo {};
struct A
{
typedef foo foo_type;
void foo();
};
GCC дает ошибку компилятора:
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 {};
^
Но лязг принимает его без ошибок компилятора. Кто прав?
Обратите внимание, что если typedef удален или изменен на typedef ::foo foo_type
, то gcc и clang принимают код.
Настоящий вопрос: * Почему * Кланг всегда прав? –
, когда нет typedef, тогда это не странно – 4pie0
@ cf16: Я не сказал, что это было. Я просто хотел указать, что, несмотря на ошибку, не упоминающую typedef, typedef имеет какое-то отношение к ошибке. – HighCommander4