13.4 Enumeration Representation Clauses
Syntax
Name Resolution Rules
The 
enumeration_aggregate 
shall be written as a one-dimensional 
array_aggregate, 
for which the index subtype is the unconstrained subtype of the enumeration 
type, and each component expression is expected to be of any integer 
type. 
 
Legality Rules
Each component of the 
array_aggregate 
shall be given by an 
expression 
rather than a <>. The 
expressions 
given in the 
array_aggregate 
shall be static, and shall specify distinct integer codes for each value 
of the enumeration type; the associated integer codes shall satisfy the 
predefined ordering relation of the type. 
 
Static Semantics
An 
enumeration_representation_clause 
specifies the 
coding aspect of representation. 
The 
coding consists of the 
internal code for each enumeration literal, 
that is, the integral value used internally to represent each literal.
 
Implementation Requirements
For nonboolean enumeration types, if the coding is 
not specified for the type, then for each value of the type, the internal 
code shall be equal to its position number. 
Implementation Advice
An implementation should support at least the internal 
codes in the range System.Min_Int..System.Max_Int. An implementation 
need not support 
enumeration_representation_clauses 
for boolean types. 
 
13  Unchecked_Conversion may be used to 
query the internal codes used for an enumeration type. The attributes 
of the type, such as Succ, Pred, and Pos, are unaffected by the 
enumeration_representation_clause. 
For example, Pos always returns the position number, 
not the internal 
integer code that might have been specified in an 
enumeration_representation_clause. 
 
Examples
Example of an enumeration 
representation clause: 
type Mix_Code is (ADD, SUB, MUL, LDA, STA, STZ);
for Mix_Code use
   (ADD => 1, SUB => 2, MUL => 3, LDA => 8, STA => 24, STZ =>33);
Ada 2005 and 2012 Editions sponsored in part by Ada-Europe