Bug 2916 – struct constructor use syntax undocumented
Status
RESOLVED
Resolution
DUPLICATE
Severity
normal
Priority
P2
Component
dmd
Product
D
Version
D2
Platform
x86
OS
Windows
Creation time
2009-04-30T05:09:00Z
Last change time
2015-06-09T01:26:26Z
Keywords
accepts-invalid
Assigned to
nobody
Creator
steve.teale
Comments
Comment #0 by steve.teale — 2009-04-30T05:09:12Z
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.
Comment #1 by bugzilla — 2012-01-23T00:57:33Z
This is a compiler bug that a(n) is accepted, it is not a documentation problem.
Comment #2 by k.hara.pg — 2012-01-23T04:59:33Z
The constructor call from an instance is invalid.
*** This issue has been marked as a duplicate of issue 6036 ***