This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of TC1 status.

119. Should virtual functions be allowed to strengthen the exception specification?

Section: 16.4.6.13 [res.on.exception.handling] Status: TC1 Submitter: Judy Ward Opened: 1998-12-15 Last modified: 2016-01-28

Priority: Not Prioritized

View other active issues in [res.on.exception.handling].

View all other issues in [res.on.exception.handling].

View all issues with TC1 status.

Discussion:

Section 16.4.6.13 [res.on.exception.handling] states:

"An implementation may strengthen the exception-specification for a function by removing listed exceptions."

The problem is that if an implementation is allowed to do this for virtual functions, then a library user cannot write a class that portably derives from that class.

For example, this would not compile if ios_base::failure::~failure had an empty exception specification:

#include <ios>
#include <string>

class D : public std::ios_base::failure {
public:
        D(const std::string&);
        ~D(); // error - exception specification must be compatible with 
              // overridden virtual function ios_base::failure::~failure()
};

Proposed resolution:

Change Section 16.4.6.13 [res.on.exception.handling] from:

     "may strengthen the exception-specification for a function"

to:

     "may strengthen the exception-specification for a non-virtual function".