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); }