...
Code Block | ||||
---|---|---|---|---|
| ||||
#include <stdexcept> #include <type_traits> struct S : std::runtime_error { S(const char *msg) : std::runtime_error(msg) {} }; static_assert(std::is_nothrow_copy_constructible<S>::value, "S must be nothrow copy constructible"); void g() { // If some condition doesn't hold... throw S("Condition did not hold"); } void f() { try { g(); } catch (S &s) { // Handle error } } |
Compliant Solution
If the exception type cannot be modified to inherit from std::runtime_error
, a data member of that type is an unexpected but a legitimate implementation strategy, as shown in this compliant solution:
...