I have a class template which takes a type and a pointer to a variable of that type:

```
template <typename arg_t, arg_t* storage>
class Value;

```

I have a second class template which takes a variable number of templates of the first class:

```
template <typename... arg_t>
class ValueList;

```

I want to make it so that only types of class template Value can be used as arguments to ValueList by partial specialization. This is what I'd expect to work:

```
template <typename... arg_t, arg_t*... storage>
class ValueList<Value<arg_t, storage>...>;

```

In Visual C++ 2013, I get the error: `'arg_t*': parameter pack cannot be expanded in this context`. Note that this kind of expansion works for templates that only take types, IE this...

```
template <typename...>
class A;

template <template <typename, typename> class B, typename... C, typename... D>
class A<B<C, D>...> {};

```

...is valid. What makes this case any different, and what is the correct syntax that will achieve the desired effect?

Usage:

```
int a;
float b;

int main(int argc, char** argv) {
    ValueList<Value<int, &a>, Value<float, &b> > list;
}

```