Non-Confidential | PDF version | DUI0774J | ||

| ||||

Home > Standard C++ Implementation Definition > Expressions |

Describes implementation-defined aspects of the Arm^{®} C++ compiler and C++ library relating to expressions, as required by the ISO C++ Standard.

- Passing an argument of class type in a function call through ellipsis (5.2.2).
- For ellipsis arguments, passing an argument of class type having a non-trivial copy constructor, a non-trivial move constructor, or a non-trivial destructor, with no corresponding parameter, results in an abort at run time. A diagnostic is reported for this case.
- Result type of
`typeid`

expression (5.2.8). - The type of a
`typeid`

expression is an expression with dynamic type`std::type_info`

. - Incrementing a bit-field that cannot represent the incremented value (5.2.6).
- The incremented value is truncated to the number of bits in the bit-field. The bit-field is updated with the bits of the truncated value.
- Conversions between pointers and integers (5.2.10).
Converting a pointer to an integer type with a smaller bit width than the pointer, truncates the pointer to the number of bits of the destination type. Converting a pointer to an integer type with a greater bit width than the pointer, zero-extends the pointer. Otherwise, the bits of the representation are unchanged.

Converting an unsigned integer to a pointer type with a greater bit-width than the unsigned integer zero-extends the integer. Converting a signed integer to a pointer type with a greater bit-width than the signed integer sign-extends the integer. Otherwise, the bits of the representation are unchanged.

- Conversions from function pointers to object pointers (5.2.10).
- Such conversions are supported.
`sizeof`

applied to fundamental types other than`char`

,`signed char`

, and`unsigned char`

(5.3.3).-
Type `sizeof`

`bool`

1 `char`

1 `wchar_t`

4 `char16_t`

2 `char32_t`

4 `short`

2 `int`

4 `long`

(AArch32 state)4 `long`

(AArch64 state)8 `long long`

8 `float`

4 `double`

8 `long double`

(AArch32 state)8 `long double`

(AArch64 state)16 - Support for over-aligned types in
`new`

expressions (5.3.4). - Over-aligned types are not supported in
`new`

expressions. The pointer for the allocated type will not fulfill the extended alignment. - Type of
`ptrdiff_t`

(5.7). - The type of
`ptrdiff_t`

is`signed int`

for AArch32 state and`signed long`

for AArch64 state. - Type of
`size_t`

(5.7). - The type of
`size_t`

is`unsigned int`

for AArch32 state and`unsigned long`

for AArch64 state. - Result of right shift of negative value (5.8).
- In a bitwise right shift operation of the form
`E1 >> E2`

, if`E1`

is of signed type and has a negative value, the value of the result is the integral part of the quotient of`E1 / (2 ** E2)`

, except when`E1`

is -1, then the result is -1. - Assignment of a value to a bit-field that the bit-field cannot represent (5.18).
- When assigning a value to a bit-field that the bit-field cannot represent, the value is truncated to the number of bits of the bit-field. A diagnostic is reported in some cases.