Rule A0-4-3 (required, toolchain, automated)

The implementations in the chosen compiler shall strictly comply with the C++14 Language Standard.

Rationale

It is important to determine whether implementations provided by the chosen compiler strictly follow the ISO/IEC 14882:2014 C++ Language Standard.

Example

Since the ISO/IEC 14882:2014 C++ Language Standard, the integer division and modulo operator results are no longer implementation-defined. The sentence “if both operands are nonnegative then the remainder is nonnegative; if not, the sign of the remainder is implementation-defined” from ISO/IEC 14882:2003 is no longer present in the standard since ISO/IEC 14882:2011. Note that this rule also covers the modulo operator as it is defined in terms of integer division. Deducing the type of an auto variable initialized using auto x{} is implemented differently depending on the language standard. In C++11 and C++14, x will be a std::initializer_list, whereas in C++17, x will be a type deduced from the specified . Furthermore, some compilers may already implement the C++17 behavior even when operated in C++14 mode. Note: Rule A8-5-3 forbids initializing an auto variable with the curly braces ({}) syntax. Other features provided by the chosen compiler also should follow the ISO/IEC


## See also
MISRA C++ 2008 [7]: Rule 1-0-3 The implementation of integer division in the
chosen compiler shall be determined and documented.
C++ Core Guidelines [11]: F.46: int is the return type for main().