[Bug c++/92198] New: error "different exception specifier" with forward referring noexcept condition

gccbugbjorn at fahller dot se gcc-bugzilla@gcc.gnu.org
Wed Oct 23 14:05:00 GMT 2019


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

            Bug ID: 92198
           Summary: error "different exception specifier" with forward
                    referring noexcept condition
           Product: gcc
           Version: 9.2.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: gccbugbjorn at fahller dot se
  Target Milestone: ---

Created attachment 47095
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=47095&action=edit
Failing test program

The below code fails to compile:


bjorn@TS-PC11H6ST:/tmp$ cat t.cpp

template <typename T>
class C
{
public:
    C(const C& e) noexcept( noexcept(T(e.value())) );
    T& value() & noexcept; // move above copy-ctor to make code compile
};

template <typename T>
C<T>::C(const C&  e) noexcept( noexcept(T(e.value())) )
{
}

bjorn@TS-PC11H6ST:/tmp$ g++-9 t.cpp
t.cpp:11:1: error: declaration of ‘C<T>::C(const C<T>&) noexcept (noexcept
((T)(e.C<T>::value())))’ has a different exception specifier
   11 | C<T>::C(const C&  e) noexcept( noexcept(T(e.value())) )
      | ^~~~
t.cpp:6:5: note: from previous declaration ‘C<T>::C(const C<T>&) noexcept
(noexcept ((T)(e.value())))’
    6 |     C(const C& e) noexcept( noexcept(T(e.value())) );
      |     ^


bjorn@TS-PC11H6ST:/tmp$ g++-9 --version
g++-9 (Ubuntu 9.2.1-9ubuntu2~18.04.1) 9.2.1 20191008
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Obligatory godbolt link : https://godbolt.org/z/uB44Oo


More information about the Gcc-bugs mailing list