On Friday, 19 July 2013 at 09:06:27 UTC, JS wrote:
I would like to pass to all my templates the file and module locations where they are used(this goes into a debugging system I have come up with).

The problem is, with varadic types being passed I can't do this:

template T(T..., string file = __FILE__)

doesn't work.

I think there is no way around except to explicitly pass __FILE__... which would be a mess?

I should mention, that because file is at the end of the parameter list and it will never be supplied by the user, there should be no reason it should fail...

I think d should allow such a feature as it is more useful and necessary in some cases...

e.g.,

template A(T..., hidden string file = __FILE__, hidden string mod = __MODULE__)

only hidden parameters with default values can be used after a template type tuple.


if I try to use a mixin in some way, dmd crashes:


import std.stdio, std.cstream;


template TT(T...)
{
        enum TT = "T(__FILE__, __MODULE__)";
}
template T(string file, string mod, T...)
{
        enum T = file~"\n"~mod;
}
void main(string[] argv)
{
        writeln(mixin(TT!()));
        din.getc();
}

Reply via email to