Wp/caroline 1/1

не используется абстракция вокруг путей к файлам.
Имхо, init не нужен — если у нас >2 элементов, то мы вместо него используем первый элемент, если 1, то мы вообще ничего не делаем, если 0, то сама операция reduce бессмысленна.

Лучше использовать итераторы, вместо src, и кажется, что тут правильнее заюзать std::function:

    template<class T, class Iterator> 
    T reduce(const Iterator& begin, const Iterator& end, const std::function<T(const T&, const T&)>& func) {
    /* ... */
    }