3.2.3 Classification of Operations
Static Semantics
An operation 
operates on a 
type T if it yields a value of type 
T, if it has an 
operand whose expected type (see 
8.6) is 
T, 
or if it has an access parameter or access result type (see 
6.1) 
designating 
T. 
A predefined operator, or other 
language-defined operation such as assignment or a membership test, that 
operates on a type, is called a 
predefined operation of the type. 
The 
primitive operations of a type are the 
predefined operations of the type, plus any user-defined primitive subprograms. 
 
The 
primitive subprograms of a specific type are defined as follows: 
 
The predefined operators of the type (see 
4.5);
 
For a derived type, the inherited (see 
3.4) 
user-defined subprograms;
 
For an enumeration type, the enumeration literals 
(which are considered parameterless functions — see 
3.5.1);
 
For a specific type declared immediately within 
a 
package_specification, 
any subprograms (in addition to the enumeration literals) that are explicitly 
declared immediately within the same 
package_specification 
and that operate on the type;
 
For a specific type with an explicitly declared 
primitive "=" operator whose result type is Boolean, the corresponding 
"/=" operator (see 
6.6);
 
For a nonformal type, any subprograms 
not covered above that are explicitly declared immediately within the 
same declarative region as the type and that override (see 
8.3) 
other implicitly declared primitive subprograms of the type. 
 
A primitive subprogram whose 
designator is an 
operator_symbol 
is called a 
primitive operator.
 
Ada 2005 and 2012 Editions sponsored in part by Ada-Europe