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).