#include <iostream>
template<class CRTP> class A0
{
public:
void myfunction1();
protected:
~A0() {}
public:
double mymember;
};
template<class CRTP> class B0 : public A0<CRTP>
{
public:
void myfunction2();
protected:
~B0() {}
};
template<class CRTP> class C1 : public B0<CRTP>
{
public:
void myfunction3();
protected:
~C1() {}
};
template<class CRTP> class C2 : public B0<CRTP>
{
public:
void myfunction4();
protected:
~C2() {}
};
class D1 : public C1<D1>, public C2<D1>
{
public:
void myfunction5();
};
using namespace std;
int main() {
D1 d;
d.C1<D1>::mymember = 5;
d.C2<D1>::mymember = 27;
cout << d.C1<D1>::mymember << ", " << d.C2<D1>::mymember << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdGVtcGxhdGU8Y2xhc3MgQ1JUUD4gY2xhc3MgQTAKewogICAgcHVibGljOgogICAgICAgIHZvaWQgbXlmdW5jdGlvbjEoKTsKICAgIHByb3RlY3RlZDoKICAgICAgICB+QTAoKSB7fQogICAgcHVibGljOgogICAgICAgIGRvdWJsZSBteW1lbWJlcjsKfTsKCnRlbXBsYXRlPGNsYXNzIENSVFA+IGNsYXNzIEIwIDogcHVibGljIEEwPENSVFA+CnsKICAgIHB1YmxpYzoKICAgICAgICB2b2lkIG15ZnVuY3Rpb24yKCk7CiAgICBwcm90ZWN0ZWQ6CiAgICAgICAgfkIwKCkge30KfTsKCnRlbXBsYXRlPGNsYXNzIENSVFA+IGNsYXNzIEMxIDogcHVibGljIEIwPENSVFA+CnsKICAgIHB1YmxpYzoKICAgICAgICB2b2lkIG15ZnVuY3Rpb24zKCk7CiAgICBwcm90ZWN0ZWQ6CiAgICAgICAgfkMxKCkge30KfTsKCnRlbXBsYXRlPGNsYXNzIENSVFA+IGNsYXNzIEMyIDogcHVibGljIEIwPENSVFA+CnsKICAgIHB1YmxpYzoKICAgICAgICB2b2lkIG15ZnVuY3Rpb240KCk7CiAgICBwcm90ZWN0ZWQ6CiAgICAgICAgfkMyKCkge30KfTsKCmNsYXNzIEQxIDogcHVibGljIEMxPEQxPiwgcHVibGljIEMyPEQxPgp7CiAgICBwdWJsaWM6CiAgICAgICAgdm9pZCBteWZ1bmN0aW9uNSgpOwp9OwoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmludCBtYWluKCkgewogIEQxIGQ7CiAgZC5DMTxEMT46Om15bWVtYmVyID0gNTsKICBkLkMyPEQxPjo6bXltZW1iZXIgPSAyNzsKICBjb3V0IDw8IGQuQzE8RDE+OjpteW1lbWJlciA8PCAiLCAiIDw8IGQuQzI8RDE+OjpteW1lbWJlciA8PCBlbmRsOwogIHJldHVybiAwOwp9