#include <iostream>
#include <stdexcept>
using namespace std;
class Farm
{
public:
int cows = 1;
int chickens = 2;
int mules = 3;
};
int Farm::* getMemberPtr(int whichMember)
{
switch (whichMember)
{
case 0: return &Farm::chickens;
case 1: return &Farm::cows;
case 2: return &Farm::mules;
}
throw invalid_argument("");
}
void count_animals(int Farm::*member)
{
Farm animal_farm;
cout << animal_farm.*member;
}
int main()
{
int animals_to_count = 0;
int Farm::* member = getMemberPtr(animals_to_count);
count_animals(member);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RkZXhjZXB0Pgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgRmFybQp7CnB1YmxpYzoKICAgIGludCBjb3dzID0gMTsKICAgIGludCBjaGlja2VucyA9IDI7CiAgICBpbnQgbXVsZXMgPSAzOwp9OwoKaW50IEZhcm06OiogZ2V0TWVtYmVyUHRyKGludCB3aGljaE1lbWJlcikKewogICAgc3dpdGNoICh3aGljaE1lbWJlcikKICAgIHsKICAgICAgICBjYXNlIDA6IHJldHVybiAmRmFybTo6Y2hpY2tlbnM7CiAgICAgICAgY2FzZSAxOiByZXR1cm4gJkZhcm06OmNvd3M7CiAgICAgICAgY2FzZSAyOiByZXR1cm4gJkZhcm06Om11bGVzOwogICAgfQoJdGhyb3cgaW52YWxpZF9hcmd1bWVudCgiIik7Cn0KCnZvaWQgY291bnRfYW5pbWFscyhpbnQgRmFybTo6Km1lbWJlcikKewogICAgRmFybSBhbmltYWxfZmFybTsKICAgIGNvdXQgPDwgYW5pbWFsX2Zhcm0uKm1lbWJlcjsKfQoKaW50IG1haW4oKQp7CglpbnQgYW5pbWFsc190b19jb3VudCA9IDA7CglpbnQgRmFybTo6KiBtZW1iZXIgPSBnZXRNZW1iZXJQdHIoYW5pbWFsc190b19jb3VudCk7CiAgICBjb3VudF9hbmltYWxzKG1lbWJlcik7CiAgICByZXR1cm4gMDsKfQ==