### 6.8 Shifts and Rotates

In standard Ada, the shift and rotate functions are available only
for the predefined modular types in package `Interfaces`

. However, in
GNAT it is possible to define these functions for any integer
type (signed or modular), as in this example:

function Shift_Left
(Value : T;
Amount : Natural)
return T;

The function name must be one of
Shift_Left, Shift_Right, Shift_Right_Arithmetic, Rotate_Left, or
Rotate_Right. T must be an integer type. T'Size must be
8, 16, 32 or 64 bits; if T is modular, the modulus
must be 2**8, 2**16, 2**32 or 2**64.
The result type must be the same as the type of `Value`

.
The shift amount must be Natural.
The formal parameter names can be anything.