Const struct assign error messages
bearophile
bearophileHUGS at lycos.com
Fri Mar 4 16:32:05 PST 2011
Jonathan M Davis:
> Well, you just added a template into the mix.
Right. The opAssign of Tuple is:
void opAssign(R)(R rhs) if (isTuple!R)
>And since the template constraint is failing,<
This little test program shows that the template constraint of opAssign isn't needed to produce the same two error messages:
struct Foo {
int x;
void opAssign(R)(R other) {
// x = other.x;
}
}
void bar(const Foo data) {
auto d = data;
d = data; // line 9
}
void main() {}
test.d(9): Error: template test.Foo.opAssign(R) does not match any function template declaration
test.d(9): Error: template test.Foo.opAssign(R) cannot deduce template function from argument types !()(const(Foo))
The semantics of opAssign() is to assign something to the struct, even if opAssign() is templated. So I think the compiler has enough information to give a nicer error message if a struct with opAssign is const.
Thank you for your answers,
bye,
bearophile
More information about the Digitalmars-d-learn
mailing list