This caused me a nasty debugging confusion, it’s a bug right? In the program below the two parameters passed to TBinding.Create have the same address despite being function pointers to two different class methods. Calling them both call the same method which is clearly not correct.
Free Pascal Compiler version 3.3.1 [2022/09/28] for aarch64 ======================== {$mode objfpc} {$modeswitch functionreferences} {$modeswitch advancedrecords} program test; type generic TBinding<T> = record private type TGetter = reference to function: T; TSetter = reference to procedure(newValue: T); private getter: TGetter; setter: TSetter; public constructor Create(_getter: TGetter; _setter: TSetter); end; constructor TBinding.Create(_getter: TGetter; _setter: TSetter); begin getter := _getter; setter := _setter; // Same address for both! writeln(HexStr(getter)); writeln(HexStr(setter)); end; type TMyClass = class procedure SetSelection(newValue: Integer); function GetSelection: Integer; procedure AfterConstruction; override; end; function TMyClass.GetSelection: Integer; begin end; procedure TMyClass.SetSelection(newValue: Integer); begin end; procedure TMyClass.AfterConstruction; begin specialize TBinding<Integer>.Create(@GetSelection, @SetSelection); end; begin TMyClass.Create; end. Regards, Ryan Joseph _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal