tipo de retorno à direita usando decltype com uma função de modelo variável

Quero escrever um somador simples (para risadinhas) que adicione todos os argumentos e retorne uma soma com o tipo apropriado. Atualmente, eu tenho isso:

#include <iostream>
using namespace std;

template <class T>
T sum(const T& in)
{
   return in;
}

template <class T, class... P>
auto sum(const T& t, const P&... p) -> decltype(t + sum(p...))
{
   return t + sum(p...);
}

int main()
{
   cout << sum(5, 10.0, 22.2) << endl;
}

No GCC 4.5.1, isso parece funcionar bem para 2 argumentos, por exemplo. soma (2, 5,5) retorna com 7,5. No entanto, com mais argumentos do que isso, recebo erros que sum () simplesmente ainda não está definido. Se eu declarar sum () assim:

template <class T, class P...>
T sum(const T& t, const P&... p);

Então funciona para qualquer número de argumentos, mas sum (2, 5.5) retornaria o número inteiro 7, que não é o que eu esperaria. Com mais de dois argumentos, presumo que decltype () precisaria fazer algum tipo de recursão para poder deduzir o tipo de t + sum (p ...). Isso é legal em C ++ 0x? ou decltype () funciona apenas com declarações não-variadicas? Se for esse o caso, como você escreveria essa função?

questionAnswers(5)

yourAnswerToTheQuestion