I added const in declarations so you get syntax error. I also disabled the 
const’s in delphi mode because it does indeed break inline specializations. Not 
sure how difficult that will be to fix or if it’s even worth it since this 
feature isn’t in delphi afaik.

https://github.com/genericptr/freepascal/tree/generic_constants

Pointless test to show the syntax:

{$mode objfpc}
{$modeswitch advancedrecords}
{$interfaces CORBA}

program generic_constants_interfaces;

type
        generic IMyInterface<T, const U> = interface
                procedure DoThis (value: T);
        end;

type
        generic THelper<T, const U> = record
                list: array[0..U-1] of T;
        end;

type
        generic TMyClass<T, const U> = class (specialize IMyInterface<T, U>)
                type
                        // todo: second param in THelper must be const also!
                        THelperType = specialize THelper<T, U>;
                public
                        helper: THelperType;
                        procedure DoThis (value: T);
        end;
        TListClass = specialize TMyClass<integer,10>;

procedure TMyClass.DoThis (value: T);
begin
        writeln('DoThis:',value, ' default: ', U);
end;

var
        c: TListClass;
begin
        c := TListClass.Create;
        c.helper.list[5] := 100;
        writeln(c.helper.list[5]);
        c.DoThis(100);
end.

Regards,
        Ryan Joseph

_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply via email to