There are other solutions.
For example remove the current opEquals from structs, so doing == among two 
structs become a syntax error. And then add a property like @equable that when 
present beside the struct name adds a specific and correct and recursive 
opEquals to it.

@equable stuct Foo {
  int x;
}

Probably instead of @equable it's better to have an attribute that adds opHash, 
opEquals and opCmp to a struct.
This is safe, avoids most code bloat, and keeps code fast. The disadvantage is 
a that it adds a new attribute to the language.

If the user can create new attributes, then it's surely possible to define this 
attribute with D code and some compile-time reflection, keeping the language 
simple enough. There is one or more Java libs that use attributes for this 
specific purpose.

Bye,
bearophile

Reply via email to