Operator Overloading - Only for Classes and Structs?
Nick Treleaven
nick at geany.org
Mon Jun 23 15:27:46 UTC 2025
On Sunday, 22 June 2025 at 15:04:27 UTC, matheus wrote:
> Hi, could someone please tell me why operador overloading
> (https://dlang.org/spec/operatoroverloading.html) is relegated
> only to classes and structs?
One reason is that it would be hard to reason about what the
operator means - for example if there is one operator overload in
module `a` and another one in `b`, that have compatible operand
types, and both imports are used in the same project for
different modules.
Restricting operator overloading to the type definition avoids
this problem.
That in itself might not be too much of a problem, but then any
expression may implicitly convert to a type that has an operator
overload defined. It can get hard to see what is going on, and
free function operator overloads would complicate this.
> "1 Operator overloading is accomplished by rewriting operators
> whose operands are class or struct objects into calls to
> specially named members. No additional syntax is used."
>
> I'd like to overload "~" to concatenate a string with a integer
> and do something else, like:
>
> auto s = "1" ~ 2;
That is already valid code, because `int` implicitly converts to
`dchar`, which can be appended to a string. E.g. `"1" ~ 42` gives
`"1*"`. (BTW I don't think integer types should implicitly
convert to character types). I trust you see how implicit
conversions can get complicated in combination with operators.
More information about the Digitalmars-d-learn
mailing list