function-try-block und noexcept

8

Für den folgenden Code

%Vor%

Visual Studio 14 CTP gibt die Warnung aus

  

Warnung C4297: 'X :: X': Funktion angenommen, keine Ausnahme zu werfen, aber   tut

     

Hinweis: __declspec (nothrow), throw (), noexcept (true) oder noexcept war   spezifiziert auf der Funktion

Ist das ein Missbrauch von noexcept ? Oder ist es ein Fehler im Microsoft Compiler?

    
a.lasram 08.10.2014, 22:12
quelle

1 Antwort

11
  

Oder ist es ein Fehler im Microsoft Compiler?

Nicht ganz.

Ein so genannter Function-try-Block wie dieser kann nicht verhindern, dass eine Ausnahme nach draußen gelangt. Beachten Sie, dass das Objekt niemals vollständig erstellt wird, da der Konstruktor die Ausführung nicht beenden kann. Der catch -Block muss etwas anderes werfen oder die aktuelle Ausnahme wird erneut ausgelöst ([except.handle] / 15):

  

Die aktuell behandelte Ausnahme wird erneut ausgelöst, wenn die Steuerung das Ende erreicht   eines Handlers des function-try-block eines Konstruktors oder   Destruktor.

Daraus leitet der Compiler ab, dass der Konstruktor tatsächlich werfen kann.

%Vor%

Sollte ohne Warnung kompiliert werden.

    
Columbo 08.10.2014, 22:25
quelle

Tags und Links