Почему пакет параметров шаблона не выводится для аргументов нескольких типов при вызове функции?

У меня есть класс, созданный на основе параметра типа и пакета параметров, и я не совсем понимаю вывод этого типа; при написании оператора потокового вывода я обнаружил пакет параметров наoperator<<&nbsp;не будет соответствовать как типу, так и параметрам пакета для класса шаблона:

#include <iostream>

template<class T, class... Ts>
struct foo
{ /* ... */ };

template< class... Ts >
std::ostream& operator<<( std::ostream& os, const foo<Ts...>& )
{
  return os << 42;
}


int main()
{
  std::cout << foo<int>();
}

Это не удается скомпилировать как на gcc-4.7.2, так и на clang-3.0, поэтому я полагаю, что неправильно понимаю правила здесь.

gcc говорит (где строка 16 - это вызов выходного потока):

t.cpp:16:28: error: cannot bind ‘std::ostream {aka std::basic_ostream<char>}’ lvalue to ‘std::basic_ostream<char>&&’
In file included from /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/iostream:40:0,
                 from t.cpp:1:
/usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/ostream:600:5: error:   initializing argument 1 of ‘std::basic_ostream<_CharT, _Traits>& std::operator<<(std::basic_ostream<_CharT, _Traits>&&, const _Tp&) [with _CharT = char; _Traits = std::char_traits<char>; _Tp = foo<int>]’

и лязг говорит:

t.cpp:16:16: error: invalid operands to binary expression ('ostream' (aka 'basic_ostream<char>') and 'foo<int>')
        std::cout << foo<int>();
        ~~~~~~~~~ ^  ~~~~~~~~~~

[--- snip: lots of non-viable candidates from standard library ---]

t.cpp:8:19: note: candidate template ignored: substitution failure [with Ts = <>]
    std::ostream& operator<<( std::ostream& os, const foo<Ts...>& )
                  ^

Может ли кто-нибудь объяснить мне, почему пакет параметров дляoperator<<&nbsp;не может быть выведен как параметр типаа также&nbsp;пакет параметров дляfoo?