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