<div dir="auto"><div><div class="gmail_quote"><div dir="ltr" class="gmail_attr">Hairy Pixels via fpc-pascal <<a href="mailto:fpc-pascal@lists.freepascal.org">fpc-pascal@lists.freepascal.org</a>> schrieb am Mi., 9. Aug. 2023, 04:59:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">I just noticed this by accident and I don't understand. Why does " x := @r; " compile? I would expect it to fail like the next line where I cast to the explicit type.<br>
<br>
type<br>
  TMyRec = record end;<br>
  PMyRec = ^TMyRec;<br>
var<br>
  x: PByte;<br>
  r: TMyRec;<br>
begin<br>
  x := @r;                // works<br>
  x := PMyRec(@r);  // fails<br>
end. </blockquote></div></div><div dir="auto"><br></div><div dir="auto">By default @ returns a *untyped* pointer that can be assigned to any pointer type. Thus is compatible with Delphi and can be controlled with the $TypedAddress directive (there's a slight exception to this when you assign a pointer to a function to a function variable (etc) or pass it to such a parameter, because the compiler has to pick the correct overload if there are multiple functions with the same name in scope). </div><div dir="auto"><br></div><div dir="auto">Regards, </div><div dir="auto">Sven </div><div dir="auto"></div><div dir="auto"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
</blockquote></div></div></div>