[fpc-pascal] Operator overload resolution with arrays
Martok
listbox at martoks-place.de
Mon Feb 5 13:01:15 CET 2018
Hi all,
I'm having some logical problems with fgl generic lists and operator overloads.
This is essentially the same issue as discussed last year on the forum as
<http://forum.lazarus.freepascal.org/index.php?topic=36089.0>.
I know how to work around it, just... it doesn't seem very consistent.
Take the following simple declaration:
--------
type
TTriangleIndex = array[0..2] of Integer;
TFacetList = specialize TFPGList<TTriangleIndex>;
operator = (A, B: TTriangleIndex): boolean;
--------
This will not work:
fgl.pp(948,50) Error: Operator is not overloaded: "TTriangleIndex" =
"TTriangleIndex"
So, for arrays, the overloaded operator is not found, even though it is in the
same interface section.
However, this arcane beast would work (although Codetools bail on the double
specialization):
--------
TTriangleIndex = array[0..2] of Integer;
generic TArrayContainer<T> = record
x: T;
class operator = (A, B: specialize TArrayContainer<T>): boolean;
// mimic 'default' attribute on x
class operator := (A: T): specialize TArrayContainer<T>; inline;
class operator := (A: specialize TArrayContainer<T>): T; inline;
end;
TFacetList = specialize TFPGList<specialize TArrayContainer<TTriangleIndex>>;
--------
Class operators defined on the used type itself are taken into account. That
feels a bit inconsistent, given that their scope is equivalent in any other use?
I know it's been like that forever, but... should it be?
--
Regards,
Martok
Ceterum censeo b32079 esse sanandam.
More information about the fpc-pascal
mailing list