https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99374
Jonathan Wakely <redi at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |jason at gcc dot gnu.org --- Comment #3 from Jonathan Wakely <redi at gcc dot gnu.org> --- The change (and the reason it works pre-C++17) is noexcept being part of the type. Apparently G++ thinks the implicit conversion from R (C::*)() noexcept to R(C::*)() depends on C being complete. So it has nothing to do with conditional expressions and can be reduced to: struct S; using F1 = int (S::*)(); using F2 = int (S::*)() noexcept; F1 f1 = F2();