Intel C++ fix

[SVN r15351]
This commit is contained in:
Aleksey Gurtovoy
2002-09-16 01:19:05 +00:00
parent f2732e699f
commit 1029ee8032

View File

@ -28,7 +28,7 @@ namespace boost{
// HP aCC cannot deal with missing names for template value parameters // HP aCC cannot deal with missing names for template value parameters
template <bool x> struct STATIC_ASSERTION_FAILURE; template <bool x> struct STATIC_ASSERTION_FAILURE;
template <> struct STATIC_ASSERTION_FAILURE<true>{}; template <> struct STATIC_ASSERTION_FAILURE<true> { enum { value = 1 }; };
// HP aCC cannot deal with missing names for template value parameters // HP aCC cannot deal with missing names for template value parameters
template<int x> struct static_assert_test{}; template<int x> struct static_assert_test{};
@ -58,19 +58,28 @@ template<int x> struct static_assert_test{};
// when used inside integral constant expressions. // when used inside integral constant expressions.
// //
#if !defined(BOOST_BUGGY_INTEGRAL_CONSTANT_EXPRESSIONS) && !defined(__MWERKS__) #if !defined(BOOST_BUGGY_INTEGRAL_CONSTANT_EXPRESSIONS) && !defined(__MWERKS__)
#ifndef BOOST_MSVC
#define BOOST_STATIC_ASSERT( B ) \ #if defined(BOOST_MSVC)
typedef ::boost::static_assert_test<\
sizeof(::boost::STATIC_ASSERTION_FAILURE< (bool)( B ) >)>\
BOOST_JOIN(boost_static_assert_typedef_, __LINE__)
#else
// __LINE__ macro broken when -ZI is used see Q199057 // __LINE__ macro broken when -ZI is used see Q199057
// fortunately MSVC ignores duplicate typedef's. // fortunately MSVC ignores duplicate typedef's.
#define BOOST_STATIC_ASSERT( B ) \ #define BOOST_STATIC_ASSERT( B ) \
typedef ::boost::static_assert_test<\ typedef ::boost::static_assert_test<\
sizeof(::boost::STATIC_ASSERTION_FAILURE< (bool)( B ) >)\ sizeof(::boost::STATIC_ASSERTION_FAILURE< (bool)( B ) >)\
> boost_static_assert_typedef_ > boost_static_assert_typedef_
#elif defined(BOOST_INTEL_CXX_VERSION)
// 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< (bool)( B ) >::value ]
#else
// generic version
#define BOOST_STATIC_ASSERT( B ) \
typedef ::boost::static_assert_test<\
sizeof(::boost::STATIC_ASSERTION_FAILURE< (bool)( B ) >)>\
BOOST_JOIN(boost_static_assert_typedef_, __LINE__)
#endif #endif
#else #else
// alternative enum based implementation: // alternative enum based implementation:
#define BOOST_STATIC_ASSERT( B ) \ #define BOOST_STATIC_ASSERT( B ) \
@ -80,7 +89,3 @@ template<int x> struct static_assert_test{};
#endif // BOOST_STATIC_ASSERT_HPP #endif // BOOST_STATIC_ASSERT_HPP