class Hage
{
private:
static int a;
int b;
void f() {}
};
int Hage::a;
using PA = int *;
using PM = int Hage::*;
using PMF = void (Hage::*)();
extern PA pa{};
extern PM pm{};
extern PMF pmf{};
auto fack(PA v1, PM v2, PMF v3)
{
pa = v1;
pm = v2;
pmf = v3;
return 0;
}
template<PA v1, PM v2, PMF v3> int dummy = fack(v1, v2, v3);
template int dummy<&Hage::a, &Hage::b, &Hage::f>;
int main()
{
(*pa)++;
Hage obj;
(obj.*pm)++;
(obj.*pmf)();
}
Y2xhc3MgSGFnZQp7CnByaXZhdGU6CglzdGF0aWMgaW50IGE7CglpbnQgYjsKCXZvaWQgZigpIHt9Cn07CgppbnQgSGFnZTo6YTsKCgoKdXNpbmcgUEEgID0gaW50ICo7CnVzaW5nIFBNICA9IGludCBIYWdlOjoqOwp1c2luZyBQTUYgPSB2b2lkIChIYWdlOjoqKSgpOwpleHRlcm4gUEEgIHBhe307CmV4dGVybiBQTSAgcG17fTsKZXh0ZXJuIFBNRiBwbWZ7fTsKCmF1dG8gZmFjayhQQSB2MSwgUE0gdjIsIFBNRiB2MykKewoJcGEgID0gdjE7CglwbSAgPSB2MjsKCXBtZiA9IHYzOwoJcmV0dXJuIDA7Cn0KCnRlbXBsYXRlPFBBIHYxLCBQTSB2MiwgUE1GIHYzPiBpbnQgZHVtbXkgPSBmYWNrKHYxLCB2MiwgdjMpOwp0ZW1wbGF0ZSAgICAgICAgICAgICAgICAgICAgICAgaW50IGR1bW15PCZIYWdlOjphLCAmSGFnZTo6YiwgJkhhZ2U6OmY+OwoKaW50IG1haW4oKQp7CgkoKnBhKSsrOwoKCUhhZ2Ugb2JqOwoJKG9iai4qcG0pKys7Cgkob2JqLipwbWYpKCk7Cn0K