MISRA Discussion Forums

Full Version: Seeking Clarification for Required Rule 0-1-8
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
MISRA C++ 0-1-8 (Required) states, "All functions with void return type shall have external side effect(s)." Quoting the rationale:
Quote: A function which does not return a value and which does not have external side effects will only consume time and will not contribute to the generation of any outputs, which may not meet developer expectations. The following are examples of external side effects:
• Reading or writing to a file, stream, etc.;
• Changing the value of a non local variable;
• Changing the value of an argument having reference type;
• Using a volatile object;
• Raising an exception.

So, what about this function:
Code:
void f()
    {
    try {
        throw 3;
    }
    catch( int )
        {}
    }

The above function raises an exception. However, as We see, the catch handler processes the exception within the same function and does "not contribute to the generation of any outputs". In such a case, does the function meet the requirements of 0-1-8?
A valid point.

A future edition or Technical Corrigendum will modify the exception to 'Raises an exception that transfers control outside the current function'