3.2.1 Type Declarations
Syntax
Legality Rules
A given type shall not have a subcomponent whose 
type is the given type itself. 
Static Semantics
A type defined by a 
type_declaration 
is a 
named type; such a type has one or more nameable subtypes. 
Certain other forms of declaration also include type 
definitions as part of the declaration for an object. The type defined 
by such a declaration is 
anonymous — it has no nameable 
subtypes. 
For explanatory purposes, this International 
Standard sometimes refers to an anonymous type by a pseudo-name, written 
in italics, and uses such pseudo-names at places where the syntax normally 
requires an 
identifier. 
For a named type whose first subtype is T, this International Standard 
sometimes refers to the type of T as simply “the type T”. 
 
The definition of a type implicitly 
declares certain 
predefined operators that operate on the type, 
according to what classes the type belongs, as specified in 
4.5, 
“
Operators and Expression Evaluation”. 
 
The 
predefined types (for 
example the types Boolean, Wide_Character, Integer, 
root_integer, 
and 
universal_integer) are the types that are defined in a predefined 
library package called Standard; this package also includes the (implicit) 
declarations of their predefined operators. The package Standard is described 
in 
A.1. 
 
Dynamic Semantics
The elaboration of a 
full_type_declaration 
consists of the elaboration of the full type definition. 
Each 
elaboration of a full type definition creates a distinct type and its 
first subtype. 
 
Examples
Examples of type 
definitions: 
(White, Red, Yellow, Green, Blue, Brown, Black)
range 1 .. 72
array(1 .. 10) of Integer
Examples of type 
declarations: 
type Color  is (White, Red, Yellow, Green, Blue, Brown, Black);
type Column is range 1 .. 72;
type Table  is array(1 .. 10) of Integer;
3  Each of the above examples declares a 
named type. The identifier given denotes the first subtype of the type. 
Other named subtypes of the type can be declared with 
subtype_declarations 
(see 
3.2.2). Although names do not directly 
denote types, a phrase like “the type Column” is sometimes 
used in this International Standard to refer to the type of Column, where 
Column denotes the first subtype of the type. For an example of the definition 
of an anonymous type, see the declaration of the array Color_Table in 
3.3.1; its type is anonymous — it has 
no nameable subtypes. 
 
Ada 2005 and 2012 Editions sponsored in part by Ada-Europe