Đối với đoạn mã sau:Tuyên bố của phương pháp thay đổi ý nghĩa của biểu tượng
struct foo {};
struct A
{
typedef foo foo_type;
void foo();
};
GCC đưa ra một lỗi biên dịch:
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 {};
^
Nhưng vang chấp nhận nó mà không có lỗi biên dịch. Ai đúng?
Lưu ý rằng nếu typedef bị xóa hoặc thay đổi thành typedef ::foo foo_type
, cả gcc và clang sẽ chấp nhận mã.
Câu hỏi thực sự là: * Tại sao * Clang luôn đúng? –
khi không có typedef thì nó không phải là lạ – 4pie0
@ cf16: Tôi không nói đó là. Tôi chỉ muốn chỉ ra rằng, mặc dù lỗi không đề cập đến typedef, typedef có liên quan đến lỗi này. – HighCommander4