On Friday, 19 July 2013 at 15:32:25 UTC, Jonathan M Davis wrote:
On Friday, July 19, 2013 11:06:26 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?
As long as you're using a templated function and thus can use
IFTI (implicit
function template instantation) instead of giving the template
arguments
explicitly, you don't have to put the template parameters with
default
arguments last. You'd just have to put it after the variadic
parameter if you
intended to give the template arguments explicitly. So, as long
as you don't
have to give the template arguments explicitly, you're fine. If
you need to
give them explicitly though, I think that you're stuck.
- Jonathan M Davis
I don't at all see how this could possibly work. The order of
parameters is crucial. With a type tuple it may be different but
I just tried and it didn't work:
template A(string f = __FILE__, T...)
{
pragma(msg, f);
enum A = T.stringof;
}
called with A!(int, double) and got an error about argument type
mismatch.
So unless you are talking about something else or there is some
"trick" involved I don't think this works...