how to make this function nothrow?

Jack jckj33 at gmail.com
Mon Feb 22 21:44:47 UTC 2021


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


More information about the Digitalmars-d-learn mailing list