|
|
|
@ -17,23 +17,10 @@
|
|
|
|
|
#include <boost/config.hpp>
|
|
|
|
|
#include <boost/detail/workaround.hpp>
|
|
|
|
|
|
|
|
|
|
#if defined(__GNUC__) && !defined(__GXX_EXPERIMENTAL_CXX0X__)
|
|
|
|
|
//
|
|
|
|
|
// This is horrible, but it seems to be the only we can shut up the
|
|
|
|
|
// "anonymous variadic macros were introduced in C99 [-Wvariadic-macros]"
|
|
|
|
|
// warning that get spewed out otherwise in non-C++11 mode.
|
|
|
|
|
//
|
|
|
|
|
#pragma GCC system_header
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#ifndef BOOST_NO_CXX11_STATIC_ASSERT
|
|
|
|
|
# ifndef BOOST_NO_CXX11_VARIADIC_MACROS
|
|
|
|
|
# define BOOST_STATIC_ASSERT_MSG( ... ) static_assert(__VA_ARGS__)
|
|
|
|
|
# else
|
|
|
|
|
# define BOOST_STATIC_ASSERT_MSG( B, Msg ) BOOST_STATIC_ASSERT( B )
|
|
|
|
|
# endif
|
|
|
|
|
#ifndef BOOST_NO_STATIC_ASSERT
|
|
|
|
|
# define BOOST_STATIC_ASSERT_MSG( B, Msg ) static_assert(B, Msg)
|
|
|
|
|
#else
|
|
|
|
|
# define BOOST_STATIC_ASSERT_MSG( B, Msg ) BOOST_STATIC_ASSERT( B )
|
|
|
|
|
# define BOOST_STATIC_ASSERT_MSG( B, Msg ) BOOST_STATIC_ASSERT( B )
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#ifdef __BORLANDC__
|
|
|
|
@ -52,33 +39,13 @@
|
|
|
|
|
// then enable this:
|
|
|
|
|
//
|
|
|
|
|
#if defined(__GNUC__) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 4)))
|
|
|
|
|
# ifndef BOOST_NO_CXX11_VARIADIC_MACROS
|
|
|
|
|
# define BOOST_STATIC_ASSERT_BOOL_CAST( ... ) ((__VA_ARGS__) == 0 ? false : true)
|
|
|
|
|
# else
|
|
|
|
|
# define BOOST_STATIC_ASSERT_BOOL_CAST( x ) ((x) == 0 ? false : true)
|
|
|
|
|
# endif
|
|
|
|
|
# define BOOST_STATIC_ASSERT_BOOL_CAST( x ) ((x) == 0 ? false : true)
|
|
|
|
|
#else
|
|
|
|
|
# ifndef BOOST_NO_CXX11_VARIADIC_MACROS
|
|
|
|
|
# define BOOST_STATIC_ASSERT_BOOL_CAST( ... ) (bool)(__VA_ARGS__)
|
|
|
|
|
# else
|
|
|
|
|
# define BOOST_STATIC_ASSERT_BOOL_CAST(x) (bool)(x)
|
|
|
|
|
# endif
|
|
|
|
|
#endif
|
|
|
|
|
//
|
|
|
|
|
// If the compiler warns about unused typedefs then enable this:
|
|
|
|
|
//
|
|
|
|
|
#if defined(__GNUC__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 7)))
|
|
|
|
|
# define BOOST_STATIC_ASSERT_UNUSED_ATTRIBUTE __attribute__((unused))
|
|
|
|
|
#else
|
|
|
|
|
# define BOOST_STATIC_ASSERT_UNUSED_ATTRIBUTE
|
|
|
|
|
# define BOOST_STATIC_ASSERT_BOOL_CAST(x) (bool)(x)
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#ifndef BOOST_NO_CXX11_STATIC_ASSERT
|
|
|
|
|
# ifndef BOOST_NO_CXX11_VARIADIC_MACROS
|
|
|
|
|
# define BOOST_STATIC_ASSERT( ... ) static_assert(__VA_ARGS__, #__VA_ARGS__)
|
|
|
|
|
# else
|
|
|
|
|
# define BOOST_STATIC_ASSERT( B ) static_assert(B, #B)
|
|
|
|
|
# endif
|
|
|
|
|
#ifndef BOOST_NO_STATIC_ASSERT
|
|
|
|
|
# define BOOST_STATIC_ASSERT( B ) static_assert(B, #B)
|
|
|
|
|
#else
|
|
|
|
|
|
|
|
|
|
namespace boost{
|
|
|
|
@ -124,28 +91,17 @@ template<int x> struct static_assert_test{};
|
|
|
|
|
typedef ::boost::static_assert_test<\
|
|
|
|
|
sizeof(::boost::STATIC_ASSERTION_FAILURE< (bool)( B ) >)\
|
|
|
|
|
> boost_static_assert_typedef_
|
|
|
|
|
#elif defined(BOOST_MSVC) && defined(BOOST_NO_CXX11_VARIADIC_MACROS)
|
|
|
|
|
#elif defined(BOOST_MSVC)
|
|
|
|
|
#define BOOST_STATIC_ASSERT( B ) \
|
|
|
|
|
typedef ::boost::static_assert_test<\
|
|
|
|
|
sizeof(::boost::STATIC_ASSERTION_FAILURE< BOOST_STATIC_ASSERT_BOOL_CAST ( B ) >)>\
|
|
|
|
|
BOOST_JOIN(boost_static_assert_typedef_, __COUNTER__)
|
|
|
|
|
#elif defined(BOOST_MSVC)
|
|
|
|
|
#define BOOST_STATIC_ASSERT(...) \
|
|
|
|
|
typedef ::boost::static_assert_test<\
|
|
|
|
|
sizeof(::boost::STATIC_ASSERTION_FAILURE< BOOST_STATIC_ASSERT_BOOL_CAST (__VA_ARGS__) >)>\
|
|
|
|
|
BOOST_JOIN(boost_static_assert_typedef_, __COUNTER__)
|
|
|
|
|
#elif (defined(BOOST_INTEL_CXX_VERSION) || defined(BOOST_SA_GCC_WORKAROUND)) && defined(BOOST_NO_CXX11_VARIADIC_MACROS)
|
|
|
|
|
#elif defined(BOOST_INTEL_CXX_VERSION) || defined(BOOST_SA_GCC_WORKAROUND)
|
|
|
|
|
// agurt 15/sep/02: a special care is needed to force Intel C++ issue an error
|
|
|
|
|
// instead of warning in case of failure
|
|
|
|
|
# define BOOST_STATIC_ASSERT( B ) \
|
|
|
|
|
typedef char BOOST_JOIN(boost_static_assert_typedef_, __LINE__) \
|
|
|
|
|
[ ::boost::STATIC_ASSERTION_FAILURE< BOOST_STATIC_ASSERT_BOOL_CAST( B ) >::value ]
|
|
|
|
|
#elif (defined(BOOST_INTEL_CXX_VERSION) || defined(BOOST_SA_GCC_WORKAROUND)) && !defined(BOOST_NO_CXX11_VARIADIC_MACROS)
|
|
|
|
|
// agurt 15/sep/02: a special care is needed to force Intel C++ issue an error
|
|
|
|
|
// instead of warning in case of failure
|
|
|
|
|
# define BOOST_STATIC_ASSERT(...) \
|
|
|
|
|
typedef char BOOST_JOIN(boost_static_assert_typedef_, __LINE__) \
|
|
|
|
|
[ ::boost::STATIC_ASSERTION_FAILURE< BOOST_STATIC_ASSERT_BOOL_CAST( __VA_ARGS__ ) >::value ]
|
|
|
|
|
#elif defined(__sgi)
|
|
|
|
|
// special version for SGI MIPSpro compiler
|
|
|
|
|
#define BOOST_STATIC_ASSERT( B ) \
|
|
|
|
@ -163,32 +119,19 @@ template<int x> struct static_assert_test{};
|
|
|
|
|
sizeof(::boost::STATIC_ASSERTION_FAILURE< BOOST_STATIC_ASSERT_BOOL_CAST( B ) >) )
|
|
|
|
|
#else
|
|
|
|
|
// generic version
|
|
|
|
|
# ifndef BOOST_NO_CXX11_VARIADIC_MACROS
|
|
|
|
|
# define BOOST_STATIC_ASSERT( ... ) \
|
|
|
|
|
typedef ::boost::static_assert_test<\
|
|
|
|
|
sizeof(::boost::STATIC_ASSERTION_FAILURE< BOOST_STATIC_ASSERT_BOOL_CAST( __VA_ARGS__ ) >)>\
|
|
|
|
|
BOOST_JOIN(boost_static_assert_typedef_, __LINE__) BOOST_STATIC_ASSERT_UNUSED_ATTRIBUTE
|
|
|
|
|
# else
|
|
|
|
|
# define BOOST_STATIC_ASSERT( B ) \
|
|
|
|
|
typedef ::boost::static_assert_test<\
|
|
|
|
|
sizeof(::boost::STATIC_ASSERTION_FAILURE< BOOST_STATIC_ASSERT_BOOL_CAST( B ) >)>\
|
|
|
|
|
BOOST_JOIN(boost_static_assert_typedef_, __LINE__) BOOST_STATIC_ASSERT_UNUSED_ATTRIBUTE
|
|
|
|
|
# endif
|
|
|
|
|
#define BOOST_STATIC_ASSERT( B ) \
|
|
|
|
|
typedef ::boost::static_assert_test<\
|
|
|
|
|
sizeof(::boost::STATIC_ASSERTION_FAILURE< BOOST_STATIC_ASSERT_BOOL_CAST( B ) >)>\
|
|
|
|
|
BOOST_JOIN(boost_static_assert_typedef_, __LINE__)
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#else
|
|
|
|
|
// alternative enum based implementation:
|
|
|
|
|
# ifndef BOOST_NO_CXX11_VARIADIC_MACROS
|
|
|
|
|
# define BOOST_STATIC_ASSERT( ... ) \
|
|
|
|
|
enum { BOOST_JOIN(boost_static_assert_enum_, __LINE__) \
|
|
|
|
|
= sizeof(::boost::STATIC_ASSERTION_FAILURE< (bool)( __VA_ARGS__ ) >) }
|
|
|
|
|
# else
|
|
|
|
|
# define BOOST_STATIC_ASSERT(B) \
|
|
|
|
|
enum { BOOST_JOIN(boost_static_assert_enum_, __LINE__) \
|
|
|
|
|
= sizeof(::boost::STATIC_ASSERTION_FAILURE< (bool)( B ) >) }
|
|
|
|
|
# endif
|
|
|
|
|
#define BOOST_STATIC_ASSERT( B ) \
|
|
|
|
|
enum { BOOST_JOIN(boost_static_assert_enum_, __LINE__) \
|
|
|
|
|
= sizeof(::boost::STATIC_ASSERTION_FAILURE< (bool)( B ) >) }
|
|
|
|
|
#endif
|
|
|
|
|
#endif // defined(BOOST_NO_CXX11_STATIC_ASSERT)
|
|
|
|
|
#endif // defined(BOOST_NO_STATIC_ASSERT)
|
|
|
|
|
|
|
|
|
|
#endif // BOOST_STATIC_ASSERT_HPP
|
|
|
|
|
|
|
|
|
|