qui suit:Ce type de retour arrière est-il légal en C++ 11?
auto (*f())() -> int;
donne une erreur en mode C 11 avec Clang disant:
error: 'auto' return without trailing return type; deduced return types are a C++14 extension
mais compilera en mode 14 C++. GCC compile sans se plaindre dans les deux modes avec -Wall -Wextra -pedantic
.
n3337 7.1.6.4/2 dit:
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 parle de la fonction déclarateurs mais je suis trop inexpérimenté pour comprendre. Quelqu'un peut-il expliquer si c'est légal dans C++ 11?
Essayez-vous de spécifier un type de retour arrière pour le pointeur de fonction 'f' renvoie? – user2357112
Je suppose que GCC a raison de le compiler. Clang de Coliru et GCC disent tous deux que c'est un int (* (*)())() '. – chris
Indépendamment du fait que la norme l'autorise, c'est aussi un bogue de compilateur. Un message d'erreur indiquant qu'un type de retour final est omis lorsqu'un type de retour final est présent est un message d'erreur incorrect. – hvd