[Issue 3578] New: Impossible to run a struct invariant using assert(s)

d-bugmail at puremagic.com d-bugmail at puremagic.com
Sat Dec 5 08:24:57 PST 2009


http://d.puremagic.com/issues/show_bug.cgi?id=3578

           Summary: Impossible to run a struct invariant using assert(s)
           Product: D
           Version: 1.041
          Platform: All
        OS/Version: All
            Status: NEW
          Severity: normal
          Priority: P2
         Component: DMD
        AssignedTo: nobody at puremagic.com
        ReportedBy: llucax at gmail.com


--- Comment #0 from Leandro Lucarella <llucax at gmail.com> 2009-12-05 08:24:54 PST ---
This fails to compile (with -unittest):

---
struct S {
    invariant() { assert (false); }
    unittest { S s; assert (s); }
}
---

With this error message:
  inv.d(3): Error: expression s of type S does not have a boolean value

With both DMD 1 and 2 (tested with DMD 1.041 and DMD 2.037. Changing struct to
class compiles fine (and dumps a core if you run it, of course ;).

Thes specs are not clear on this in both D1 and D2. Invariant is only mentioned
in structs, but I guess it's more likely to think that the description of class
invariant apply to structs too, so I guess this should be supported in both D1
and D2.

If it's a change to big to make it in D1, I think the specs should be updated
to clarify the differences between struct and class invariants. In D2 I don't
see why the language should not be updated to support this, since there is no
other way to trigger an invariant check (and, for example, invariant is not
executed when a struct is constructed or when using alias this, I think).

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------


More information about the Digitalmars-d-bugs mailing list