<div dir="ltr">For example, consider the following code, that implements a generic "memcpy"-style procedure using a static advanced-record method:<div><br></div><div>program Example;<br><br>{$mode Delphi}<br><br>type<br>  TMem<T> = record<br>  public type<br>    PT = ^T;<br>  public<br>    class procedure Copy(Dest: PT; Src: PT; Len: PtrUInt); static; inline;<br>  end;<br><br>  class procedure TMem<T>.Copy(Dest: PT; Src: PT; Len: PtrUInt);<br>  begin<br>    while Len > 0 do begin<br>      Dest^ := Src^;<br>      Inc(Dest);<br>      Inc(Src);<br>      Dec(Len);<br>    end;<br>  end;<br><br>type<br>  String4 = String[4];<br><br>var<br>  X: TArray<String4> = ['AAAA', 'BBBB', 'CCCC', 'DDDD', 'EEEE'];<br>  Y: TArray<String4> = ['', '', '', '', ''];<br>  S: String4;<br><br>begin<br>  TMem<String4>.Copy(@Y[0], @X[0], 5);<br>  for S in Y do WriteLn(S);<br>end.<br></div><div><br></div><div>The only reason the record is necessary at all is to be able to declare "PT" as a pointer type alias to the record's overall "T".</div><div><br></div><div>Personally, I'd much rather simply write the following, if it was possible:</div><div><br></div><div>procedure MemCopy<T>(Dest: ^T; Src: ^T; Len: PtrUInt);<br>begin<br>  while Len > 0 do begin<br>    Dest^ := Src^;<br>    Inc(Dest);<br>    Inc(Src);<br>    Dec(Len);<br>  end;<br>end;<br></div><div><br></div><div>Of course, currently that's not valid code. This kind of thing is useful for more than just generics, also: it would be just as applicable to non-generic records, primitive types, e.t.c. </div><div><br></div><div>Surely I can't be the only one who has ever wanted to use a "typed pointer" without first having to declare a named alias.</div><div><br></div><div>So I guess my questions are:</div><div><br></div><div>A) How feasible is this to implement?</div><div><br></div><div>B) Is there a specific reason is has *not* been implemented previously? (Seems unlikely)</div></div>