Hi! The following testcase reduced from webkitgtk started to be rejected with r268850 and is accepted again since r269265. The testcase isn't very similar to the committed one, so I've tested following on x86_64-linux both with trunk and with r269264 and committed to trunk as obvious.
2019-03-10 Jakub Jelinek <ja...@redhat.com> PR c++/89648 * g++.dg/cpp0x/lambda/lambda-89648.C: New test. --- gcc/testsuite/g++.dg/cpp0x/lambda/lambda-89648.C.jj 2019-03-10 13:58:44.799976329 +0100 +++ gcc/testsuite/g++.dg/cpp0x/lambda/lambda-89648.C 2019-03-10 13:57:25.095281265 +0100 @@ -0,0 +1,30 @@ +// PR c++/89648 +// { dg-do compile { target c++11 } } + +template <typename T, T U> struct A { static const T e = U; }; +template <typename> struct B; +template <unsigned long, typename> struct C; +template <long i, typename T> using E = typename C<i, T>::k; +template <typename T, T...> struct F {}; +template <typename T, T U> using G = F<T, __integer_pack(U)...>; +template <unsigned long... U> using H = F<unsigned long, U...>; +template <unsigned long U> using I = G<unsigned long, U>; +template <typename...> class J {}; +template <typename... U> struct B<J<U...>> : A<long, sizeof...(U)> {}; +template <unsigned long N, typename T, typename... U> +struct C<N, J<T, U...>> : C<N - 1, J<U...>> {}; +template <typename T, typename... U> struct C<0, J<T, U...>> { typedef T k; }; +template <unsigned long N, typename... U> E<N, J<U...>> qux (J<U...>); +struct D { template <typename T> void foo (T) {} }; +void bar (...); +struct K { void baz (int &); int l; D m; int *n, o; }; +template <typename T, typename U, typename V, unsigned long... W> +void quux (int, int *, D x, int *, int, int, T, U, V y, H<W...>) { + x.foo ([=] { bar (qux <W>(y)...); }); +} +void K::baz (int &x) { + J<int, int> p; + int q, r; + long s; + quux (x, &l, m, n, o, r, s, q, p, I<B<decltype(p)>::e> ()); +} Jakub