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 - [email protected]
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal