1 // Origin: PR c++/53609
2 // { dg-do compile { target c++11 } }
3 
4 template<class...I> struct List{ static const bool is_ok = false;};
5 template<int T> struct Z
6 {
7   static const int value = T;
8   static const int value_square = T * T;
9 };
10 
11 template<template<int> class U>
12 struct List<U<2>, U<3>, U<4>, U<9>> { static const bool is_ok = true;};
13 
14 template<int...T> using LZ = List<Z<T>...>;
15 
16 template<class...T>
17 struct F
18 {
19   using N = LZ<T::value..., Z<4>::value, Z<9>::value>;
20 };
21 
22 static_assert (F<Z<2>, Z<3>>::N::is_ok, "");
23