On Friday, 3 October 2014 at 20:28:21 UTC, H. S. Teoh via
Digitalmars-d wrote:
On Fri, Oct 03, 2014 at 08:02:14PM +0000, monarch_dodra via
Digitalmars-d wrote:
On Friday, 3 October 2014 at 19:21:38 UTC, Dmitry Olshansky
wrote:
>03-Oct-2014 23:08, Ali Çehreli пишет:
>>I know that assert is not a function but it would be nice to
>>have.
>>
>
>Indeed. If we make it a function and put in object.d would
>anyone
>notice the change?
I think there are semantics that prevent that. Such as
"assert(0)", or
removing the evaluation of arg in "assert(arg())" altogether in
release.
void assert(lazy bool exp) {
version(assert) // (!)
if (!exp) __fatal_runtime_error();
}
Doesn't work for assert(0); but does work for not evaluating the
argument in release build. (Yeah I know, implementation of
'lazy' leaves
a lot to be desired, but hey, that can be argued to be a QOI
issue.)
T
There might still be an issue in regards to linking though: I
have some code where assert-only functions are only defined for
non-release.