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

Reply via email to