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

Reply via email to