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?
