#include <iostream>
using namespace std;
struct customType {
int b;
};
struct Instruction {};
class BasicBlock {
public:
BasicBlock(int a) { InstList.b = a; }
customType InstList;
static customType BasicBlock::*getSublistAccess(Instruction*) {
return &BasicBlock::InstList;
}
};
int main() {
BasicBlock bb(90);
Instruction justForSignature;
// Get a pointer to a member of type customType through the static function
customType BasicBlock::* ptrToMember = BasicBlock::getSublistAccess(&justForSignature);
cout << (bb.*ptrToMember).b; // Parenthesis are necessary, '.' has higher precedence on *
// Output: 90
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IGN1c3RvbVR5cGUgewoJaW50IGI7Cgl9OwpzdHJ1Y3QgSW5zdHJ1Y3Rpb24ge307CgpjbGFzcyBCYXNpY0Jsb2NrIHsKcHVibGljOgoKIEJhc2ljQmxvY2soaW50IGEpIHsgSW5zdExpc3QuYiA9IGE7IH0KIGN1c3RvbVR5cGUgSW5zdExpc3Q7CgogIHN0YXRpYyBjdXN0b21UeXBlIEJhc2ljQmxvY2s6OipnZXRTdWJsaXN0QWNjZXNzKEluc3RydWN0aW9uKikgewogICAgcmV0dXJuICZCYXNpY0Jsb2NrOjpJbnN0TGlzdDsKICB9Cn07CgppbnQgbWFpbigpIHsKCQoJQmFzaWNCbG9jayBiYig5MCk7CgkKCUluc3RydWN0aW9uIGp1c3RGb3JTaWduYXR1cmU7CgkvLyBHZXQgYSBwb2ludGVyIHRvIGEgbWVtYmVyIG9mIHR5cGUgY3VzdG9tVHlwZSB0aHJvdWdoIHRoZSBzdGF0aWMgZnVuY3Rpb24KCWN1c3RvbVR5cGUgQmFzaWNCbG9jazo6KiBwdHJUb01lbWJlciA9IEJhc2ljQmxvY2s6OmdldFN1Ymxpc3RBY2Nlc3MoJmp1c3RGb3JTaWduYXR1cmUpOwoJCgljb3V0IDw8IChiYi4qcHRyVG9NZW1iZXIpLmI7IC8vIFBhcmVudGhlc2lzIGFyZSBuZWNlc3NhcnksICcuJyBoYXMgaGlnaGVyIHByZWNlZGVuY2Ugb24gKgoJLy8gT3V0cHV0OiA5MAoJCglyZXR1cm4gMDsKfQ==