Dmitry A. Kazakov wrote: > > I think that Ludovic's view is more consistent: checks are just a part of > the conversion which otherwise is an identity function, because *presently* > the representation is required to be same. But representation is an > implementation detail and thus cannot count. Moreover it is very desirable > to allow subtypes having different representations. Try this with your favorite compiler: Ada.Text_IO.Put_Line (Item => "Integer'Size =" & Integer'Image (Integer'Size) ): Ada.Text_IO.Put_Line (Item => "Natural'Size =" & Integer'Image (Natural'Size) ): You're likely to get something like Integer'Size = 32 Natural'Size = 31 because representations of subtypes are not required to be the same. We can also consider type Rec (Length : Positive) is record V : String (1 .. Length); end record; subtype Small is Rec (Length => 1); subtype Big is Rec (length => 1_000); where Small and Big have significantly different representations. Then there are subtypes of variant record types with discriminants that select different variants.