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 <[email protected]>
* 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