calvert1991/cpp-btree

NDEBUG defined in btree.h

Opened this issue · 1 comments

What steps will reproduce the problem?

1. Compile and run a program like:

#undef NDEBUG

#include "btree_set.h"
#include <cassert>

int main (void) {
    assert(false);
}

What is the expected output? What do you see instead?

The assertion should fail. Instead the assertion is skipped since btree.h has 
defined NDEBUG to 1. Reversing the order of includes would paper over the issue.

Original issue reported on code.google.com by jsn...@gmail.com on 3 May 2013 at 10:36

Specifically, NDEBUG is one of those very old-school macros for which being 
defined to ANY value, including 0, is treated as true. (Any argument you could 
make that this is stupid, that undefined should mean "available for other code 
to set the default" as opposed to false, would be wasted on me because I agree, 
but it is what it is.) Defining NDEBUG to 0 means to turn off debugging code, 
same as defining it to 1. So, the fix is:


< #define NDEBUG 1
---
> //#define NDEBUG 1
693c693
<     if (!NDEBUG) {
---
> #if !NDEBUG
695c695
<     }
---
> #endif
701c701
<     if (!NDEBUG) {
---
> #if !NDEBUG
703c703
<     }
---
> #endif

Original comment by scott.r...@gmail.com on 26 Jul 2013 at 9:49