Consider the following code: *** PROGRAM project1;
{$mode objfpc} {$longstrings on} // see output below {$modeswitch advancedrecords} USES Variants, Generics.Collections, SysUtils; TYPE TRecord = PACKED RECORD FID: NativeUInt; FKey: String; CONSTRUCTOR Create (AID: NativeUInt; AKey: String); END; CONSTRUCTOR TRecord.Create (AID: NativeUInt; AKey: String); BEGIN FID := AID; FKey := UpperCase (AKey); END; VAR Dict: SPECIALIZE TDictionary<TRecord,Variant>; i: SPECIALIZE TPair<TRecord,Variant>; BEGIN Dict := SPECIALIZE TDictionary<TRecord,Variant>.Create; Dict.Add (TRecord.Create (1, 'test'), 1); FOR i IN Dict DO Writeln (i.Key.FID, #9, i.Key.FKey, #9, i.Value); // ^^^ 1 TEST 1 // -> so the entry is ok! Writeln (Dict.ContainsKey (TRecord.Create (1, 'test'))); // ^^^ with longstrings on -> FALSE // with longstrings off -> TRUE Writeln (Dict.ContainsKey (TRecord.Create (1, 'TEST'))); // ^^^ always FALSE Dict.Free; END. *** I'm very confused... I have no idea if I'm overseeing something or this is a bug in generics.collections or in the compiler. My system is: Lazarus 2.2.0 (64 bit), FPC 3.2.2 (64 bit) on Windows 8.1 (64 bit) _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal