http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49082
Summary: [C++0x] Issues with noexcept propagation Product: gcc Version: 4.7.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ AssignedTo: unassig...@gcc.gnu.org ReportedBy: paolo.carl...@oracle.com This is a memo for the issues with noexcept already signaled to Jason. First I noticed this, which seriously blocks library work at the moment: #include <utility> struct Base { Base(const Base&) noexcept(false); Base(Base&&) noexcept(false); }; struct Derived : Base { // Derived(const Derived&) = default; // Derived(Derived&&) = default; }; static_assert(!noexcept(Base(std::declval<const Base&>())), "Error"); static_assert(!noexcept(Derived(std::declval<const Derived&>())), "Error"); // Error static_assert(!noexcept(Base(std::declval<Base&&>())), "Error"); static_assert(!noexcept(Derived(std::declval<Derived&&>())), "Error"); // Error Then Daniel Krugler added this: struct Base { Base(const Base&) noexcept(false); Base(Base&&) noexcept(false); ~Base() noexcept(false); }; struct Derived : Base { Base b; }; static_assert(!noexcept(std::declval<Base&>().~Base()), "Error"); // OK static_assert(!noexcept(std::declval<Derived&>().~Derived()), "Error"); // Error