https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77369

Jonathan Wakely <redi at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
   Last reconfirmed|2017-04-24 00:00:00         |2017-10-17
      Known to fail|                            |4.6.4, 4.7.4, 4.8.5, 4.9.4,
                   |                            |5.4.0, 6.4.0, 7.2.0, 8.0

--- Comment #3 from Jonathan Wakely <redi at gcc dot gnu.org> ---
Another testcase, this time compile-time only:


template<typename F> int caller(F f) noexcept(noexcept(f())) { f(); return 0; }

void func1() noexcept { }

void func2() { throw 1; }

#ifndef FIXIT
int instantiate_caller_with_func1 = caller(func1);
#endif

static_assert( !noexcept(caller(func2)), "" );


Without FIXIT defined the first instantiation of caller makes use of the fact
that its template argument type is noexcept, but then we use the same
instantiation for the caller(func2):

n.cc:11:1: error: static assertion failed
 static_assert( !noexcept(caller(func2)), "" );
 ^~~~~~~~~~~~~

As Aaron observed, EDG has exactly the same bug. Clang compiles it
successfully.

Reply via email to