since it also has an implicit exception specification. Downgrade the error to an extwarn, since at least for operator delete, system headers like to declare it as 'noexcept' whereas the implicit definition does not have an explicit exception specification. Move the exception specification for user-declared 'operator delete' functions from the type-as-written into the type, to reflect reality and to allow us to detect whether there was an implicit exception spec or not. llvm-svn: 166372
18 lines
697 B
C++
18 lines
697 B
C++
// RUN: %clang_cc1 -std=c++11 -fcxx-exceptions -verify %s
|
|
|
|
// The exception specification of a destructor declaration is matched *before*
|
|
// the exception specification adjustment occurs.
|
|
namespace DR1492 {
|
|
struct A { ~A(); }; // expected-note {{here}}
|
|
A::~A() noexcept {} // expected-warning {{previously declared with an implicit exception specification}}
|
|
|
|
struct B { ~B() noexcept; }; // expected-note {{here}}
|
|
B::~B() {} // expected-warning {{previously declared with an explicit exception specification}}
|
|
|
|
template<typename T> struct C {
|
|
T t;
|
|
~C(); // expected-note {{here}}
|
|
};
|
|
template<typename T> C<T>::~C() noexcept {} // expected-error {{does not match previous}}
|
|
}
|