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

And using "assertError" also still isn't as convenient as "assert"

Reply via email to