#include <numeric>
#include <vector>
#include <list>
#include <array>
#include <iostream>
#include <iterator>

using namespace std;

template<typename C>
auto avg_impl(const C & xs) {
	using T = decltype(*begin(xs));
	auto s = accumulate(begin(xs), end(xs), make_pair(T{}, 0u),
		[](auto p, auto x) {
			return make_pair(p.first+x, p.second+1u);
		});
	return s.first/s.second;
}

int main() {
	vector<int> vi{ 0, -5 };
	cout << "vi avg: " << avg_impl(vi) << endl;
}
