<div dir="ltr">On Thu, Nov 17, 2011 at 16:15, Sven Barth <span dir="ltr"><<a href="mailto:pascaldragon@googlemail.com">pascaldragon@googlemail.com</a>></span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

Am 17.11.2011 15:07, schrieb ik:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im">
On Thu, Nov 17, 2011 at 16:03, Sven Barth <<a href="mailto:pascaldragon@googlemail.com" target="_blank">pascaldragon@googlemail.com</a><br></div><div class="im">
<mailto:<a href="mailto:pascaldragon@googlemail.com" target="_blank">pascaldragon@<u></u>googlemail.com</a>>> wrote:<br>
<br>
    Am 17.11.2011 09:23, schrieb ik:<br>
<br>
            It's not allowed in Delphi in case of a var/out parameter. It's<br>
            allowed in both FPC and Delphi in case of a value/const<br>
        parameter.<br>
<br>
<br>
        Sorry for the late response, but why does out and var limit this<br>
        issue ?<br>
        I understand that it does, but not the reason for it.<br>
<br>
<br>
    The reason is mentioned in the link I sent you:<br></div>
    <a href="http://wiki.freepascal.org/__User_Changes_2.6.0#Passing___derived_classes_to_var-_and___out-parameters" target="_blank">http://wiki.freepascal.org/__<u></u>User_Changes_2.6.0#Passing___<u></u>derived_classes_to_var-_and___<u></u>out-parameters</a><div class="im">

<br>
    <<a href="http://wiki.freepascal.org/User_Changes_2.6.0#Passing_derived_classes_to_var-_and_out-parameters" target="_blank">http://wiki.freepascal.org/<u></u>User_Changes_2.6.0#Passing_<u></u>derived_classes_to_var-_and_<u></u>out-parameters</a>><br>


<br>
<br>
I read it, but I do not understand it.<br>
<br>
TStrings is a class. TStringList is a class inherited from TStrings. How<br>
does it prevent the type checking ?<br>
As I remember, if I placed there "TFom" based class, it will not like it<br>
and report and error. That's why I do not understand it I guess.<br>
</div></blockquote>
<br>
Emagine the following code:<br>
<br>
procedure Foo(var aList: TStrings);<br>
begin<br>
  aList.Free;<br>
  aList := TStrings.Create;<br>
end;<br>
<br>
var<br>
  l: TStringList;<br>
begin<br>
  l := TStringList.Create;<br>
  Foo(l);<br>
  l.Sort;<br>
end.<br>
<br>
When you run this code you will have a big problem. Your "l" variable is a TStringList, but after calling Foo your variable holds a TStrings instance (which is lower in the hierarchy than TStringList)! If you now call Sort you will get an access violation if you're lucky or some strange error if not, because Sort is introduced by TStringList. Thus you call into "nothing" when executing this on a TStrings.<br>


<br>
Is the reason why this is forbidden more clear now?</blockquote><div><br>‏Yes, thank you<br> </div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">

<div class="HOEnZb"><div class="h5"><br>
<br>
Regards,<br>
Sven<br>
<br>
______________________________<u></u>_________________<br>
fpc-pascal maillist  -  <a href="mailto:fpc-pascal@lists.freepascal.org" target="_blank">fpc-pascal@lists.freepascal.<u></u>org</a><br>
<a href="http://lists.freepascal.org/mailman/listinfo/fpc-pascal" target="_blank">http://lists.freepascal.org/<u></u>mailman/listinfo/fpc-pascal</a><br>
</div></div></blockquote></div><br></div>