# Fortran 2003 Features

Fortran 2003 is fully supported, including the following features:

- Parameterized derived types with KIND and LENGTH type parameters and the %KIND and %LEN type parameter designators

- A polymorphic dummy argument that has the attribute INTENT(OUT) becomes UNDEFINED or it will have DEFAULT INITIALIZATION applied.

- User-Defined Derived-Type I/O

- A polymorphic SOURCE= specifier for ALLOCATE

- Bounds specification and bounds remapping list on a pointer assignment

- FINAL routines

- GENERIC, OPERATOR, and ASSIGNMENT overloading in type-bound procedures

- Enumerators

- Type extension (not polymorphic)

- Type-bound procedures

- Allocatable scalar variables (not deferred-length character)

- ERRMSG keyword for ALLOCATE and DEALLOCATE

- SOURCE= keyword for ALLOCATE

- Character arguments for MAX, MIN, MAXVAL, MINVAL, MAXLOC, and MINLOC

- Intrinsic modules IEEE_EXCEPTIONS, IEEE_ARITHMETIC and IEEE_FEATURES

- ASSOCIATE construct

- DO CONCURRENT construct

- PROCEDURE declaration

- Procedure pointers

- ABSTRACT INTERFACE

- PASS and NOPASS attributes

- CONTIGUOUS attribute

- Structure constructors with component names and default initialization

- Array constructors with type and character length specifications

- I/O keywords BLANK, DECIMAL, DELIM, ENCODING, IOMSG, PAD, ROUND, SIGN, and SIZE

- Format edit descriptors DC, DP, RD, RC, RN, RP, RU, and RZ

- The COUNT_RATE argument to the SYSTEM_CLOCK intrinsic may be a REAL of any kind.

- NAMELIST I/O for internal files

- Intrinsic functions EXTENDS_TYPE_OF and SAME_TYPE_AS

- SELECT TYPE construct

- CLASS declaration

- PUBLIC types with PRIVATE components and PRIVATE types with PUBLIC components

- RECORDTYPE setting STREAM_CRLF

- A file can be opened for stream access (ACCESS='STREAM')

- Specifier POS can be specified in an INQUIRE, READ, or WRITE statement

- BIND attribute and statement

- Language binding can be specified in a FUNCTION or SUBROUTINE statement, or when defining a derived type

- IS_IOSTAT_END intrinsic function

- IS_IOSTAT_EOR intrinsic function

- INTRINSIC and NONINTRINSIC can be specified for modules in USE statements

- ASYNCHRONOUS attribute and statement

- VALUE attribute and statement

- Specifier ASYNCHRONOUS can be specified in an OPEN, INQUIRE, READ, or WRITE statement

- An ID can be specified for a pending data transfer operation

- FLUSH statement

- WAIT statement

- IMPORT statement

- NEW_LINE intrinsic function

- SELECTED_CHAR_KIND intrinsic function

- Intrinsic modules ISO_C_BINDING and ISO_FORTRAN_ENV

- Specifiers ID and PENDING can be specified in an INQUIRE statement

- User-defined operators can be renamed in USE statements

- MOVE_ALLOC intrinsic subroutine

- PROTECTED attribute and statement

- Pointer objects can have the INTENT attribute

- GET_COMMAND intrinsic

- GET_COMMAND_ARGUMENT intrinsic

- COMMAND_ARGUMENT_COUNT intrinsic

- GET_ENVIRONMENT_VARIABLE intrinsic

- Allocatable components of derived types

- Allocatable dummy arguments

- Allocatable function results

- VOLATILE attribute and statement

- Names of length up to 63 characters

- Statements up to 256 lines

- A named PARAMETER constant may be part of a complex constant

- In all I/O statements, the following numeric values can be of any kind: UNIT=, IOSTAT=

- The following OPEN numeric values can be of any kind: RECL=

- The following READ and WRITE numeric values can be of any kind: REC=, SIZE=

- The following INQUIRE numeric values can be of any kind: NEXTREC=, NUMBER=, RECL=, SIZE=

- Recursive I/O is allowed when the new I/O being started is internal I/O that does not modify any internal file other than its own

- IEEE infinities and Nans are displayed by formatted output as specified by Fortran 2003

- In an I/O format, the comma after a P edit descriptor is optional when followed by a repeat specifier

- The following intrinsics take an optional KIND= argument: ACHAR, COUNT, IACHAR, ICHAR, INDEX, LBOUND, LEN, LEN_TRIM, MAXLOC, MINLOC, SCAN, SHAPE, SIZE, UBOUND, VERIFY

- Square brackets [ ] are permitted to delimit array constructors instead of (/ /)

- The Fortran character set has been extended to contain the 8-bit ASCII characters ~ \ [ ] ` ^ { } | # @

For information about the Fortran standards, visit the Fortran Standards Committee website.

Parent topic: Conformance, Compatibility, and Fortran Features

## See Also

New Language Features
Fortran 2008 Features
Fortran 2018 Features