collectException and nothrow

Casey via Digitalmars-d digitalmars-d at puremagic.com
Sun Nov 9 19:34:59 PST 2014


> Are you looking at the documentation or attempting to compile 
> code?
> collectException isn't going to be marked as nothrow, because 
> it can only be
> nothrow if it's collectException!Exception (which _is_ the 
> default), because
> it can only be nothrow if no Exceptions (be they Exception or 
> derived from
> Exception) can escape the function - e.g. 
> collectException!MyException can't
> be nothrow - and neither can stuff like collectException!Error 
> or
> collectException!AssertError. collectException _should_ be 
> inferred as
> nothrow so long as it's collectException!Exception (and
> collectException!Throwable should work as well, though I don't 
> know if it
> currently does).
>
> If I compile this code on my machine using 2.066.1:
>
>     import std.exception;
>     import std.stdio;
>
>     void func()
>     {
>         throw new Exception("hello");
>     }
>
>     void main() nothrow
>     {
>         auto e = collectException(func());
>     }
>
> it compiles just fine. So, it seems like nothrow is being 
> properly inferred
> for collectException, and I don't know what you're doing that 
> isn't working.
> Please provide a code snippet that you think should work but 
> doesn't.
>
> - Jonathan M Davis
>
>
> P.S. In the future, please post questions like this is D.learn. 
> The main
> newsgroup/mailing list/forum is for discussing the language 
> itself, not for
> asking questions about how to use it or how it works (or 
> doesn't work).
>
> - Jonathan M Davis

First, sorry about that.  I must have glossed over the d.learn 
forum.

Second, I actually did compile and run it and got the failure.  
However, reading your response, I'm not wondering if I did make a 
mistake.  In fact, I just tried it again and it did work.  
Regardless, what you said makes sense.  Thanks.


More information about the Digitalmars-d mailing list