https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99599
--- Comment #6 from Patrick Palka <ppalka at gcc dot gnu.org> --- FWIW, one workaround for this kind of constraint looping is to encode the non-dependent conversion as a constraint. For this particular testcase, this would mean changing the signature of template<fooable T> auto invoke_tag(bar_tag, T it); to template<std::convertible_to<bar_tag> T, fooable U> auto invoke_tag(T, U it);