On Wed, Oct 18, 2023 at 01:33:40PM +0200, Jakub Jelinek wrote: > Making it guaranteed that it has at least one argument say through > template <typename U, typename ...T> poly_int(const U &, const T &...) {} > fixes it for 4.8/4.9 as well.
So, perhaps (but so far totally untested, the other bootstrap is still running): 2023-10-18 Jakub Jelinek <ja...@redhat.com> * poly-int.h (poly_int::poly_int): Ensure the const Cs &... argument ctor has at least one argument. --- gcc/poly-int.h.jj 2023-10-13 19:34:44.112832389 +0200 +++ gcc/poly-int.h 2023-10-18 13:49:29.038751482 +0200 @@ -379,8 +379,8 @@ public: template<typename Ca> poly_int (const poly_int<N, Ca> &); - template<typename ...Cs> - constexpr poly_int (const Cs &...); + template<typename C0, typename ...Cs> + constexpr poly_int (const C0 &, const Cs &...); poly_int &operator = (const poly_int &) = default; @@ -446,11 +446,11 @@ poly_int<N, C>::poly_int (const poly_int } template<unsigned int N, typename C> -template<typename ...Cs> +template<typename C0, typename ...Cs> inline constexpr -poly_int<N, C>::poly_int (const Cs &... cs) +poly_int<N, C>::poly_int (const C0 &c0, const Cs &... cs) : poly_int (typename poly_int_fullness<sizeof... (Cs) >= N>::type (), - cs...) {} + c0, cs...) {} /* Initialize with c0, cs..., and some trailing zeros. */ template<unsigned int N, typename C> Jakub