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.
For a prefix
X that denotes a scalar object (after any implicit dereference), the
following attribute is defined:
Yields True if and only if the
object denoted by X is normal and has a valid representation. The value
of this attribute is of the predefined type Boolean.
data can be created in the following cases (not counting erroneous or
- an uninitialized scalar object,
- the result of an unchecked conversion,
- interface to another language
(including machine code),
- disrupting an assignment due
to the failure of a language-defined check (see 11.6),
- use of an object whose Address
has been specified.
20 X'Valid is not considered to be a read
of X; hence, it is not an error to check the validity of invalid data.
21 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