On Thu, Oct 7, 2010 at 8:36 PM, David Kastrup <d...@gnu.org> 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 lilypond-devel@gnu.org http://lists.gnu.org/mailman/listinfo/lilypond-devel