On Friday, 23 June 2017 at 13:26:53 UTC, jmh530 wrote:
On Friday, 23 June 2017 at 13:00:30 UTC, Steven Schveighoffer wrote:

The out contract looks pretty good actually. The in contract, not as good. That looks like a comma expression. I'd rather see this be:

     in(x > 0)
     in(y > 0)

or

     in(x > 0 && y > 0)

In this case, we have something I think I would support.

-Steve

I agree.

Same here: Kudos (!) to Solomon for the out resembling foreach, but I don't support comma separation within in contracts, as it's inconsistent when compared to `&&` and `||`.
Adjusted earlier example:

---
int myFunc(Args...)(Args args)
  if (Args.length > 2)
  in (args[0] != 0, "Yikes!")
  in (args[1] > 1)
  out (result; result > 0, "Oops...")
  out (; globalStateStillValid) { ... }
---

Looks nice and clear to me.

OT: Anyone interested in a DIP for more template constraint unfulfilled information in a consistent way to contracts (?) :
---
int myFunc(Args...)(Args args)
  if (Args.length > 0, "Starving!")
  if (Args.length > 1, "Still hungry!")
  if (Args.length > 2, "Just a little bit more!")
  in (args[0] != 0, "Yikes!")
  in (args[1] > 1, "Why you do this?")
  out (result; result > 0, "Oops...") { ... }
---

Reply via email to