#include <algorithm>
#include <iostream>
#include <functional>
#include <vector>
template <class T>
struct twicer : std::unary_function<T,T>
{
T operator()( const T& t ) const { return t * 2; }
};
template <class _Tp, class FT>
struct myplus : public std::binary_function<_Tp, _Tp, _Tp>
{
_Tp operator()(const _Tp& __x, const _Tp& __y) const
{ return __x + funktor(__y); }
FT funktor;
};
int main() {
std::vector<int> v = {1,2};
std::cout << std::accumulate( v.begin(), v.end(), 0, myplus<int,twicer<int> >() ) << std::endl;
//std::cout << std::accumulate( v.begin(), v.end(), 0, std::plus<int>() ) << std::endl;
return 0;
}
I2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8ZnVuY3Rpb25hbD4KI2luY2x1ZGUgPHZlY3Rvcj4KCnRlbXBsYXRlIDxjbGFzcyBUPgpzdHJ1Y3QgdHdpY2VyIDogc3RkOjp1bmFyeV9mdW5jdGlvbjxULFQ+CnsKCVQgb3BlcmF0b3IoKSggY29uc3QgVCYgdCApIGNvbnN0IHsgcmV0dXJuIHQgKiAyOyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBGVD4Kc3RydWN0IG15cGx1cyA6IHB1YmxpYyBzdGQ6OmJpbmFyeV9mdW5jdGlvbjxfVHAsIF9UcCwgX1RwPgp7CiAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdAogIHsgcmV0dXJuIF9feCArIGZ1bmt0b3IoX195KTsgfQogIAogIEZUIGZ1bmt0b3I7Cn07CgppbnQgbWFpbigpIHsKCQoJc3RkOjp2ZWN0b3I8aW50PiB2ID0gezEsMn07CgkKCXN0ZDo6Y291dCA8PCBzdGQ6OmFjY3VtdWxhdGUoIHYuYmVnaW4oKSwgdi5lbmQoKSwgMCwgbXlwbHVzPGludCx0d2ljZXI8aW50PiA+KCkgKSA8PCBzdGQ6OmVuZGw7CgkvL3N0ZDo6Y291dCA8PCBzdGQ6OmFjY3VtdWxhdGUoIHYuYmVnaW4oKSwgdi5lbmQoKSwgMCwgc3RkOjpwbHVzPGludD4oKSApIDw8IHN0ZDo6ZW5kbDsKCQoJcmV0dXJuIDA7Cn0=