[fpc-pascal] Custom operators for non-record types
pascaldragon at googlemail.com
Sun Jul 1 21:41:11 CEST 2012
On 01.07.2012 17:39, JC Chu wrote:
> In Delphi mode, each custom operator has to be associated with a
> record type, and must take or return such a record. It seems that the
> OBJFPC mode doesn’t have this restriction; for example, the Math unit
> exports a custom ** on Int64, which is a simple type.
Global operator declarations were forbidden for mode Delphi as Delphi
does not support them either (you can use them in Delphi modes though
even if they were declared in non-Delphi modes). Global operators
existed in FPC before Delphi introduced their operators in records concept.
> However, I’ve been unable to define operators other than ** for
> non-record types, even if they do not conflict with the default
> interpretation. Examples include OPERATOR MOD (x, m: Double): Double
> and OPERATOR AND (x, y: Tristate): Tristate, where Tristate is an
> enumeration type.
> Is this a bug, or is there any explanation for this?
Some parameter combinations are not allowed, because certain inline
operators are already in place. I don't know their exact rulings, but
ordinals (Integer values, floating point values), enums and sets are a
bit restricted regarding overload (especially if it is a binary operator
where left and right is of such a type).
It's best you simply try whether it's supported and if not you need to
look for a different method... (or ask on the list why it's not allowed)
More information about the fpc-pascal