greg@verdix.UUCP (11/05/83)
It has been noted, and raised as an issue in this news group that an
in integer type declaration:
type T is range L..R; -- where L and R must be static
The type T is *not* a static range.
This comes about because in LRM 3.5.4 an integer type declaration is
defined as being equivalent to the following pair of declarations:
type integer_type is new predefined_integer_type;
subtype T is integer_type range integer_type(L)..integer_type(R);
Explicit type conversions are not static, thus the subtype T above is
not a static subtype.
Compare this with the derived type declaration:
type T is new INTEGER range L..R; -- where L and R are static.
Here, the derived subtype T is a static subtype because from LRM 3.4(3):
"If a constraint exists for the parent subtype, a similar constraint
exists for the derived subtype; the only difference is that for a
range constraint, and likewise for a floating or fixed point
constraint that includes a range constraint, the value of each
bound is replaced by the corresponding value of the derived type"
-----------------------------------
Thus, no conversions are required or implied.
Is this difference between integer type definitions and derived type
definitions intended?
Greg Burns, Verdix Corporation
gburns.oregon-grad@csnet-relay
{tektronix!ogcvax allegra!ogcvax inteloa decwrl!sequent}!verdix!greg