Boost logo

Boost :

Subject: Re: [boost] suggestion on assertion macros
From: Roland Bock (rbock_at_[hidden])
Date: 2010-03-14 11:15:26

Mateusz Loskot wrote:
>> Currently I get compiler warnings about my_param being unused when
>> compiling with NDEBUG defined.
> Yes, that is a problem though of different nature than categories of
> assertions.
>> I'd be glad to get rid of them. And I
>> certainly do not want to have my code sprinkled with
>> #ifdef NDEBUG
>> void my_method(const int&)
>> #else
>> void my_method(const int& my_param)
>> #endif
>> {
>> assert(my_param);
>> }
> AFAIK, this is an issue of particular implementation you use.
> The assert macro from GNU C Library wraps its argument
> cast to void if NDEBUG is defined. No warning is issued.
> Best regards,

Hmm. I use gcc (4.2.4) and I get the warning (-Wall -Wextra). That's why
I proposed that code in the other part of this discussion (with great
help from Peter and Steven):

#include <cassert>

#ifdef NDEBUG
  #ifdef assert
     #undef assert
     #define assert(cond) static_cast<void>(sizeof(cond? 0: 0));

int main() {
  int i = 0;


This way, I get no warning about variable i being unused, it is even
being made sure that the condition for the assertion is verifiable and
still the code results in nothing if NDEBUG is defined.

I plan on using that myself. I think it would be useful for others, too.



Boost list run by bdawes at, gregod at, cpdaniel at, john at