On Tuesday, 16 February 2021 at 00:39:33 UTC, Steven Schveighoffer wrote:
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

I didn't know about that function, I'll be using this one from now. Thanks!
Adam and Ali thank you guys too, helpful always

Reply via email to