https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109761
--- Comment #3 from Andrew Pinski <pinskia at gcc dot gnu.org> --- GCC 9 produced: <source>:20:55: error: 'class outer' has no member named 'on_nested_ctor' 20 | explicit nested(outer& o) noexcept(noexcept(o.on_nested_ctor())) : | ^~~~~~~~~~~~~~ <source>:29:45: error: 'class outer' has no member named 'on_nested_dtor' 29 | ~nested() noexcept(noexcept(m_outer.on_nested_dtor())) | ^~~~~~~~~~~~~~ GCC 8 produced: <source>:20:53: error: invalid use of incomplete type 'class outer' explicit nested(outer& o) noexcept(noexcept(o.on_nested_ctor())) : ^ <source>:9:7: note: forward declaration of 'class outer' class outer : ^~~~~ <source>:29:37: error: invalid use of incomplete type 'class outer' ~nested() noexcept(noexcept(m_outer.on_nested_dtor())) ^~~~~~~ <source>:9:7: note: forward declaration of 'class outer' class outer : ^~~~~