On 2/15/21 4:04 PM, Jack wrote:
I have to make my function nothrow because the function that calls it
(not written by me) is nothrow. So I need to wrap my code in a
try-catch() but how will I report the error message, if the toString()
from Throwable isn't nothrow? how do I get out this circular dependence?
void f() nothrow
{
import std.conv : to;
try
{
// do something
}
catch(Throwable th)
{
auto err = th.toString;
}
}
I can't use err variable, it result in error:
function object.Throwable.toString is not nothrow
obviously, insert a try-catch() within catch() is a circular dependence
and doesn't solve the problem either (even if it, I think it would be
quite ugly)
https://dlang.org/phobos/std_exception.html#assumeWontThrow
import std.exception;
auto err = assumeWontThrow(th.toString, "oops, toString threw something!");
-Steve