<p>Am 16.04.2013 16:56 schrieb "leledumbo" <<a href="mailto:leledumbo_cool@yahoo.co.id">leledumbo_cool@yahoo.co.id</a>>:<br>
><br>
> This code:<br>
><br>
> {$mode objfpc}{$H+}<br>
><br>
> type<br>
>   generic TType1<A,B> = class end;<br>
>   generic TType2  = specialize TType1<A,String>;<br>
><br>
> begin<br>
> end.<br>
><br>
> fails:<br>
> x.pas(5,42) Error: Identifier not found "A"<br>
> x.pas(5,42) Error: Type identifier expected<br>
> x.pas(5,50) Error: Illegal expression<br>
> x.pas(7,1) Error: This type can't be a generic<br>
></p>
<p>As the compiler tells you: A is not a defined type. The compiler needs to know the complete type before it can use any type defined in there and in this case the full type is "TType1<A, String>" where both types must come from outside the type.</p>

<p>> but this code:<br>
><br>
> {$mode objfpc}{$H+}<br>
><br>
> type<br>
>   generic TType1<A,B> = class end;<br>
>   generic TType2  = class(specialize TType1<A,String>) end;<br>
><br>
> begin<br>
> end.<br>
><br>
> works. Does it have to be like the 2nd code for partial generic<br>
> specialization?</p>
<p>This must only work if you write "generic TType2<A> =...". Otherwise this is a bug.</p>
<p>One can argue however that the following should be valid as well (AFAIK it is not currently):</p>
<p>=== example begin ===</p>
<p>type<br>
  generic TType2<A> = specialize TType1<A, String>;</p>
<p>=== example end ===</p>
<p>Regards,<br>
Sven</p>