3.2.1 Type Declarations
A given type shall not have a subcomponent whose
type is the given type itself.
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
For explanatory purposes, this document
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
For a named type whose first subtype is T, this document 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
The predefined types
example the types Boolean, Wide_Character, Integer, root_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
The elaboration of a full_type_declaration
consists of the elaboration of the full type definition.
elaboration of a full type definition creates a distinct type and its
Examples of type
(White, Red, Yellow, Green, Blue, Brown, Black)
range 1 .. 72
array(1 .. 10) of Integer
Examples of type
type Color is (White, Red, Yellow, Green, Blue, Brown, Black);
type Column is range 1 .. 72;
type Table is array(1 .. 10) of Integer;
NOTE 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_declaration
). Although names do not directly
denote types, a phrase like “the type Column” is sometimes
used in this document 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