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: [email protected]
ReportedBy: [email protected]
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