https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88181

--- Comment #3 from Martin Liška <marxin at gcc dot gnu.org> ---
(In reply to Jakub Jelinek from comment #2)
> How could ICE start with a library change?

It was dependent to how Tuple class was defined. However doing a pre-processed
source file I see it starting from r223252, where the verification was added.

Reduced test-case:

$ cat x.ii
template < typename a > struct b { typedef a c; };
template < typename... > class d;
template < typename e > struct f {
  constexpr f(e) {}
};
template < int, typename... > struct g;
template < int h, typename e, typename... i >
struct g< h, e, i... > : g< 1, i... >, f< e > {
  constexpr g(e j, i... k) : g< 1, i... >(k...), f< e >(j) {}
};
template < int h, typename e > struct g< h, e > : f< e > {
  constexpr g(e j) : f< e >(j) {}
};
template < typename l, typename m > class d< l, m > : g< 0, l, m > {
public:
  constexpr d(l n, m o) : g< 0, l, m >(n, o) {}
  void operator=(typename b< const d >::c);
};
struct p {};
struct t {};
int main() {
  p q;
  t r;
  constexpr d< p, t > s(q, r);
}

Reply via email to