Wie erstelle ich einen Alias ​​für einen noexcept-Funktionszeiger?

8

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.

    
Michael Gazonda 15.12.2014, 17:23
quelle

2 Antworten

9

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.

%Vor%

Nun können Sie einem Funktionszeiger vom Typ noexcept(true) keine Funktion ohne function_type Spezifikation zuweisen. clang kann den Code mit dem Fehler

nicht kompilieren
  

Fehler: Zielausnahmebeschreibung ist keine Obermenge der Quelle

    
Praetorian 15.12.2014, 17:45
quelle
3

Eine Alternative zu Praetorian's Antwort, die keine Deklaration einer Variablen beinhaltet:

%Vor%

unused_function wird deklariert, aber nicht definiert.

    
Michael Gazonda 15.12.2014 17:53
quelle