Bug 7180 – Documentation bug of "Const and Invariant Structs"

Status
RESOLVED
Resolution
WORKSFORME
Severity
normal
Priority
P2
Component
dmd
Product
D
Version
D2
Platform
All
OS
All
Creation time
2011-12-28T23:48:00Z
Last change time
2012-01-21T01:18:28Z
Keywords
spec
Assigned to
andrei
Creator
k.hara.pg

Comments

Comment #0 by k.hara.pg — 2011-12-28T23:48:35Z
From http://d-programming-language.org/struct.html > Const and Invariant Structs > > A struct declaration can have a storage class of const, immutable or shared. > It has an equivalent effect as declaring each member of the struct as const, > immutable or shared. > > const struct S { int a; int b = 2; } > > void main() { > S s = S(3); // initializes s.a to 3 > S t; // initializes t.a to 0 > t = s; // ok, t.a is now 3 // (line 6) > t.a = 4; // error, t.a is const // (line 7) > } Current dmd (2.058head) raises following errors against the sample code: test.d(6): Error: variable test.main.t cannot modify const test.d(7): Error: can only initialize const member a inside constructor Because the definition of S is internally translated to: struct __S { int a; int b = 2; } alias const(__S) S; But, if you replace the definition to struct S { const int a; const int b = 2; } the compilation still raises: test.d(6): Error: variable test.main.t cannot modify struct with immutable members test.d(7): Error: can only initialize const member a inside constructor Because mutable object that has non-mutable members is "not assignable", then t = s is invalid, even if t and s are mutable S. Finally I think this is documentation bug.
Comment #1 by bugzilla — 2012-01-21T01:18:28Z
The documentation was recently fixed.