[Issue 3722] New: A method without an in contract should always succeed, even if overridden

d-bugmail at puremagic.com d-bugmail at puremagic.com
Tue Jan 19 01:25:05 PST 2010


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

           Summary: A method without an in contract should always succeed,
                    even if overridden
           Product: D
           Version: 2.039
          Platform: Other
        OS/Version: All
            Status: NEW
          Severity: normal
          Priority: P2
         Component: DMD
        AssignedTo: nobody at puremagic.com
        ReportedBy: kiki at kmonos.net


--- Comment #0 from Kazuhiro Inaba <kiki at kmonos.net> 2010-01-19 01:25:04 PST ---
In dmd 2.039, the following code fails to pass the in-contract.

class Base
{
   void method() {}
}

class Derived : Base
{
   void method() in { assert(false); } body {}
}

void main()
{
   Base b = new Derived;
   b.method();
}

But, according to the spec, IIUC, it should successfully pass the check.

> A function without an in contract means that any values of the function parameters are allowed. This implies that if any function in an inheritance hierarchy has no in contract, then in contracts on functions overriding it have no useful effect.

If I add an explicit empty in-contract to Base.method:
  void method() in{} body{}
then it passes the check.

-- 
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