--- Comment #2 from RazvanN ---
(In reply to Mathias LANG from comment #1)
> Edited the issue title to make the current problem more obvious.
> The original code uses ranges access to trigger an exception, which are
> errors (not exception in D2).
> The actual bug, can be illustrated by those 2 files:
> / t1.d /
> module t1;
> import t2;
> import std.stdio;
> void main()
> mixin mixinT2!();
> / t2.d /
> module t2;
> template mixinT2()
> void testT2()
> throw new Exception("FromT2");
> catch(Exception e)
> writefln("T2: caught exception in %s: '%s'", __FILE__, e.toString);
> Running this code:
> dmd t2.d -run t1.d
> T2: caught exception in t2.d: 'object.Exception@t2.d(8): FromT2
> ??:? void t1.main().__mixin1.testT2(int) [0x102b84f17]
> ??:? _Dmain [0x102b84afb]'
> As the message shows, `__FILE__` expands to `t2.d`, both in the `writeln`
> call and the default parameter for `Exception` ctor.
> However, the specs currently mentions:
> > __FILE__ and __LINE__ expand to the source file name and line number at the
> > point of instantiation. The path of the source file is left up to the
> > compiler.
> It is not 100% clear to me if "point of instantiation" implies templates as
> well, and thus not 100% clear if this is a bug and/or can be solved.
"Point of instantiation" refers to the call site of a function that uses
__FILE__ as a default parameter. Even though the mixin introduces the code in
there, I like it that __FILE__/__LINE__ point to the actual declaration because
it's real code, that generated.
IMHO this bug report is invalid.