#include <iostream>

using namespace std;

class Inner2 {
public:
	Inner2() { cout << "Inner2()" << endl; }
};

class Inner1 {
public:
	Inner1() : inner2(Inner2()) {
		cout << "Inner1()" << endl;
	}
	Inner2 inner2;
};

Inner1 makeInner1() { return Inner1(); }

class Hoge {
public:
	Hoge() : Hoge(makeInner1()) {
		cout << "Hoge()" << endl;
	}
	
	Hoge(Inner1 &&inner1) : Hoge(std::move(inner1.inner2)) {
		cout << "Hoge(Inner1 &&)" << endl;
	}
	
	Hoge(Inner2 &&inner2) : inner2(inner2) {
		cout << "Hoge(Inner2 &&)" << endl;
	}
	
private:
	Inner2 inner2;
};

int main(){
	Hoge h;
	return 0;
}

