#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;
}
I2luY2x1ZGUgPG51bWVyaWM+CiNpbmNsdWRlIDx2ZWN0b3I+CiNpbmNsdWRlIDxsaXN0PgojaW5jbHVkZSA8YXJyYXk+CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPGl0ZXJhdG9yPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnRlbXBsYXRlPHR5cGVuYW1lIEM+CmF1dG8gYXZnX2ltcGwoY29uc3QgQyAmIHhzKSB7Cgl1c2luZyBUID0gZGVjbHR5cGUoKmJlZ2luKHhzKSk7CglhdXRvIHMgPSBhY2N1bXVsYXRlKGJlZ2luKHhzKSwgZW5kKHhzKSwgbWFrZV9wYWlyKFR7fSwgMHUpLAoJCVtdKGF1dG8gcCwgYXV0byB4KSB7CgkJCXJldHVybiBtYWtlX3BhaXIocC5maXJzdCt4LCBwLnNlY29uZCsxdSk7CgkJfSk7CglyZXR1cm4gcy5maXJzdC9zLnNlY29uZDsKfQoKaW50IG1haW4oKSB7Cgl2ZWN0b3I8aW50PiB2aXsgMCwgLTUgfTsKCWNvdXQgPDwgInZpIGF2ZzogIiA8PCBhdmdfaW1wbCh2aSkgPDwgZW5kbDsKfQo=