https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117785

Hana Dusíková <hanicka at hanicka dot net> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |hanicka at hanicka dot net

--- Comment #1 from Hana Dusíková <hanicka at hanicka dot net> ---
It's not part of the wording as CWG told me to take it out. But it's very
useful when an exception is not caught to call it's `.what()` and print
resulting message as part of the error. If there is no `.what()` available,
just print it structurally.

https://compiler-explorer.com/z/Gn6xYbKoY

```c++
struct division_by_zero {
    constexpr const char * what() const noexcept {
        return "thou shall not divide by nothing 😱";
    }
};

constexpr unsigned divide(unsigned a, unsigned b) {
    if (b == 0) {
        throw division_by_zero{};
    }
    return a / b;
}

constexpr auto v = divide(3, 0);
```

Gives this error in my prototype:
```c++
<source>:14:16: error: constexpr variable 'v' must be initialized by a constant
expression
   14 | constexpr auto v = divide(3, 0);
      |                ^   ~~~~~~~~~~~~
<source>:9:9: note: unhandled exception: thou shall not divide by nothing 😱
    9 |         throw division_by_zero{};
      |         ^
```

Even further (and I'm still working on it) would be good to implement extension
which takes anything convertible to `basic_string_view` and then print it.

Note P3560R0 "Error Handling in Reflection" has std::meta::exception type with
`u8string_view what()` member.

Reply via email to