import std.stdio, std.traits; struct A { private immutable int _a; private immutable double _b; this(int a, double b) { _a = a; _b = b; } auto alpha() @property { return _a; } auto beta() @property { return _b; } } struct B { A one; A two; this(ParameterTypeTuple!A inputOne, ParameterTypeTuple!A inputTwo) { one = A(inputOne); two = A(inputTwo); } } void main() { auto join = B(1, 3.2, 5, 6.9); writeln(join.one.alpha, "\t", join.one.beta); writeln(join.two.alpha, "\t", join.two.beta); }