#ifndef PYTHONIC_BUILTIN_SUM_HPP #define PYTHONIC_BUILTIN_SUM_HPP #include "pythonic/include/builtins/sum.hpp" #include "pythonic/types/assignable.hpp" #include "pythonic/types/tuple.hpp" #include "pythonic/utils/int_.hpp" #include "pythonic/utils/functor.hpp" #include PYTHONIC_NS_BEGIN namespace builtins { namespace details { template auto tuple_sum::operator()(Tuple const &t) -> decltype(std::get(t) + tuple_sum()(t)) { return std::get(t) + tuple_sum()(t); } template auto tuple_sum::operator()(Tuple const &t) -> decltype(std::get<0>(t)) { return std::get<0>(t); } } template auto sum(Iterable s, T start) -> decltype(std::accumulate( s.begin(), s.end(), static_cast::type>( start))) { return std::accumulate( s.begin(), s.end(), static_cast::type>( start)); } } PYTHONIC_NS_END #endif