On Thu, Oct 7, 2010 at 8:36 PM, David Kastrup <[email protected]> wrote:
>
> -#define ASSERT_LIVE_IS_ALLOWED()
> +#define ASSERT_LIVE_IS_ALLOWED() {};
>
> The problem is that the replaced statement defines
> ASSERT_LIVE_IS_ALLOWED() as being 1, while the second defines it as {};.
> That is a particular bad idea for things like
>
> if (condition) ASSERT_LIVE_IS_ALLOWED(); else ...
My understanding was that this is a debugging construct which is only
used as a function call. I mean, the "non-else" definition of
ASSERT_LIVE would also run into problems in that construct:
#ifndef NDEBUG
#define ASSERT_LIVE_IS_ALLOWED() \
static bool passed_here_once;\
if (parsed_objects_should_be_dead && !passed_here_once) { \
::programming_error (string ("Parsed object should be dead: ") +
__PRETTY_FUNCTION__ ); \
passed_here_once = true;\
}
#else
#define ASSERT_LIVE_IS_ALLOWED() {};
#endif
in that the macro might look like a single statement, but it gets
expanded into two. (is it worth enclosing the non-else definition
with a { } to avoid this?)
> So either ASSERT_LIVE_IS_ALLOWED() should be explicitly defined as 1.
I'm fine with that change, if it makes sense given the non-else
definition. I'm kind-of out of my depth here.
Cheers,
- Graham
_______________________________________________
lilypond-devel mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/lilypond-devel