này biên dịch trong clang nhưng không phải trong gcc:Tại sao tôi không thể truy cập đối số mặc định trong trình khởi tạo trong gcc?
void f(int x = decltype(x){});
Các lỗi trong gcc nói rằng x
không được khai báo trong phạm vi này nhưng theo 3.3.2/1 biến x
phải ở trong phạm vi:
Điểm khai báo tên ngay sau người khai báo hoàn chỉnh (khoản 8) và trước khi người khai báo (nếu có), ngoại trừ như được nêu dưới đây. [Ví dụ:
int x = 12; { int x = x; }
Ở đây,
x
thứ hai được khởi tạo với giá trị riêng (không xác định). - ví dụ kết thúc]
Vậy clang có đúng không? Có nên truy cập x
trong bộ khởi tạo của riêng nó không?
PS: int x = x
làm tham số không thành công trong cả hai trình biên dịch nhưng tôi không biết tại sao.
Vậy điều đó có nghĩa là có lỗi trong Clang? Nó có nên được báo cáo không? –
@templateboy Tiêu chuẩn quá không chính xác và nên cho phép các trường hợp xảy ra tham số trong toán hạng chưa được đánh giá của đối số mặc định. – Columbo
@templateboy: Có thể cho rằng Clang hoặc tiêu chuẩn nên được sửa. Không có lý do chính đáng để cấm nó trừ khi nó được đánh giá. –