|
Boost : |
From: Gennaro Prota (gennaro_prota_at_[hidden])
Date: 2003-03-11 15:27:29
On Tue, 11 Mar 2003 17:46:17 +0100, Dirk Gerrits
<dirk_at_[hidden]> wrote:
>> In effect I would prefer the one without __LINE__. But if any compiler
>> warns about duplicate typedefs than it's better having a single
>> version, with __LINE__, than #ifs.
>>
>> Also I have a slight preference for using void instead of char, as
>> suggested by Greg:
>>
>>
>> typedef void boost_static_assert_typedef
>
>Perhaps I missed a part of the discussion, but what is wrong with Jaap's
>suggestion:
>
>#ifdef BOOST_STATIC_NDEBUG
> #define BOOST_STATIC_ASSERT( B ) BOOST_STATIC_ASSERT_IMPL( true )
>#else
> #define BOOST_STATIC_ASSERT( B ) BOOST_STATIC_ASSERT_IMPL( B )
>#endif
>
>?
Well, considering that what we want is just a no-op, which do you
prefer?
a) typedef ::boost::static_assert_test<
sizeof(::boost::STATIC_ASSERTION_FAILURE< (bool)( true ) >)>
BOOST_JOIN(boost_static_assert_typedef_, __LINE__);
(I've just picked up one of the implementations in static_assert.hpp,
but the others don't differ too much.)
b) typedef void boost_static_assert_typedef;
As I said however, there can be compilers that warn about duplicate
typedefs like
namespace xyz {
typedef void boost_static_assert_typedef;
typedef void boost_static_assert_typedef;
}
(To be honest, I'm afraid some compiler even gives an error, confusing
the C rule with the C++ one. But I don't know of any (fortunately
:-)). Anyhow, let's not put the cart before the horse. If such a
compiler shows up then we'll consider using __LINE__; before that,
let's just use
typedef void boost_static_assert_typedef
Genny.
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk