#include <iostream>
using namespace std;

struct Base {
	Base operator+ (Base a) const { cout <<"Base+Base\n"; }
	Base& operator= (Base a) const { cout<<"Base=Base\n"; }
};
struct Derived : public Base {
	Derived()=default; 
	Derived(const Base& a) : Base(a) { cout<<"consturct B from A\n"; }
};


int main() {
	Base a,b,c;  
	c=a+b;   // Base+Base   Base=Base
	cout <<endl; 
	Derived e,f,g; 
	g = e+f;  // Base + Base   Construct B from A    Base=Base (In fact default Derived=Derived, which uses Base=Base for the Base subobject)
	return 0;
}