Also Ident: T;? Dann wäre ich nicht auf einen Enum-Typen festgelegt.
Soll denn Ident vom selben Typ sein wie Value? Ich denke wohl nicht. Wenn es zwei unterschiedliche Typen sind, dann muss man das auch so deklarieren:
procedure WriteEnum<T,T2>(const Section: string; const Ident: T2; Value: T);