how to make this function nothrow?
Ali Çehreli
acehreli at yahoo.com
Mon Feb 15 21:21:56 UTC 2021
On 2/15/21 1: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?
I understand that the caller is not written by you but I hope it at
least expects an 'int' code from f(). The following "last error" is a
common way for no-exception languages like C. I put the fprintf in g()
but you can put it at a higher level that you control. You can print
fLastError when g() fails.
string fLastError;
int f() nothrow
{
import std.conv : to;
fLastError = null;
try {
"hi".to!int;
} catch(Throwable th) {
import std.format;
fLastError = __FUNCTION__ ~ " failed: " ~ th.msg;
return 1;
}
return 0;
}
int g() nothrow {
const err = f();
if (err) {
import core.stdc.stdio : fprintf, stderr;
fprintf(stderr, "%.*s\n", cast(int)fLastError.length, fLastError.ptr);
}
return err;
}
int main() {
return g();
}
Ali
More information about the Digitalmars-d-learn
mailing list