how to make this function nothrow?

Steven Schveighoffer schveiguy at gmail.com
Tue Feb 16 00:39:33 UTC 2021


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


More information about the Digitalmars-d-learn mailing list