generic type T is (<>); with function MAX_ADD(X : T; I : INTEGER) return T; package Discr16_G is LO : T := T'val(T'pos(T'first)); HI : T := T'val(T'pos(MAX_ADD(LO, 15))); type A2 is array(T range <>) of T; type R2(D : T) is record C : A2(LO..D); end record; end;