No TypeTuple expansion for assert?

monarch_dodra via Digitalmars-d digitalmars-d at puremagic.com
Sat Oct 4 12:58:16 PDT 2014


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.


More information about the Digitalmars-d mailing list