struct T
{
int a;
};
struct C
{
T& r;
C(T& v) : r(v) {}
};
struct E : T
{
T& r;
E(T const& v) : r(*this), T(v) {} // ok
};
struct F : C, T // base order doesn't matter here
{
F(T const& v) : C(*this), T(v) {} // error : C::r is not initialized properly
//F(T const& v) : C(*static_cast<T*>(this)), T(v) {} // ok
//F(T const& v) : C(static_cast<T&>(*this)), T(v) {} // ok
};
int main()
{
T v;
F f(v);
f.r.a = 1;
}
c3RydWN0IFQKewogICAgaW50IGE7Cn07CgpzdHJ1Y3QgQwp7CiAgICBUJiByOwogICAgQyhUJiB2KSA6IHIodikge30KfTsKCnN0cnVjdCBFIDogVAp7CiAgICBUJiByOwogICAgRShUIGNvbnN0JiB2KSA6IHIoKnRoaXMpLCBUKHYpIHt9ICAgLy8gb2sKfTsKCnN0cnVjdCBGIDogQywgVCAvLyBiYXNlIG9yZGVyIGRvZXNuJ3QgbWF0dGVyIGhlcmUKewogICAgRihUIGNvbnN0JiB2KSA6IEMoKnRoaXMpLCBUKHYpIHt9ICAgLy8gZXJyb3IgOiBDOjpyIGlzIG5vdCBpbml0aWFsaXplZCBwcm9wZXJseQogICAgLy9GKFQgY29uc3QmIHYpIDogQygqc3RhdGljX2Nhc3Q8VCo+KHRoaXMpKSwgVCh2KSB7fSAgIC8vIG9rCiAgICAvL0YoVCBjb25zdCYgdikgOiBDKHN0YXRpY19jYXN0PFQmPigqdGhpcykpLCBUKHYpIHt9ICAgLy8gb2sKfTsKCmludCBtYWluKCkKewogICAgVCB2OwogICAgRiBmKHYpOwogICAgZi5yLmEgPSAxOwp9