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