On Mon, Feb 6, 2017 at 12:13 PM, Marek Polacek <pola...@redhat.com> wrote:
> This patch adds a description of something I noticed while doing the
> Fedora mass rebuild.  Do we want to say more about the invalidity of
> the incomplete type case?

Here's the relevant rule in the standard:

14.6/8: "If a hypothetical instantiation of a template immediately
following its definition would be ill-formed due to a construct that
does not depend on a template parameter, the program is ill-formed; no
diagnostic is required.  If the interpretation of such a construct in
the hypothetical instantiation is different from the interpretation of
the corresponding construct in any actual instantiation of the
template, the program is ill-formed; no diagnostic is required. [
Note: This can happen in situations including the following:
* a type used in a non-dependent name is incomplete at the point at
which a template is defined but is complete at the point at which an
instantiation is performed, ...."

> Furthermore I noticed that the testcase below doesn't compile anymore since
> r240874; Nathan, is that desirable?
>
> class C {
> public:
>   virtual ~C() noexcept(false);
> };
> class A : virtual C {
>   virtual C m_fn1() = 0;
> };
> class B : A {};
>
> s.cc:8:7: error: looser throw specifier for ‘virtual B::~B() noexcept (false)’
>  class B : A {};
>        ^
> s.cc:5:7: error:   overriding ‘virtual A::~A() noexcept’
>  class A : virtual C {
>        ^

No, this is a bug.

Jason

Reply via email to