<div dir="auto"><div><div class="gmail_quote"><div dir="ltr" class="gmail_attr">Kostas Michalopoulos via fpc-devel <<a href="mailto:fpc-devel@lists.freepascal.org">fpc-devel@lists.freepascal.org</a>> schrieb am Mi., 22. Feb. 2023, 10:37:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">> Because Delphi doesn't have them and when constraints were implemented <br>
> they were implemented for Delphi compatibility.<br>
<br>
Can they be added? The original announcement ~13 years ago mentioned <br>
that those could be added at some point. "object" and "operator X" would <br>
be quite useful for me.<br></blockquote></div></div><div dir="auto"><br></div><div dir="auto">Some additional constraints might be added. However I have none of them planned currently and enough other things to do. </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">
<br>
I tried to use constraints at some point in my code but they proven too <br>
limited in functionality - the biggest issue i faced was that i couldn't <br>
use a specialization with a forward declared class (which is the entire <br>
point of the forward declaration). For example i have a generic <br>
collection that only works on TSerializable subclasses so i gave it that <br>
constraint, but in another unit i need to define a specialization for it <br>
before it was defined (so the class was available with a forward class <br>
declaration) since that specialization also needs to be used by the <br>
class itself. In general it seems like having constrained generic work <br>
with a tree structure of derived types that use the generic itself is <br>
impossible.<br>
<br>
Wouldn't storing a list of "specializations to confirm later in this <br>
unit" work (with later being when the class is actually defined in the <br>
unit)? The language already has forward declarations for a bunch of <br>
other things.<br></blockquote></div></div><div dir="auto"><br></div><div dir="auto">Forward declarations can not be used for constraints, because a specialization of the generic might be used before the forward declared type is fully defined and the compiler *must* be able to check whether the parameter in question is compatible at the time the specialization is declared. </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>