<div dir="ltr"><div class="gmail_extra"><div class="gmail_extra">Sven, it would seem you cannot currently cannot pass a generic T to resolve the type of another generic subroutine.</div><div class="gmail_extra"><br></div><div class="gmail_extra">In this example, Test<T> cannot reuse T in its call to Min<T>. I believe this line should be legal "Value := Min<T>(A, B);" (see the code below for context)</div><div class="gmail_extra"><br></div><div class="gmail_extra">Currently when you try to compile the unit GenericTest you'll receive a compiler error on line marked below. Would you like me to enter this into issue into mantis?</div><div class="gmail_extra"><br></div><div class="gmail_extra">unit GenericTest;<br></div><div class="gmail_extra"><br></div><div class="gmail_extra">{$mode delphi}</div><div class="gmail_extra"><br></div><div class="gmail_extra">interface</div><div class="gmail_extra"><br></div><div class="gmail_extra">function Min<T>(const A, B: T): T;</div><div class="gmail_extra">function Max<T>(const A, B: T): T;</div><div class="gmail_extra">procedure Test<T>(const A, B: T);</div><div class="gmail_extra"><br></div><div class="gmail_extra">implementation</div><div class="gmail_extra"><br></div><div class="gmail_extra">function Min<T>(const A, B: T): T;</div><div class="gmail_extra">// Error on line below, GenericTest.pas(14,1) Error: Internal error 200301231</div><div class="gmail_extra">begin</div><div class="gmail_extra">  if A > B then</div><div class="gmail_extra">    Result := A</div><div class="gmail_extra">  else</div><div class="gmail_extra"><span style="white-space:pre">    </span>Result := B;</div><div class="gmail_extra">end;</div><div class="gmail_extra"><br></div><div class="gmail_extra">function Max<T>(const A, B: T): T;</div><div class="gmail_extra">begin</div><div class="gmail_extra">  if A > B then</div><div class="gmail_extra">    Result := A</div><div class="gmail_extra">  else</div><div class="gmail_extra">    Result := B;</div><div class="gmail_extra">end;</div><div class="gmail_extra"><br></div><div class="gmail_extra">procedure Test<T>(const A, B: T);</div><div class="gmail_extra">var</div><div class="gmail_extra">  Value: T;</div><div class="gmail_extra">begin</div><div class="gmail_extra">  // This should be legal</div><div class="gmail_extra">  Value := Min<T>(A, B);</div><div class="gmail_extra">  WriteLn('The Min<T> of values, ', A, ' and ', B, ' are: ', Value);</div><div class="gmail_extra">  // As well as this</div><div class="gmail_extra"><span style="white-space:pre">  </span>Value := Max<T>(A, B);</div><div class="gmail_extra">  WriteLn('The Max<T> of values, ', A, ' and ', B, ' are: ', Value);</div><div class="gmail_extra">end;</div><div class="gmail_extra"><br></div><div class="gmail_extra">end.</div></div></div>