Am Wed, 16 Apr 2014 20:32:20 +0000 schrieb "Peter Alexander" <peter.alexander...@gmail.com>:
> On Wednesday, 16 April 2014 at 20:29:17 UTC, bearophile wrote: > > Peter Alexander: > > > >> (I assume that nothrow isn't meant to be there?) > > > > In D nothrow functions can throw errors. > > Of course, ignore me :-) > > > >> You could do something like this: > >> > >> void foo() @nogc > >> { > >> static err = new Error(); > >> if (badthing) > >> { > >> err.setError("badthing happened"); > >> throw err; > >> } > >> } > > > > To be mutable err also needs to be __gshared. > > But then it isn't thread safe. Two threads trying to set and > throw the same Error is a recipe for disaster. Also: As far as I remember from disassembling C++, static variables in functions are initialized on first access and guarded by a bool. The first call to foo() would execute "err = new Error();" in that case. This code should not compile under @nogc. -- Marco