template<typename Head, typename... Tail>
double calc(Head p, Tail... arg)
{
return p + calc(arg...);
}
template<typename T>
double calc(T t)
{
return t;
};
template<typename... T>
class sum
{
};
template<typename Head, typename... Tail>
class sum<Head, Tail...>
{
public:
enum { d = sum<Tail...>::d + 1};
};
template<>
class sum<>
{
public:
enum { d = 0};
};
int main()
{
double ret = calc(1, 2, 3.0);
int len = sum<int, int, double>::d;
return 0;
}