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:
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:
REPEAT  SELECTED_REAL_KIND 
RESHAPE  TRANSFER 
SELECTED_INT_KIND  TRIM 
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).
The following examples show valid and invalid initialization (constant) expressions:
Valid  
1 + 3  
SIZE(B)  ! B is a named constant 
7_2
 
INT(J,
4)  ! J is a named constant 
SELECTED_INT_KIND (2) 

Invalid  Explanation 
SUM(A)
 Not an allowed function. 
A/4.1  K**1.2  Exponential does not have integer power (A and K are named constants). 
HUGE(4.0)  Argument is not an integer. 