On Thursday, 24 July 2014 at 04:53:41 UTC, Manu via Digitalmars-d wrote:
I'm running into consistent problems with default args and argument
deduction in templates.
There seem to be 2 consistent classes of problem:
struct S(size_t len = 10)
{
ubyte[len] data;
}
S!100 x; // this works fine
S y; // this doesn't work (!)
S!() z; // this works
The template arg has a default arg, why require !() ??This causes problems in meta code, where you want to create an instance of
some T, and T may be a normal type with no template args, in which case !()
is invalid, but a template type with default args should also be
acceptable, but it doesn't work because the meta code doesn't specify !().
This opens a whole can of worms. It's very useful to be able to distinguish between templates and their instantiations. Seeing as D's alias system works on a pass-by-name system, you can't have a system where simply referring to a template instantiates it with no arguments.
Apart from anything else it would break *so* much code.