Je voudrais savoir si Delphi 2009 supporte la récursion générique.
Je m'explique.

J'ai inventé un nouveau TAD , le dictionnaire réversible, actuellement codé en Objective Caml.
Je n'ai que Delphi 5 à ma disposition (donc pas de généricité du tout).

Mon code traduit en Delphi 2009 devrait ressembler à quelque chose comme ceci:

Code delphi : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
 
type
 
  TRevMap<A,B> = class(TObject)
  public
    function Insert(const X:A; const Y:B):TRevMap<A,B>;
  private
    U: A;
    V: B;
    Left,Right: TRevMap<B,A>;
  end;
 
(* Insert s'appelle elle-même mais en inversant les rôles de X et Y   *)
(* ce qui est tout à fait cohérent avec la définition du type TRevMap *)
(* qui inverse les types A et B pour ses sous-arbres gauche et droit  *)
function TRevMap<A,B>.Insert(const X:A; const Y:B):;
begin
  if X < U then
    if Left <> nil then
      Left := Left.Insert(Y, X)  
    else begin
      Left := TRevMap<B,A>.Create; Left.U := Y; Left.V := X  
    end
  else
    if Right <> nil then
      Right := Right.Insert(Y, X)  
    else begin
      Right := TRevMap<B,A>.Create; Right.U := Y; Right.V := X  
    end;
  Result := self
end;

Cependant ce code risque de ne pas compiler si Delphi 2009 ne supporte pas la récursion générique (appel récursif avec des arguments réels de type différent du type déclaré en en-tête).

D'où la question simple: Delphi 2009 supporte-t-il la récursion générique
(vous pouvez transformer la récursion en boucle si cela vous amuse, mais j'ai bien peur que ça ne change rien du tout à ma question)