Main Content

MISRA C++:2023 Rule 4.1.1

A program shall conform to ISO/IEC 14882:2017 (C++17)

Since R2024b

Description

Rule Definition

A program shall conform to ISO/IEC 14882:2017 (C++17).

Rationale

The MISRA™ C++:2023 guidelines are based on the C++17 standard (ISO/IEC 14882:2017). Language extensions outside the standard are not covered by these guidelines. If you follow the MISRA C++:2023 guidelines for safe and secure coding, you must stay within the C++17 standard for the guidelines to cover your code.

Polyspace Implementation

The rule checker reports language extensions that are not strictly part of the C++17 Standard. The extensions could be part of a later standard or part of a specific dialect such as GCC or Microsoft® Visual C++®. The rule violations are reported as compilation errors as a strict C++17 compiler would report them.

For effective use of this rule, make sure to enable the C++17 standard for the Polyspace® Bug Finder™ analysis. For more information, see C++ standard version (-cpp-version).

Troubleshooting

If you expect a rule violation but Polyspace does not report it, see Diagnose Why Coding Standard Violations Do Not Appear as Expected.

Examples

expand all

void AccessMemory() {
    int* ptr = nullptr; // Intentionally creating a null pointer

    __try {  // Noncompliant 
        *ptr = 42; // This line will cause an access violation exception
    }
    __finally {
        // Code here is executed whether an exception occurred or not
        if (AbnormalTermination()) {
            // Code here is executed if the try block threw an exception
        } else {
            // Code here is executed on success
        }
    }
}

This example uses the Microsoft Visual C++ language extensions __try and __finally, which violate the rule. Instead, the standard C++ try-catch mechanism can be used for catching exceptions and the C++ RAII idiom can be used for freeing of resources even in the presence of exceptions.

Check Information

Group: General principles
Category: Required

Version History

Introduced in R2024b