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 ***

Reply via email to