www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 21689] New: Contracts (in/out) is not checked when for

https://issues.dlang.org/show_bug.cgi?id=21689

          Issue ID: 21689
           Summary: Contracts (in/out) is not checked when for interfaces
                    methods
           Product: D
           Version: D2
          Hardware: All
               URL: http://dlang.org/
                OS: All
            Status: NEW
          Severity: enhancement
          Priority: P3
         Component: dlang.org
          Assignee: nobody puremagic.com
          Reporter: cr tagion.org

Created attachment 1820
  --> https://issues.dlang.org/attachment.cgi?id=1820&action=edit
Example

I know that this has been reported as a bug before but it was declined as a
bug.
I reported it some years back also and I found two other similar reports
issue-12227 and issue-21298.

I continue to fall into this trap of this feature when I use an interface
and nearly all of my colleagues which new to D fall into this.

It is not logical that the pre/post-condition is not functional just because it
comes from an interface.

In my option, class C and CI should both execute the pre-condition, or at least
the compiler should make an error and tell that preconditions are not allowed
when the function is defined in an interface.

```
interface I {
    int func(int x);
}

class CI : I {
    int func(int x)
        in {
            assert(x > 0);
        }
    do {
        return x*x;
    }
}

class C {
    int func(int x)
        in {
            assert(x > 0);
        }
    do {
        return x*x;
    }
}
```

Thank you for the good work.

--
Mar 08