Default Template Instantiation

Basile B. via Digitalmars-d digitalmars-d at puremagic.com
Mon Sep 19 12:53:27 PDT 2016


On Monday, 19 September 2016 at 19:38:37 UTC, Jonathan Marler 
wrote:
> If you have a template where:
>
> 1) All parameters are optional
> 2) The parameters cannot be deduced
>
> Would it be reasonable to instantiate the template with the 
> default parameter values? For example:
>
> template Foo(string str = "some string", T...)
> {
>     class Foo
>     {
>         // class implementation
>         this() { }
>     }
> }
>
> auto foo = new Foo!()(); // OK
> auto foo = new Foo(); // Error: cannot deduce template 
> parameters
>
> In this example, there's no way to deduce the template 
> parameters for Foo, however, since they are not specified, 
> would it be reasonable to just use the defaults?  str would be 
> "some string" and T would be empty?

My understanding of this case is that the usage of the eponymous 
member must include all the template parameters because for 
example we could have:

template Foo(string str = "some string", T...)
{
     class Foo
     {
         T[0] a;
         T[1] b;
         // class implementation
         this() { }
     }
}

The way "new Foo" is used must tells what are the parent template 
parameters.


More information about the Digitalmars-d mailing list