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

--- Comment #5 from Daniel Krügler <daniel.kruegler at googlemail dot com> 
2011-05-05 07:15:12 UTC ---
(In reply to comment #1)

More information by a different example: It seems that the problem case reacts
very sensitive to minor modifications of the class. The following provides a
slightly different version of the previous example:

//---------------
#include <new>

//#define ADD_CTOR

struct U2 {
#ifdef ADD_CTOR
  U2(int) noexcept;
#endif
  ~U2() noexcept(false);
};

template<class T>
T&& create() noexcept;

const bool b = noexcept(::new (((void*) 0)) U2(create<U2&&>()));
static_assert(b, "Ouch"); // #
//---------------

As written, the same static assert violation occurs as in the example provided
by comment 1. But if the line

//#define ADD_CTOR

is uncommented *without any further changes* the program becomes accepted.
Somehow the addition of the user-provided constructor - even though it is not
used here - influences the evaluation of the noexcept expression.

Reply via email to