<div dir="auto"><div><div class="gmail_quote"><div dir="ltr" class="gmail_attr">Ondrej Pokorny via fpc-devel <<a href="mailto:fpc-devel@lists.freepascal.org">fpc-devel@lists.freepascal.org</a>> schrieb am Do., 2. Feb. 2023, 10:06:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On 02.02.2023 07:42, Sven Barth via fpc-devel wrote:<br>
> The case when you *need* a constant reference. Case in point: the <br>
> passing of TGuid in IInterface.QueryInterface. Delphi code relies on <br>
> it being a reference, but “const” does not guarantee that for all <br>
> platforms.<br>
<br>
Maybe I am missing something, could you please explain why <br>
IInterface.QueryInterface needs constref?<br></blockquote></div></div><div dir="auto"><br></div><div dir="auto">This isn't about Delphi, but about Windows (and XPCOM): there the IID parameter is declared as "REFIID" which is essentially a pointer. On x86 with stdcall this is not a problem, because there "const TGUID" will be passed as reference, same on x86_64 and also ARM64. However on ARM this is *not* the case (and which is how that issue was discovered). So to avoid having to add a cast to a PGUID to every QueryInterface call we instead decided to introduce "constref" which results in fewer modifications for existing code. </div><div dir="auto"><br></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">Maybe somebody knows a real use case?<br></blockquote></div></div><div dir="auto"><br></div><div dir="auto">There are cases were you really need a reference and want it to be const. Or were you want to avoid a copy *for sure* (e.g. Embedded targets).</div><div dir="auto"><br></div><div dir="auto">Only because you can't see a reason for it doesn't mean that it doesn't exist. </div><div dir="auto"><br></div><div dir="auto">Regards, </div><div dir="auto">Sven </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>