13.9.2 The Valid Attribute
The Valid attribute can be used to check the validity
of data produced by unchecked conversion, input, interface to foreign
languages, and the like.
Static Semantics
For a
prefix
X that denotes a scalar object (after any implicit dereference), the
following attribute is defined:
X'Valid
Yields True if and only if the
object denoted by X is normal, has a valid representation, and then,
if the preceding conditions hold, the value of X also satisfies the predicates
of the nominal subtype of X. The value of this attribute is of the predefined
type Boolean.
Notwithstanding what this Reference Manual says elsewhere, evaluating
X'Valid does not evaluate the prefix X unless X is normal and has a valid
representation. If X is Volatile, evaluating X'Valid is still considered
a read of X.
NOTE 1 Invalid
data can be created in the following cases (not counting erroneous or
unpredictable execution):
an uninitialized scalar object,
the result of an unchecked conversion,
input,
interface to another language (including
machine code),
aborting an assignment,
disrupting an assignment due to the
failure of a language-defined check (see
11.6),
and
use of an object whose Address has
been specified.
NOTE 2 Since evaluating X'Valid does
not evaluate X unless X is normal and valid, it is not an error to check
the validity of an object that is invalid or abnormal. Determining whether
X satisfies the predicates of its nominal subtype can include an evaluation
of X, but this determination is made only after it has been determined
that X has a valid representation and therefore is safe to evaluate.
This paragraph was
deleted.
NOTE 3 The Valid attribute can be
used to check the result of calling an instance of Unchecked_Conversion
(or any other operation that can return invalid values). However, an
exception handler is still useful because implementations are permitted
to raise Constraint_Error or Program_Error if they detect the use of
an invalid representation (see
13.9.1).
Ada 2005 and 2012 Editions sponsored in part by Ada-Europe