1
      2
      3
      4
      5
      6
      7
      8
      9
     10
     11
     12
     13
     14
#ifndef SUM_HPP
#define SUM_HPP

template<typename IT>
auto sum(IT begin_it, IT end_it) -> decltype(*begin_it + *begin_it++) {
   using T = decltype(*begin_it + *begin_it++);
   T sum{};
   while (begin_it != end_it) {
      sum += *begin_it++;
   }
   return sum;
}

#endif