Throwable, Exception, and Error
Andrei Alexandrescu
SeeWebsiteForEmail at erdani.org
Sun May 3 14:07:38 PDT 2009
Jarrett Billingsley wrote:
> On Sun, May 3, 2009 at 4:14 PM, Denis Koroskin <2korden at gmail.com> wrote:
>> PHP allows function definition like this:
>>
>> void foo(Args args, string fileName = __FILE__, int line = __LINE__)
>> {
>> // do stuff
>> }
>
> Hidden feature: D2 allows it too, at least with templates.
>
> void Throw(T : Throwable, string file = __FILE__, int line = __LINE__)(T ex)
> {
> ex.file = file;
> ex.line = line;
> throw ex;
> }
>
> void foobar()
> {
> Throw(new Exception("o hai"));
> }
>
> void main()
> {
> try
> foobar();
> catch(RangeError e)
> writefln("(%s: %d) %s", e.file, e.line, e.msg);
> }
>
> I did find a sort of bug when trying a slightly different
> implementation of this though - any kind of explicit instantiation of
> the Throw template causes the __FILE__ and __LINE__ to be evaluated in
> the scope of the template rather than at the call site.
That's intentional and is used in enforce() and a couple other places in
Phobos.
Andrei
More information about the Digitalmars-d
mailing list