Terje Slettebų <[EMAIL PROTECTED]> writes:

>>From: "David Abrahams" <[EMAIL PROTECTED]>
>
>> Dirk Gerrits <[EMAIL PROTECTED]> writes:
>>
>> > Dirk Gerrits wrote:
>> >  >
>> >  > I'd say something like:
>> >  >
>> >  > #ifdef STATIC_NDEBUG
>> >  > #    define BOOST_STATIC_ASSERT2(e) BOOST_STATIC_ASSERT(e)
>> >  > #else
>> >  > #    define BOOST_STATIC_ASSERT2(e) (void(e))
>> >  > #endif
>> >  >
>> >  > Analogous to <cassert>.
>> >
>> > Argh, the if and else branches should be reversed of course. You've
>> > gotta love negative logic. ;)
>>
>> I like the basic idea, but are you sure it will work in all the
>> contexts where BOOST_STATIC_ASSERT works?  I think BOOST_STATIC_ASSERT
>> functions like a declaration, syntactically.
>
> Then how about simply:
>
> #ifndef STATIC_NDEBUG
> #    define BOOST_STATIC_ASSERT2(e) BOOST_STATIC_ASSERT(e)
> #else
> #    define BOOST_STATIC_ASSERT2(e) // Possibly "void(0)" here, like
> "assert"
> #endif
>
> By the way, what's the point with "void(0)", compared to nothing? Both
> "void(0);" and ";" are valid statements.

is ";" legal where a declaration is expected?

class X
{
   ; // legal?
};

Comeau says it isn't:

MODE:strict errors C++

"ComeauTest.c", line 3: error: extra ";" ignored,
        In C: A function definition does not end with a semicolon
        In C++: A function definition, extern "C" or namespace, does not end with a 
semicolon
     ; // legal?
     ^

-- 
Dave Abrahams
Boost Consulting
www.boost-consulting.com

_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost

Reply via email to