Template argument deduction and default args

John Colvin via Digitalmars-d digitalmars-d at puremagic.com
Thu Jul 24 02:37:18 PDT 2014


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.


More information about the Digitalmars-d mailing list