Bug 4325 – invariant syntax isn't strict

Status
RESOLVED
Resolution
INVALID
Severity
normal
Priority
P2
Component
dmd
Product
D
Version
D2
Platform
x86
OS
Windows
Creation time
2010-06-15T18:11:00Z
Last change time
2011-06-15T11:36:37Z
Keywords
accepts-invalid
Assigned to
nobody
Creator
bearophile_hugs

Comments

Comment #0 by bearophile_hugs — 2010-06-15T18:11:01Z
Class/struct invariants are: http://www.digitalmars.com/d/2.0/class.html#Invariant invariant() BlockStatement But dmd v2.047 compiles this with no errors: struct Foo { invariant {} } struct Bar { invariant } class CFoo { invariant {} } class CBar { invariant } void main() {} See also the second part of the bug 3856
Comment #1 by andrej.mitrovich — 2010-08-29T20:01:39Z
The compiler will still print an error if you add any statements below a class invariant, e.g.: struct Foo { invariant {} } struct Bar { int x = 5; invariant assert(x == 1); } class CFoo { invariant {} } class CBar { invariant } void main() { Bar bar; } bug4325.d(7): Declaration expected, not 'assert' So it might not be that bad. The same thing happens if you put "const" "pure" "immutable" without any opening braces or colons, e.g.: struct Foo { pure } struct Bar { const } class CFoo { immutable } class CBar { invariant } void main() { } Compiles fine.
Comment #2 by yebblies — 2011-06-15T08:30:26Z
This has nothing to do with class invariants. This is caused by invariant currently being an alias for immutable. Change invariant to immutable in the examples and it will make sense.
Comment #3 by bearophile_hugs — 2011-06-15T09:51:04Z
(In reply to comment #2) > This has nothing to do with class invariants. This is caused by invariant > currently being an alias for immutable. Change invariant to immutable in the > examples and it will make sense. I see, thank you. Do you want me to open a new enhancement request where I ask for the removal of this alias, or do you prefer me to reopen and rename this bug report?
Comment #4 by yebblies — 2011-06-15T11:36:37Z
> I see, thank you. Do you want me to open a new enhancement request where I ask > for the removal of this alias, or do you prefer me to reopen and rename this > bug report? A new report. Changing the focus of old reports makes it more difficult to process them. (for me at least)