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?
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 { ^ If it's desirable that g++ rejects this, we should say something about it in porting_to. Any ideas what that might be? Thanks, Index: gcc-7/porting_to.html =================================================================== RCS file: /cvs/gcc/wwwdocs/htdocs/gcc-7/porting_to.html,v retrieving revision 1.3 diff -u -r1.3 porting_to.html --- gcc-7/porting_to.html 3 Feb 2017 07:55:27 -0000 1.3 +++ gcc-7/porting_to.html 6 Feb 2017 17:08:44 -0000 @@ -33,6 +33,23 @@ <h2 id="cxx">C++ language issues</h2> +<h3 id="incomplete-type">Invalid use of incomplete type</h3> + +<p> +GCC 7 no longer accepts ill-formed code involving use of an incomplete type: +<pre><code> +namespace N { +class C; +class A { + C fn1(); +}; +template <typename> class B : A { + void fn2() { fn1().x; } +}; +} +</code></pre> +</p> + <h3 id="conversion-op-mangling">Mangling change for conversion operators</h3> <p> Marek