Attempt to violate exception specification

An exception can be thrown that violates the exception specification.

A C++ subroutine can optionally include an exception specification which enumerates the exceptions that can be thrown by that subroutine. This error flags a statement that attempts to throw an exception that is not listed in the exception specification. If this statement is executed, the C++ run time will call the unexpected() function instead. Note: exception specifications are ignored on the Windows* OS host.

ID

Observation

Description

1

Exception throw

This shows where the exception was thrown

2

Definition

This shows where the subroutine was defined

Example

          
#include <stdio.h>

class Legal_Exception
{
public:
    const char* message;
    explicit Legal_Exception(const char* p) : message(p) { }
};

void I_Only_Throw_Legal_Exceptions() throw(Legal_Exception)
{
    // intended to say throw Legal_Exception("My Message");
    // This throws "const char *" object instead
    throw("My Message");
}

int main(int argc, char **argv)
{
    try {
        I_Only_Throw_Legal_Exceptions();
    }
    catch (Legal_Exception & e) {
        // Expects to get here, but it won't
        printf("Caught legal exception %s\n", e.message);
    }
    return 0;
}
        

Copyright © 2010, Intel Corporation. All rights reserved.