#include <iostream>
typedef int member_type;
struct base {
base(base&&) { std::cout << "base moved\n"; }
base(member_type&& m): member_(std::move(m)) { std::cout << "base inited\n"; }
member_type member_;
};
struct virt_1: virtual base {
virt_1(virt_1&& rhs): base(std::move(rhs)) {}
virt_1(member_type&& m): base(std::move(m)) {}
};
struct virt_2: virtual base {
virt_2(virt_2&& rhs): base(std::move(rhs)) {}
virt_2(member_type&& m): base(std::move(m)) {}
};
struct concrete: virt_1, virt_2, private virtual base {
concrete(concrete&& rhs) = default;
concrete( int a ) : base( std::move( a ) ), virt_1( 1 ), virt_2( 2 ) {}
};
int main() {
concrete a( 5 );
concrete b = std::move( a );
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdHlwZWRlZiBpbnQgbWVtYmVyX3R5cGU7CgpzdHJ1Y3QgYmFzZSB7CiAgICBiYXNlKGJhc2UmJikgeyBzdGQ6OmNvdXQgPDwgImJhc2UgbW92ZWRcbiI7IH0KICAgIGJhc2UobWVtYmVyX3R5cGUmJiBtKTogbWVtYmVyXyhzdGQ6Om1vdmUobSkpIHsgc3RkOjpjb3V0IDw8ICJiYXNlIGluaXRlZFxuIjsgfQogICAgbWVtYmVyX3R5cGUgbWVtYmVyXzsKfTsKCnN0cnVjdCB2aXJ0XzE6IHZpcnR1YWwgYmFzZSB7CiAgICB2aXJ0XzEodmlydF8xJiYgcmhzKTogYmFzZShzdGQ6Om1vdmUocmhzKSkge30KICAgIHZpcnRfMShtZW1iZXJfdHlwZSYmIG0pOiBiYXNlKHN0ZDo6bW92ZShtKSkge30KfTsKCnN0cnVjdCB2aXJ0XzI6IHZpcnR1YWwgYmFzZSB7CiAgICB2aXJ0XzIodmlydF8yJiYgcmhzKTogYmFzZShzdGQ6Om1vdmUocmhzKSkge30KICAgIHZpcnRfMihtZW1iZXJfdHlwZSYmIG0pOiBiYXNlKHN0ZDo6bW92ZShtKSkge30KfTsKCnN0cnVjdCBjb25jcmV0ZTogdmlydF8xLCB2aXJ0XzIsIHByaXZhdGUgdmlydHVhbCBiYXNlIHsKICAgIGNvbmNyZXRlKGNvbmNyZXRlJiYgcmhzKSA9IGRlZmF1bHQ7CiAgICBjb25jcmV0ZSggaW50IGEgKSA6IGJhc2UoIHN0ZDo6bW92ZSggYSApICksIHZpcnRfMSggMSApLCB2aXJ0XzIoIDIgKSB7fQp9OwoKaW50IG1haW4oKSB7CiAgICBjb25jcmV0ZSBhKCA1ICk7CiAgICBjb25jcmV0ZSBiID0gc3RkOjptb3ZlKCBhICk7Cn0=