Oops...
1- Turns out the check_bases_and_members change has to happen earlier, because we want to fixup the exceptions before check_bases, otherwise we reject things like (in the C++ library and elsewhere):struct True2 { virtual ~True2() noexcept; }; template <typename Base> struct C : Base { ~C(); };
Last line of the snippet missing: C<True2> c; Paolo.