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.
22 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.
23 Determining whether X is normal and
has a valid representation as part of the evaluation of X'Valid is not
considered to include an evaluation of X; hence, 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 may include
an evaluation of X, but only after it has been determined that X has
a valid representation.
If X is volatile, the evaluation of X'Valid is considered
a read of X.
24 The Valid attribute may 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
should also be provided 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