Every type declaration in LRM says that it defines "both a type and a subtype". What is the idea of that? Why not to define the constrained type right away?
Ok, this has to do with integer, physical and real types, not all types.
The two types allow implicit conversion from mumeric literals, defined onlyfor the anonymous type, to any declared type (really an implicit subtype) of that anonymous type. However, unlike explicit subtypes of the same explicit type, you cannot implicitly convert between implicit subtypes.
type his_real is range 0.0 to 1.0; -- implicit subtype of universal_real
type her_real is range 0.0 to 1.0; -- another implicit subtype of universal_real
variable his : his_real := 0.5; -- both are compatible with anonymous literals
variable hers : her_real := 0.5;
his := hers; -- ERROR! but you can't do this!
However, if you declared his_real and her_real as named subtypes of real, then you could assign from one to the other.
Andy