#include <stdio.h>
class A {
public:
A() { a = 0; printf("A()\n"); }
int a;
};
class B : virtual public A {
};
class C : public B {
public:
C() {}
C(const C &from) : B(from) {}
};
template<typename T>
void
test() {
T t1;
t1.a = 3;
printf("pre-copy\n");
T t2(t1);
printf("post-copy\n");
printf("t1.a=%d\n", t1.a);
printf("t2.a=%d\n", t2.a);
}
int
main() {
printf("B:\n");
test<B>();
printf("\n");
printf("C:\n");
test<C>();
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgpjbGFzcyBBIHsKcHVibGljOgogICAgQSgpIHsgYSA9IDA7IHByaW50ZigiQSgpXG4iKTsgfQoKICAgIGludCBhOwp9OwoKY2xhc3MgQiA6IHZpcnR1YWwgcHVibGljIEEgewp9OwoKY2xhc3MgQyA6IHB1YmxpYyBCIHsKcHVibGljOgogICAgQygpIHt9CiAgICBDKGNvbnN0IEMgJmZyb20pIDogQihmcm9tKSB7fQp9OwoKdGVtcGxhdGU8dHlwZW5hbWUgVD4Kdm9pZAp0ZXN0KCkgewogICAgVCB0MTsKICAgIHQxLmEgPSAzOwogICAgcHJpbnRmKCJwcmUtY29weVxuIik7CiAgICBUIHQyKHQxKTsKICAgIHByaW50ZigicG9zdC1jb3B5XG4iKTsKICAgIHByaW50ZigidDEuYT0lZFxuIiwgdDEuYSk7CiAgICBwcmludGYoInQyLmE9JWRcbiIsIHQyLmEpOwp9CgppbnQKbWFpbigpIHsKICAgIHByaW50ZigiQjpcbiIpOwogICAgdGVzdDxCPigpOwoKICAgIHByaW50ZigiXG4iKTsKCiAgICBwcmludGYoIkM6XG4iKTsKICAgIHRlc3Q8Qz4oKTsKfQ==