Ich möchte das tun:
%Vor%Aber ich bekomme einen Fehler "Ausnahme-Spezifikationen sind in Typ-Aliasen nicht erlaubt." (klingelt in Version 6.1 von Xcode)
Gibt es eine Problemumgehung, um einen Alias mit einem noexcept-Spezifizierer zu erstellen?
Ich suche nach etwas, das wie von der Sprache definiert funktioniert (keine Erweiterung) für plattformübergreifende Fähigkeiten.
Der Standard verbietet ausdrücklich, dass eine Ausnahmespezifikation in einer typedef
oder einer Alias-Deklaration erscheint. Es besagt jedoch auch, dass der Ausnahmespezifizierer möglicherweise in einem Funktionszeigertyp angezeigt wird.
§15.4 / 2 [except.spec]
Eine exception-specification soll nur auf einem Funktionsdeklarator für einen Funktionstyp, Zeiger auf den Funktionstyp , Verweis auf den Funktionstyp, oder Zeiger auf Elementfunktionstyp, der der Typ der obersten Ebene einer Deklaration oder Definition ist, oder auf einen solchen Typ, der als Parameter oder Rückgabetyp in einem Funktionsdeklarator angezeigt wird. Eine exception-specification darf nicht in einer
typedef
-Deklaration oder Alias-Deklaration erscheinen.
Und wenn ein Zeiger auf Funktion eine Ausnahmespezifikation hat, dann muss diesem Funktionszeiger immer ein Funktionstyp zugewiesen werden, der eine kompatible Ausnahmespezifikation hat.
§15.4 / 5
...
Eine ähnliche Einschränkung gilt für die Zuweisung und Initialisierung von Zeigern auf Funktionen, Zeiger auf Elementfunktionen und Verweise auf Funktionen: Die Zieleinheit muss mindestens die vom Quellwert in der Zuweisung oder Initialisierung erlaubten Ausnahmen zulassen ....
Wenn Sie diese beiden Werte verwenden, können Sie die noexcept
-Spezifikation kreisförmig in den Funktionszeilentyp eingeben.
Nun können Sie einem Funktionszeiger vom Typ noexcept(true)
keine Funktion ohne function_type
Spezifikation zuweisen. clang kann den Code mit dem Fehler
Fehler: Zielausnahmebeschreibung ist keine Obermenge der Quelle
Eine Alternative zu Praetorian's Antwort, die keine Deklaration einer Variablen beinhaltet:
%Vor% unused_function
wird deklariert, aber nicht definiert.
Tags und Links c++ c++11 noexcept function-pointers