Error: WndProc - nothrow
monarch_dodra
monarchdodra at gmail.com
Sun Sep 16 14:31:51 PDT 2012
On Sunday, 16 September 2012 at 21:12:42 UTC, deed wrote:
> I did, but then I am not able to use writeln for debugging.
> Is this restriction something new?
nothrow just means the function itself should not *exit* with an
exception. It is still legally allowed to call a throwing
function, provided promises to handles (catche) any thrown
exception. How it deals with the exception (silence/error) is up
to it. For example:
--------
void foo() nothrow
{
try
{
writeln("hello world!");
}
catch(Exception) { } //silence
//doStuff
}
--------
Of course, the "try catch do nothing" writting can get old, so
you can use std.exception's "collectException" too*;
--------
void foo() nothrow
{
collectException(writeln("hello world!"));
//doStuff
}
--------
*Though for me, the compiler sometimes still complains.
Or better yet, you *could* write a "debugWriteln()", which is
marked as @trusted nothrow:
--------
@trusted nothrow
void debugWriteln(Args...)(Args args) nothrow
{
try{writeln(args);}catch(Exception){};
}
void foo() nothrow
{
debugWriteln("hello world!");
//doStuff
}
--------
The @trusted is so that it can also be used inside safe functions
(which will exhibit the same issue). With this, you can log in
any function.
More information about the Digitalmars-d-learn
mailing list