rem: cout << "sizeof(X) == " << sizeof(X) << '\n'; cout << "sizeof(Y) == " << sizeof(Y) << '\n';  binary<X, Y, Base> b1; b1.left().foo(); b1.right().foo(); cout << "sizeof(binary<X, Y, Base>) == " << sizeof(binary<X, Y, Base>) << '\n';  A_ u1; u1.subject().left().foo(); u1.subject().right().foo(); cout << "sizeof(unary<binary<X, Y, Base>, Base>) == " << sizeof(A_) << '\n';  B_ b; C_ c; binary<B_, C_, Base> b2(b, c); b2.left().foo(); b2.right().foo(); cout << "sizeof(binary<B_&, C_&, Base>) == " << sizeof(binary<B_, C_, Base>) << '\n';  cout << "sizeof(binary<binary<X, Y, Base>, binary<X, Y, Base>, Base>) == " << sizeof(binary<Z, Z, Base>) << '\n';
context: composite_tests(){    cout << "sizeof(X) == " << sizeof(X) << '\n';    cout << "sizeof(Y) == " << sizeof(Y) << '\n';    binary<X, Y, Base> b1;    b1.left().foo();    b1.right().foo();    cout << "sizeof(binary<X, Y, Base>) == "        << sizeof(binary<X, Y, Base>) << '\n';    A_ u1;    u1.subject().left().foo();    u1.subject().right().foo();    cout << "sizeof(unary<binary<X, Y, Base>, Base>) == "        << sizeof(A_) << '\n';    B_ b; C_ c;    binary<B_, C_, Base> b2(b, c);    b2.left().foo();    b2.right().foo();    cout << "sizeof(binary<B_&, C_&, Base>) == "        << sizeof(binary<B_, C_, Base>) << '\n';    cout << "sizeof(binary<binary<X, Y, Base>, binary<X, Y, Base>, Base>) == "        << sizeof(binary<Z, Z, Base>) << '\n';}