package pak1 is type T1(<>) is tagged limited private; private type T1(D: integer) is tagged limited null record; end pak1; package pak1.pak3 is type T3 is new pak1.T1 with null record; -- legal, but rejected x2: T3 := (pak1.T1 with null record); -- legal, but rejected end pak1.pak3; RM 3.7(26) states: "A type declared without a discriminant part has no discriminants, unless it is a derived type; if derived, such a type has the same sort of discriminants (known, unknown, or none) as its parent (or ancestor) type." Therefore, the declaration of T3 is legal and T3 has unknown discriminants.
Actually, the declaration of x2 is illegal; GNAT is correct in rejecting it. The declaration of T3 is legal and incorrectly rejected. The error messages are: gnatmake -gnat05 pak1-pak3.ads gcc-4.1 -c -gnat05 pak1-pak3.ads pak1-pak3.ads:3:15: invalid constraint: type has no discriminant pak1-pak3.ads:4:14: no value supplied for discriminant "D" (see also PR ada/34507).
.