#include <iostream>
#include <array>
#include <algorithm>

template <typename T> struct summatory
{
    summatory() : result(T()) {}
    void operator()(const T& value) { result += value; std::cout << value << "; "; };
    T result;
};

int main(int argc, char **argv)
{
    std::array<int, 10> a {{ 1, 1, 2, 3, 5, 8, 13, 21, 34, 55 }};
    summatory<int> sum;

    std::cout << "\nThe summation of: ";
    std::for_each(a.begin(), a.end(), sum);
    std::cout << "is: " << sum.result;

    std::cout << "\nThe summation of: ";
    sum = std::for_each(a.begin(), a.end(), sum);
    std::cout << "is: " << sum.result;
}