Dieser Code wird kompiliert und ausgeführt, wobei int
:
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
.
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.