Dynamic Semantics

The
evaluation of a qualified_expression
evaluates the operand (and if of a universal type, converts it to the
type determined by the subtype_mark)
and checks that its value belongs to the subtype denoted by the subtype_mark.
The exception Constraint_Error
is raised if this check fails. Furthermore, if predicate checks are enabled
for the subtype denoted by the subtype_mark,
a check is performed as defined in subclause 3.2.4,
“Subtype Predicates” that the
value satifies the predicates of the subtype.

23 When a given context does not uniquely
identify an expected type, a qualified_expression
can be used to do so. In particular, if an overloaded name
or aggregate
is passed to an overloaded subprogram, it might be necessary to qualify
the operand to resolve its type.