6.6 Overloading of Operators
Name Resolution Rules
Each use of a unary or binary operator is equivalent 
to a 
function_call 
with 
function_prefix 
being the corresponding 
operator_symbol, 
and with (respectively) one or two positional actual parameters being 
the operand(s) of the operator (in order). 
 
Legality Rules
The 
subprogram_specification 
of a unary or binary operator shall have one or two parameters, respectively. 
The parameters shall be of mode 
in. A generic function instantiation 
whose 
designator 
is an 
operator_symbol 
is only allowed if the specification of the generic function has the 
corresponding number of parameters, and they are all of mode 
in.
 
An explicit declaration of "/=" shall not 
have a result type of the predefined type Boolean. 
Static Semantics
An explicit declaration of "=" whose result 
type is Boolean implicitly declares an operator "/=" that gives 
the complementary result.
  
10  The operators "+" and "–" 
are both unary and binary operators, and hence may be overloaded with 
both one- and two-parameter functions. 
Examples
Examples of user-defined 
operators: 
function "+" (Left, Right : Matrix) return Matrix;
function "+" (Left, Right : Vector) return Vector;
--  assuming that A, B, and C are of the type Vector
--  the following two statements are equivalent:
A := B + C;
A := "+"(B, C);
Ada 2005 and 2012 Editions sponsored in part by Ada-Europe