
![[PREVIOUS]](lrm-prev.gif)
![[UP]](lrm-up.gif)
The body of a generic subprogram or generic package is a template for the bodies of the corresponding subprograms or packages obtained by generic instantiations. The syntax of a generic body is identical to that of a nongeneric body.
For each declaration of a generic subprogram, there must be a corresponding body.
The elaboration of a generic body has no other effect than to establish that the body can from then on be used as the template for obtaining the corresponding instances.
Example of a generic procedure body:
    procedure EXCHANGE(U, V : in out ELEM) is  --  see example in 12.1
       T : ELEM;  --  the generic formal type
    begin
       T := U;
       U := V;
       V := T;
    end EXCHANGE;  
Example of a generic function body:
    function SQUARING(X : ITEM) return ITEM is  --  see example in 12.1
    begin
       return X*X;  --  the formal operator "*"
    end;  
Example of a generic package body:
    package body ON_VECTORS is  --  see example in 12.1 
       function SUM(A, B : VECTOR) return VECTOR is
          RESULT : VECTOR(A'RANGE);     --  the formal type VECTOR
          BIAS   : constant INTEGER := B'FIRST - A'FIRST;
       begin
          if A'LENGTH /= B'LENGTH then
             raise LENGTH_ERROR;
          end if; 
          for N in A'RANGE loop
             RESULT(N) := SUM(A(N), B(N + BIAS));  -- the formal function SUM
          end loop;
          return RESULT;
       end; 
       function SIGMA(A : VECTOR) return ITEM is
          TOTAL : ITEM := A(A'FIRST);                --  the formal type ITEM
       begin  
          for N in A'FIRST + 1 .. A'LAST loop
             TOTAL := SUM(TOTAL, A(N));           --  the formal function SUM
          end loop;
          return TOTAL;
       end;
    end;  
References: body, elaboration, generic body, generic instantiation, generic package, generic subprogram, instance, package body, package, subprogram, subprogram body.
Rationale references: 12.3 The Use of Generic Units, 12.3.1 Examples of Generic Functions, 12.3.2 An Example of a Generic Package, 12.3.3 A Generic Package with Tasks, 12.3.4 A More Complicated Example
Style Guide references: 8.2.7 Exceptions
![[Ada Information Clearinghouse]](small_adaic_logo.gif)
Address any questions or comments to adainfo@sw-eng.falls-church.va.us.