On 24/01/18 10:01, Jonathan M Davis wrote:
On Wednesday, January 24, 2018 09:21:09 Shachar Shemesh via Digitalmars-d
wrote:
test.d(6): Error: struct test.A(int var = 3) is used as a type
Of course it is. That's how structs are used.
Program causing this:
struct A(int var = 3) {
int a;
}
void main() {
A a;
}
To resolve, you need to change A into A!(). For some reason I have not
been able to fathom, default template parameters on structs don't work
like they do on functions.
It's because in the general case, it would be ambiguous. For instance, what
would this mean?
alias B = A;
Right now, B is an alias of the template A, but if we had implicit
instantiation for types, B would be ambiguous.
So there is a reason this is an error. Fine. Is there also a reason why
the error message doesn't say "Cannot instantiate template test.A(int
var = 3) with no arguments" or something?
Right now, the error says that "Struct (something) is used as a type",
to which my instinctive response is "yeah, why is that an error?"
Shachar