арифметическая сумма параметров функции

пожалуйста, прокомментируйте код, что не так в моей реализации этой известной задачи

template <typename T>
T arithmetic_sum(T first) {
    return first;
}

template<typename T, typename... Types>
auto arithmetic_sum(T first, Types ...others) ->decltype(first + arithmetic_sum(others...)) {
    return first + arithmetic_sum(others...);
}

(GCC 4.9)

например этот звонок

auto i = arithmetic_sum(123, 123.45, 0.55l);

не может быть скомпилировано с ошибкой:

ошибка: нет соответствующей функции для вызова 'arithmetic_sum (int, double, long double)'

auto i = арифметическая_сумма (123, 123,45, 0,55 л); ^


person amigo421    schedule 20.07.2015    source источник
comment
Кстати, в С++ 14 вы можете просто избавиться от ->decltype(...). coliru.stacked-crooked.com/a/47bd3cf7dd892766   -  person Baum mit Augen    schedule 21.07.2015