bemerkte ich, dass der Abschnitt 18.8/1 in C++ 11 und ++ 14-Standards C die folgende Erklärung in der <exception>
Header Übersicht enthalten:Wie definiert der C++ 1z-Standard die korrekte Position von Attributen in einer Template-Funktionsdeklaration?
[[noreturn]] template <class T> void throw_with_nested(T&& t);
während in der neuesten ++ 17 Entwurf C die gleiche Erklärung Heißt erscheint als
template <class T> [[noreturn]] void throw_with_nested(T&& t);
dies, dass die Syntax für die Attribute hat C++ 17 geändert oder nur, dass die ehemalige Linie war ein Fehler, der korrigiert wurde? Ich kann keine klare Beschreibung finden, wo die Attribute für Funktionsvorlagen erscheinen sollen, weder in 7.6 noch in 14.5.6. Könnte jemand bitte darauf hinweisen, wo dies definiert ist?
Praktisch ist MSVC sowohl mit der ersten als auch mit der zweiten Deklaration zufrieden, während g ++ und clang sich weigern, die erste Version zu kompilieren (letztere mit der ziemlich expliziten error: an attribute list cannot appear here
), also muss die zweite Version sowieso verwendet werden. Aber ich würde gerne wissen, ob der erste gültig ist oder ob er gültig ist oder nicht. Diese
Aber 'void throw_with_nested (T && t);' ist keine _funktionsdefinition_. Es ist eine _simple-deklaration_. (Die Schlussfolgerung ist jedoch die gleiche.) – cpplearner