Copyright Digital Equipment Corp. All rights reserved.

Initialization

 An initialization expression must evaluate at compile time to a
 constant.  It is used to specify an initial value for an entity.

 In an initialization expression, each operation is intrinsic and
 each operand is one of the following:

  o  A constant or subobject of a constant

  o  An array constructor where each element, and the bounds and
     strides of each implied-do are expressions whose primaries are
     initialization expressions

  o  A structure constructor whose components are initialization
     expressions

  o  An elemental intrinsic function reference of type integer or
     character, whose arguments are initialization expressions of
     type integer or character

  o  A reference to one of the following inquiry functions:

         BIT_SIZE      MINEXPONENT
         DIGITS        PRECISION
         EPSILON       RADIX
         HUGE          RANGE
         ILEN          SHAPE
         KIND          SIZE
         LBOUND        TINY
         LEN           UBOUND
         MAXEXPONENT      

     Each function argument must be one of the following:

         - An initialization expression
         - A variable whose kind type parameter and bounds 
             are not assumed or defined by an ALLOCATE statement,
             pointer assignment, or an expression that is not an
             initialization expression

  o  A reference to one of the following transformational functions
     (each argument must be an initialization expression):

         REPEAT       
         RESHAPE       
         SELECTED_INT_KIND       
         SELECTED_REAL_KIND
         TRANSFER
         TRIM

  o  A reference to the transformational function NULL

  o  An implied-do variable within an array constructor where the
     bounds and strides of the corresponding implied-do are
     initialization expressions

  o  Another initialization expression enclosed in parentheses


 Each subscript, section subscript, and substring starting and
 ending point must be an initialization expression.

 In an initialization expression, the exponential operator (**) must
 have a power of type integer.

 If an initialization expression invokes an inquiry function for a
 type parameter or an array bound of an object, the type parameter
 or array bound must be specified in a prior specification statement
 (or to the left of the inquiry function in the same statement).