Sau đây:Loại trả về theo sau có hợp pháp trong C++ 11 không?
auto (*f())() -> int;
đưa ra một lỗi trong C++ chế độ 11 với Clang nói:
error: 'auto' return without trailing return type; deduced return types are a C++14 extension
nhưng biên dịch trong chế độ C++ 14. GCC biên dịch mà không cần phàn nàn ở cả hai chế độ với -Wall -Wextra -pedantic
.
n3337 7.1.6.4/2 nói:
The auto type-specifier may appear with a function declarator with a trailing-return-type (8.3.5) in any context where such a declarator is valid.
8.3.5p2 nói về declarators chức năng nhưng tôi quá thiếu kinh nghiệm để con nó ra. Bất cứ ai có thể giải thích nếu nó hợp pháp trong C + + 11?
Bạn đang cố gắng xác định loại trả về theo sau cho con trỏ hàm 'f' trả về? – user2357112
Tôi đoán rằng GCC có quyền biên dịch nó. Cả Clang và GCC của Coliru đều cho rằng đó là 'int (* (*)())()'. – chris
Bất kể tiêu chuẩn cho phép nó, nó cũng khá rõ ràng là một lỗi trình biên dịch. Một thông báo lỗi nói rằng một kiểu trả về đuôi được bỏ qua khi có một kiểu trả về đuôi là một thông báo lỗi xấu. – hvd