Why can't templates with default arguments be instantiated without the bang syntax?
Jacob Carlborg
doob at me.com
Thu Sep 15 09:17:36 PDT 2011
On 2011-09-15 16:46, Andrej Mitrovic wrote:
> struct Foo(T = int) {}
>
> void main()
> {
> Foo foo; // fail
> Foo!() bar; // ok
> }
>
> It would be very convenient to be able to default to one type like this.
>
> For example, in CairoD there's a Point structure which takes doubles
> as its storage type, and then there's PointInt that takes ints. The
> reason they're not both a template Point() that takes a type argument
> is because in most cases the user will use the Point structure with
> doubles, and only in rare cases Point with ints. So to simplify code
> one doesn't have to write Point!double in all of their code, but
> simply Point.
>
> If the bang syntax wasn't required in presence of default arguments
> then these workarounds wouldn't be needed.
I've wondered the same thing, why this doesn't work:
template Foo (T = int) {}
mixin Foo;
But this works:
template Foo () {}
mixin Foo;
--
/Jacob Carlborg
More information about the Digitalmars-d-learn
mailing list