https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110291
Patrick Palka <ppalka at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED CC| |ppalka at gcc dot gnu.org Resolution|--- |DUPLICATE Keywords|needs-bisection | --- Comment #3 from Patrick Palka <ppalka at gcc dot gnu.org> --- Started with r11-2774. This seems like an unexpected consequence of CWG2369: during overload resolution for 'expr<int>{} / expr<no_self>{}' we have two interesting candidates expr<int>::operator/(expr<int>, expr<U>) [with U=no_self] // #1 expr<no_self>::operator/(expr<no_self>, expr<U>) [with U=no_self] // #2 Before CWG2369 we would discard #2 due to expr<int> not being convertible to expr<no_self>, and we don't need to check #2's constraints. But CWG2369 makes us check constraints before checking non-dependent conversions, and it's during constraint checking for #2 that we instantiate fn<no_self, no_self> which ultimately leads to the hard error :( Only GCC implements CWG2369 as far as I know. *** This bug has been marked as a duplicate of bug 99599 ***