{ %NORUN } program tw30524b; {$MODE objfpc} {$modeswitch advancedrecords} {uses Generics.Defaults;} type generic Tuple = record Item1: T; class operator =( a, b: specialize Tuple ): Boolean; // FPC Error: Compilation raised exception internally class operator <>( a, b: specialize Tuple ): Boolean; end; TTuple = record generic class function Create( Item1: T ): specialize Tuple; overload; static; end; generic class function TTuple.Create( Item1: T ): specialize Tuple; begin Result.Item1 := Item1; end; class operator Tuple.=( a, b: specialize Tuple ): Boolean; begin Result := False;//TEqualityComparer.Default.Equals( a.Item1, b.Item1 ); end; class operator Tuple.<>( a, b: specialize Tuple ): Boolean; begin Result := not( a = b ); end; var t: specialize Tuple; begin t := TTuple.specialize Create(42); end.