http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56340

             Bug #: 56340
           Summary: Wrong error from exception specifications of defaulted
                    destructors
    Classification: Unclassified
           Product: gcc
           Version: 4.7.2
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
        AssignedTo: unassig...@gcc.gnu.org
        ReportedBy: bi...@iki.fi


The following C++11 program incorrectly produces an error message in 4.7.2:

> cat tt.cc 
class B
{
public:
  virtual ~B() = default;
};

class D : public B
{
public:
  virtual ~D() = default;
};
> g++ -std=c++11 -c tt.cc 
tt.cc:10:11: error: looser throw specifier for ‘virtual D::~D()’
tt.cc:4:11: error:   overriding ‘virtual B::~B() noexcept (true)’

The error vanishes if D's destructor declaration is removed (the same also
happens if B's destructor declaration is removed, but then the situation is
different because base class destructor is no longer virtual).

Reply via email to