On 2013-01-10, 19:03, monarch_dodra wrote:

On Thursday, 10 January 2013 at 17:46:54 UTC, Dmitry Olshansky wrote:
10-Jan-2013 20:11, monarch_dodra пишет:
On Thursday, 10 January 2013 at 15:54:21 UTC, Andrei Alexandrescu wrote:
On 1/10/13 6:23 AM, monarch_dodra wrote:
So question: Why don't we have, just like for enforce, the possibility
of simply writing:
//----
assert(i <= j, new RangeError());
//----

Define another function...?

Andrei

Well, I would. I'd write an overload, but I can't, because assert is
built-in.

I'd have to provide a new name (such as assertError). This would not be
as convenient as having an overload. That, and a library function can't
match assert's built-in functionality. For example:

//----
struct S()
{
  version(assert)
    bool isValid = false; //debug only variable

  void foo()
  {
    assertError(isValid, new RangeError()); //HERE
  }
}
//----

The problem is that at best, assertError can be a noop-implementation in
release, but the call is still there. The first argument will still get
evaluated. Further more, it may not even compile...

lazy keyword to the rescue.

Still doesn't compile though...


So you're saying this does compile for you, with -release?

struct S( ) {
    version(assert)
        bool isValid = false;

    void foo() {
        assert(isValid);
    }
}

It certainly does not for me.

--
Simen

Reply via email to