On Thu, 15 Sep 2011 16:46:24 +0200, Andrej Mitrovic <andrej.mitrov...@gmail.com> 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.

How would you then pass a single-argument template as a template alias
parameter?

Example:

template Foo( ) {
    template Bar( ) {
    }
}

template Baz(alias A) {
    mixin A!();
}

void main( ) {
    mixin Baz!Foo;
}

Does this mixin Foo or Bar to main's scope?

--
  Simen

Reply via email to