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

Reply via email to