From bc5065e4958588dd3ad9f1031baf6402f37e41bc Mon Sep 17 00:00:00 2001 From: John Maddock Date: Thu, 21 Feb 2008 16:49:59 +0000 Subject: [PATCH 1/3] Added link to PDF docs. [SVN r43357] --- doc/static_assert.qbk | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/doc/static_assert.qbk b/doc/static_assert.qbk index 7ff0b58..4b62e84 100644 --- a/doc/static_assert.qbk +++ b/doc/static_assert.qbk @@ -15,6 +15,10 @@ [last-revision $Date$] ] +This manual is also available in +[@http:svn.boost.org/svn/boost/sandbox/pdf/static_assert/release/static_assert.pdf +printer friendly PDF format]. + [section:intro Overview and Tutorial] The header `` supplies a single macro `BOOST_STATIC_ASSERT(x)`, @@ -94,12 +98,17 @@ the user that the template is being misused. #include template - RandomAccessIterator foo(RandomAccessIterator from, RandomAccessIterator to) + RandomAccessIterator foo(RandomAccessIterator from, + RandomAccessIterator to) { // this template can only be used with // random access iterators... - typedef typename std::iterator_traits< RandomAccessIterator >::iterator_category cat; - BOOST_STATIC_ASSERT((boost::is_convertible::value)); + typedef typename std::iterator_traits< + RandomAccessIterator >::iterator_category cat; + BOOST_STATIC_ASSERT( + (boost::is_convertible< + cat, + const std::random_access_iterator_tag&>::value)); // // detail goes here... return from; From 8b819d5c6c61d157affe731f5ed9d5568c576760 Mon Sep 17 00:00:00 2001 From: John Maddock Date: Tue, 1 Apr 2008 17:53:56 +0000 Subject: [PATCH 2/3] Changed BOOST_STATIC_ASSERT for GCC to suppress warnings about old C style casts. [SVN r43988] --- include/boost/static_assert.hpp | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/include/boost/static_assert.hpp b/include/boost/static_assert.hpp index 3ffa952..5bded5e 100644 --- a/include/boost/static_assert.hpp +++ b/include/boost/static_assert.hpp @@ -28,6 +28,16 @@ # define BOOST_SA_GCC_WORKAROUND #endif +// +// If the compiler issues warnings about old C style casts, +// then enable this: +// +#if defined(__GNUC__) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 4))) +# define BOOST_STATIC_ASSERT_BOOL_CAST( x ) ((x) == 0 ? false : true) +#else +# define BOOST_STATIC_ASSERT_BOOL_CAST(x) (bool)(x) +#endif + #ifdef BOOST_HAS_STATIC_ASSERT # define BOOST_STATIC_ASSERT( B ) static_assert(B, #B) #else @@ -78,14 +88,14 @@ template struct static_assert_test{}; #elif defined(BOOST_MSVC) #define BOOST_STATIC_ASSERT( B ) \ typedef ::boost::static_assert_test<\ - sizeof(::boost::STATIC_ASSERTION_FAILURE< (bool)( B ) >)>\ + sizeof(::boost::STATIC_ASSERTION_FAILURE< BOOST_STATIC_ASSERT_BOOL_CAST ( B ) >)>\ BOOST_JOIN(boost_static_assert_typedef_, __COUNTER__) #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< (bool)( B ) >::value ] + [ ::boost::STATIC_ASSERTION_FAILURE< BOOST_STATIC_ASSERT_BOOL_CAST( B ) >::value ] #elif defined(__sgi) // special version for SGI MIPSpro compiler #define BOOST_STATIC_ASSERT( B ) \ @@ -100,12 +110,12 @@ template struct static_assert_test{}; #define BOOST_STATIC_ASSERT( B ) \ BOOST_STATIC_CONSTANT(int, \ BOOST_JOIN(boost_static_assert_test_, __LINE__) = \ - sizeof(::boost::STATIC_ASSERTION_FAILURE< (bool)( B ) >) ) + sizeof(::boost::STATIC_ASSERTION_FAILURE< BOOST_STATIC_ASSERT_BOOL_CAST( B ) >) ) #else // generic version #define BOOST_STATIC_ASSERT( B ) \ typedef ::boost::static_assert_test<\ - sizeof(::boost::STATIC_ASSERTION_FAILURE< (bool)( B ) >)>\ + sizeof(::boost::STATIC_ASSERTION_FAILURE< BOOST_STATIC_ASSERT_BOOL_CAST( B ) >)>\ BOOST_JOIN(boost_static_assert_typedef_, __LINE__) #endif From 8cfe5d77c00285a4613858797605cdd6f1f332d4 Mon Sep 17 00:00:00 2001 From: Daniel James Date: Sat, 12 Jul 2008 19:32:15 +0000 Subject: [PATCH 3/3] Fix a PDF link that I missed before. [SVN r47364] --- doc/static_assert.qbk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/static_assert.qbk b/doc/static_assert.qbk index 4b62e84..6063a12 100644 --- a/doc/static_assert.qbk +++ b/doc/static_assert.qbk @@ -16,7 +16,7 @@ ] This manual is also available in -[@http:svn.boost.org/svn/boost/sandbox/pdf/static_assert/release/static_assert.pdf +[@http://svn.boost.org/svn/boost/sandbox/pdf/static_assert/release/static_assert.pdf printer friendly PDF format]. [section:intro Overview and Tutorial]