Erzwinge "noexcept" auf std :: function?

8

Dieser Code wird kompiliert und ausgeführt, wobei int :

geworfen wird %Vor%

Allerdings möchte ich, dass der Compiler die Zeile r(foo); ablehnt, weil r nur eine noexcept -Funktion übergeben soll. Der noexcept -Ausdruck wird ignoriert. Gibt es einen Weg, das zu erreichen?

Bearbeiten: Diese Frage unterscheidet sich von Soll Wissen über Nicht-Annahme-Information weitergeleitet werden, wenn man einen Funktionszeiger umgeht? , weil ich nach einer Abhilfe frage, speziell im Fall von std::function .

    
M.M 24.07.2015, 05:35
quelle

1 Antwort

1

Ich bin auch über dieses Problem gestolpert. Meine Lösung bestand darin, ein delegierendes Objekt zu verwenden (Delegieren an die std :: -Funktion). Der Delegat hat eine "no-exception" -Angabe. Es könnte noch verbessert werden (Umzug hinzugefügt, etc).

Hier geht's ...

%Vor%

Dies wird normalerweise als ein Vertrag in einer asynchronen Schnittstelle verwendet, um anzuzeigen, dass der bereitgestellte Handler z. B. nicht werfen soll:

%Vor%

Da der Client der Rückrufanbieter ist, ist NoExceptDelegate eine Zusage des Anbieters, die nicht fehlschlagen darf. Der Anbieter sollte sicherstellen, dass mindestens std :: function zur Verfügung gestellt wird, ist aufrufbar.

    
Werner Erasmus 28.07.2015, 11:29
quelle

Tags und Links