On 3/11/22 04:01, Andrey Zherikov wrote:
> There is some inconsistency between templates and template functions as
> this works as I want to:
> ```d
> import std.stdio;
>
> void f(int i=3)()
> {
>      writeln(i);
> }
>
> void main()
> {
>      f!1;  // 1
>      f!(); // 3
>      f;    // 3
> }
> ```

Reduced:

template T(int i = 3) {
  enum value = i;
}

void main() {
  pragma(msg, T!().value);  // Requires T!()
}

The same inconsistency exists for user-defined type templates as well:

struct S(int i = 3) {
}

void main() {
  S!() s;  // Requires S!()
}

There has been requests to remove this inconsistency. Might be in bugzilla.

Ali

Reply via email to