[fpc-pascal] why can't we define class operator for old fashion object type, but ok for 'advanced record' type?

Dennis dec12 at avidsoft.com.hk
Wed Aug 15 10:59:35 CEST 2018


I was trying to use a generic class TDictionary<T>  with type T. This 
class has a method that compares a variable of T with another one.

When I specialize a class using this TDictionary with a type:

TSecurity = object
   ....
end;


e.g. TNewDict = class(TDictionary<String, TSecurity>);

it raise a compiler complaining that my TSecurity type has no operator = 
defined.

But when I try to add like this:

TSecurity = object
   ....
class operator =  (constref aLeft, aRight: TSecurity ): Boolean; 
//<---compiler Error: Procedure or Function expected

end;


However, the following is OK
{$MODESWITCH advancedrecords}
TSecurity = record
   ....
class operator =  (constref aLeft, aRight: TSecurity ): Boolean; //<---OK

end;


Why class operator is accepted for advanced records but not old fashion 
object???

I cannot use advance record because it does have inherit methods. I need 
method inheritance for my object.

Dennis



More information about the fpc-pascal mailing list