On Sunday, 31 May 2020 at 06:28:11 UTC, mw wrote:
This is better, ... but it breaks std.traits:
void main() {
auto fields = FieldNameTuple!(Point);
writeln(fields);
}
$ ./b
varvarvar
And normally, we cannot define 2 fields with different types:
class P {
int x;
double x; // b.d(45): Error: variable b.P.x conflicts with
variable b.P.x at b.d(44)
}
With the above template we somehow tricked the compiler to be
able to do this?
Is this a loop-hole we should file a bug?
This is related to D's silent crept-in multiple inheritance
problem, a solution via language improvement is here:
https://forum.dlang.org/post/lsnhqdoyatkzbzqbs...@forum.dlang.org
I'd imagine something like this:
----------------------------------------------------------------------
class Person : NameI, AddrI {
mixin NameT!Person rename equals as name_equals;
mixin AddrT!Person rename equals as addr_equals;
bool equals(Person other) {
return this.name_equals(other) &&
this.addr_equlas(other);
}
}
----------------------------------------------------------------------