#include <iostream>

struct B1 {};
struct B2 {};
struct D : public B1, B2 {};

int main(int argc, char **argv) {
    using namespace std;

	cout << "B1:" << sizeof(B1) << endl;
	cout << "B2:" << sizeof(B2) << endl;
	cout << "D:" << sizeof(D) << endl;
	cout << "D::B1:" << sizeof(D::B1) << endl;
	cout << "D::B2:" << sizeof(D::B2) << endl;

	D d;
	cout << &static_cast<B2&>(d) << " , " << &d << endl;
	cout << &(B2&)d << " , " << &d << endl;
	D da[2];
	cout << &static_cast<B2&>(da[0]) << " , " << &da[1] << endl;
	cout << &(B2&)da[0] << " , " << &da[1] << endl;
	return 0;
}

