3.3. Section 3: Declarations and Types

Q: 3.5.2(5): Alternative Character Sets
Q: 3.5.4(28): Integer Types
Q: 3.5.4(29): Integer Types
Q: 3.5.5(8): Enumeration Values
Q: 3.5.7(17): Float Types
Q: 3.6.2(11): Multidimensional Arrays

Q: 3.5.2(5): Alternative Character Sets

If an implementation supports a mode with alternative interpretations for Character and Wide_Character, the set of graphic characters of Character should nevertheless remain a proper subset of the set of graphic characters of Wide_Character. Any character set localizations should be reflected in the results of the subprograms defined in the language-defined package Characters.Handling (see A.3) available in such a mode. In a mode with an alternative interpretation of Character, the implementation should also support a corresponding change in what is a legal identifier_letter.

A: Not all wide character modes follow this advice, in particular the JIS and IEC modes reflect standard usage in Japan, and in these encoding, the upper half of the Latin-1 set is not part of the wide-character subset, since the most significant bit is used for wide character encoding. However, this only applies to the external forms. Internally there is no such restriction.

Q: 3.5.4(28): Integer Types

An implementation should support Long_Integer in addition to Integer if the target machine supports 32-bit (or longer) arithmetic. No other named integer subtypes are recommended for package Standard. Instead, appropriate named integer subtypes should be provided in the library package Interfaces (see B.2).

A: Long_Integer is supported. Other standard integer types are supported so this advice is not fully followed. These types are supported for convenient interface to C, and so that all hardware types of the machine are easily available.

Q: 3.5.4(29): Integer Types

An implementation for a two's complement machine should support modular types with a binary modulus up to System.Max_Int*2+2. An implementation should support a non-binary modules up to Integer'Last.

A: Followed.

Q: 3.5.5(8): Enumeration Values

For the evaluation of a call on S'Pos for an enumeration subtype, if the value of the operand does not correspond to the internal code for any enumeration function of its type (perhaps due to an un-initialized variable), then the implementation should raise Program_Error. This is particularly important for enumeration types with non-contiguous internal codes specified by an enumeration_representation_clause.

A: Followed.

Q: 3.5.7(17): Float Types

An implementation should support Long_Float in addition to Float if the target machine supports 11 or more digits of precision. No other named floating point subtypes are recommended for package Standard. Instead, appropriate named floating point subtypes should be provided in the library package Interfaces (see B.2).

A: Short_Float and Long_Long_Float are also provided. The former provides improved compatibility with other implementations supporting this type. The latter corresponds to the highest precision floating-point type supported by the hardware.

Q: 3.6.2(11): Multidimensional Arrays

An implementation should normally represent multidimensional arrays in row-major order, consistent with the notation used for multidimensional array aggregates (see 4.3.3). However, if a pragma Convention (FORTRAN, ...) applies to a multidimensional array type, then column-major order should be used instead (see B.5, Interfacing with FORTRAN).

A: Followed.