#include <algorithm>
#include <iterator>
#include <iostream>
#include <memory>
#include <numeric>
#include <vector>
using namespace std;
struct foo {
int b() const { return _b; }
int a() const { return _a; }
int r() const { return _r; }
const int _b;
const int _a;
const int _r;
};
template <int (foo::*T)() const>
int func(const int init, const foo* i) { return init + (i->*T)(); }
int main() {
const vector<foo*> foos { new foo{ 0, 1, 2 }, new foo{ 3, 4, 5 }, new foo{ 6, 7, 8 } };
cout << accumulate(cbegin(foos), cend(foos), 0, &func<&foo::r>);
for_each(begin(foos), end(foos), default_delete<foo>());
}
I2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGl0ZXJhdG9yPgojaW5jbHVkZSA8aW9zdHJlYW0+CiNpbmNsdWRlIDxtZW1vcnk+CiNpbmNsdWRlIDxudW1lcmljPgojaW5jbHVkZSA8dmVjdG9yPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnN0cnVjdCBmb28gewogICAgaW50IGIoKSBjb25zdCB7IHJldHVybiBfYjsgfQogICAgaW50IGEoKSBjb25zdCB7IHJldHVybiBfYTsgfQogICAgaW50IHIoKSBjb25zdCB7IHJldHVybiBfcjsgfQogICAgY29uc3QgaW50IF9iOwogICAgY29uc3QgaW50IF9hOwogICAgY29uc3QgaW50IF9yOwp9OwoKdGVtcGxhdGUgPGludCAoZm9vOjoqVCkoKSBjb25zdD4KaW50IGZ1bmMoY29uc3QgaW50IGluaXQsIGNvbnN0IGZvbyogaSkgeyByZXR1cm4gaW5pdCArIChpLT4qVCkoKTsgfQoKaW50IG1haW4oKSB7Cgljb25zdCB2ZWN0b3I8Zm9vKj4gZm9vcyB7IG5ldyBmb297IDAsIDEsIDIgfSwgbmV3IGZvb3sgMywgNCwgNSB9LCBuZXcgZm9veyA2LCA3LCA4IH0gfTsKIAoJY291dCA8PCBhY2N1bXVsYXRlKGNiZWdpbihmb29zKSwgY2VuZChmb29zKSwgMCwgJmZ1bmM8JmZvbzo6cj4pOwoJCglmb3JfZWFjaChiZWdpbihmb29zKSwgZW5kKGZvb3MpLCBkZWZhdWx0X2RlbGV0ZTxmb28+KCkpOwp9