#include <iostream>
template <typename T> struct A
{
T x;
A(T X) : x(X) { }
static const A a;
};
template <typename T> const A<T> A<T>::a(5);
template <typename T> struct B : public A<T>
{
B(T X) : A<T>(X) { }
static const B b;
};
template <typename T> const B<T> B<T>::b(A<T>::a.x);
int main()
{
//auto test0 = A<int>::a.x;
auto test1 = B<int>::a.x;
auto test2 = B<int>::b.x;
auto test3 = A<int>::a.x;
std::cout << "test1 = " << test1 << "\ttest2 = " << test2 << "\ttest3 = " << test3 << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0cnVjdCBBCnsKICAgIFQgeDsKICAgIEEoVCBYKSA6IHgoWCkgeyB9ICAgCiAgICBzdGF0aWMgY29uc3QgQSBhOwp9Owp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY29uc3QgQTxUPiBBPFQ+OjphKDUpOwoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0cnVjdCBCIDogcHVibGljIEE8VD4KewogICAgQihUIFgpIDogQTxUPihYKSB7IH0KICAgIHN0YXRpYyBjb25zdCBCIGI7Cn07CnRlbXBsYXRlIDx0eXBlbmFtZSBUPiBjb25zdCBCPFQ+IEI8VD46OmIoQTxUPjo6YS54KTsKCmludCBtYWluKCkKewogICAgLy9hdXRvIHRlc3QwID0gQTxpbnQ+OjphLng7CiAgICBhdXRvIHRlc3QxID0gQjxpbnQ+OjphLng7CiAgICBhdXRvIHRlc3QyID0gQjxpbnQ+OjpiLng7CiAgICBhdXRvIHRlc3QzID0gQTxpbnQ+OjphLng7CiAgICBzdGQ6OmNvdXQgPDwgInRlc3QxID0gIiA8PCB0ZXN0MSA8PCAiXHR0ZXN0MiA9ICIgPDwgdGVzdDIgPDwgIlx0dGVzdDMgPSAiIDw8IHRlc3QzIDw8IHN0ZDo6ZW5kbDsKCiAgICByZXR1cm4gMDsKfQ==