Throwable, Exception, and Error

Jarrett Billingsley jarrett.billingsley at gmail.com
Sun May 3 13:36:52 PDT 2009


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.



More information about the Digitalmars-d mailing list