This is probably just a documentation issue. struct A { int a; this(int n) { a = n; } } struct B { int b; this(int n) { b = n; } } struct C { A a; B b; this(int n, int m) { a = A(n); b = B(m); } } struct D { A a; B b; this(int n, int m) { a(n); b(m); } } void main() { C c = C(2, 3); writefln("C:a = %d, C:b = %d", c.a.a, c.b.b); D d = D(2, 3); writefln("D:a = %d, D:b = %d", d.a.a, d.b.b); } D is essentially the same as C, but uses a(n) instead of a = A(n). Both compile, but the former has no effect on the A member. Output: C:a = 2, C:b = 3 D:a = 0, D:b = 0 The documentation should mention the correct syntax, and explain what a(n) means, or the compiler should object to that form.
This is a compiler bug that a(n) is accepted, it is not a documentation problem.
The constructor call from an instance is invalid. *** This issue has been marked as a duplicate of issue 6036 ***