https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100288
Patrick Palka <ppalka at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords| |ice-on-invalid-code See Also| |https://gcc.gnu.org/bugzill | |a/show_bug.cgi?id=99599 --- Comment #3 from Patrick Palka <ppalka at gcc dot gnu.org> --- Agreed, the testcase looks invalid much like PR99599. One workaround for avoiding the constraint recursion here would be to change the signature of template <OstreamInsertable Type> inline void operator<<(CSVTabIns &&tab, Type const &value) to something like template <std::same_as<std::remove_cvref_t<CSVTabIns>> U, OstreamInsertable Type> inline void operator<<(U &&tab, Type const &value) so that the constraint OstreamInsertable<Type> is checked on this overload only if the first argument to << has the expected type.