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();
}