Consider the following snippet:

```
template<template<class> class T,class U>
struct apply
{
     typedef T<U> type;
};

typedef apply<std::tuple,int>::type tuple_of_one_int; //Should be std::tuple<int>

```

GCC 4.8.2. says:

```
type/value mismatch at argument 1 in template parameter list for [...] struct apply
expected a template of type ‘template<class> class T’, got ‘template<class ...> class std::tuple’

```

Which basically means that a variadic template like `std::tuple` is not a valid template argument for `T` in `apply`.

Is this a GCC bug or does the standard mandates this behaviour?