assert(false) in release == splinter in eye

Tomek Sowiński just at ask.me
Sun Oct 10 14:22:38 PDT 2010


Christopher Bergqvist napisał:

> Hi,
> 
> Time for some Sunday nitpicking. While reading TDPL, one thing that stuck
> out to me was the special behavior of assert(false). Consider the
> following program compiled with "-release".
> 
> void main()
> {
>     int a = 0;
>     assert(a);
> }
> 
> That program will run without errors. Changing the type of variable a from
> "int" to "enum" results in the program segfaulting thanks to the compiler
> being able to know the value of the expression "a" at compile time and
> inserting a HLT/"halt" instruction. Having the ability to change something
> subtle in a more complex expression or series of expressions without
> realizing you made a compile time assert(false) which crashes your program
> feels ugly.
>
> I would prefer it if assert() didn't have this special type of behavior,
> and that a "halt" keyword or equivalent was introduced. What do you think?

I have the same feeling. 'halt' is good, 'fail' is good too. It doesn't have to be a keyword, a 
function in object.d would suffice.

BTW, does anybody know the reason for the assert(0) infernal syntax?

-- 
Tomek


More information about the Digitalmars-d mailing list