From d0c0f457cf858d9c30e7e8ec7a2fb3db3b1d768d Mon Sep 17 00:00:00 2001 From: Flamefire Date: Sat, 6 May 2023 18:32:49 +0200 Subject: [PATCH 1/4] Use `BOOST_STATIC_ASSERT` instead of `BOOST_MPL_ASSERT` The MPL version is slower to compile and `BOOST_STATIC_ASSERT` is already used in some places. So unify that. This also fixes `Wzero-as-null-pointer-constant` warnings, see https://github.com/boostorg/mpl/pull/75 --- .../detail/facade_iterator_category.hpp | 27 +++++++++---------- include/boost/iterator/iterator_concepts.hpp | 4 +-- test/iterator_facade.cpp | 2 +- test/static_assert_same.hpp | 8 +++--- 4 files changed, 20 insertions(+), 21 deletions(-) diff --git a/include/boost/iterator/detail/facade_iterator_category.hpp b/include/boost/iterator/detail/facade_iterator_category.hpp index 6db45e453..8beea915c 100644 --- a/include/boost/iterator/detail/facade_iterator_category.hpp +++ b/include/boost/iterator/detail/facade_iterator_category.hpp @@ -13,15 +13,14 @@ # include # include # include -# include + +#include # include # include # include # include -# include - # include // try to keep this last # ifdef BOOST_ITERATOR_REF_CONSTNESS_KILLS_WRITABILITY @@ -114,9 +113,9 @@ struct iterator_facade_default_category // True iff T is convertible to an old-style iterator category. template struct is_iterator_category - : mpl::or_< - is_convertible - , is_convertible + : integral_constant::value || + is_convertible::value > { }; @@ -139,17 +138,17 @@ struct iterator_category_with_traversal // Make sure this isn't used to build any categories where // convertibility to Traversal is redundant. Should just use the // Category element in that case. - BOOST_MPL_ASSERT_NOT(( - is_convertible< + BOOST_STATIC_ASSERT( + !is_convertible< typename iterator_category_to_traversal::type , Traversal - >)); + >::value); - BOOST_MPL_ASSERT((is_iterator_category)); - BOOST_MPL_ASSERT_NOT((is_iterator_category)); - BOOST_MPL_ASSERT_NOT((is_iterator_traversal)); + BOOST_STATIC_ASSERT(is_iterator_category::value); + BOOST_STATIC_ASSERT(!is_iterator_category::value); + BOOST_STATIC_ASSERT(!is_iterator_traversal::value); # if !BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1310)) - BOOST_MPL_ASSERT((is_iterator_traversal)); + BOOST_STATIC_ASSERT(is_iterator_traversal::value); # endif }; @@ -158,7 +157,7 @@ struct iterator_category_with_traversal template struct facade_iterator_category_impl { - BOOST_MPL_ASSERT_NOT((is_iterator_category)); + BOOST_STATIC_ASSERT(!is_iterator_category::value); typedef typename iterator_facade_default_category< Traversal,ValueParam,Reference diff --git a/include/boost/iterator/iterator_concepts.hpp b/include/boost/iterator/iterator_concepts.hpp index 415cc496a..3c65553e8 100644 --- a/include/boost/iterator/iterator_concepts.hpp +++ b/include/boost/iterator/iterator_concepts.hpp @@ -144,8 +144,8 @@ namespace boost_concepts { typedef typename std::iterator_traits::difference_type difference_type; - BOOST_MPL_ASSERT((boost::is_integral)); - BOOST_MPL_ASSERT_RELATION(std::numeric_limits::is_signed, ==, true); + BOOST_STATIC_ASSERT(boost::is_integral::value); + BOOST_STATIC_ASSERT(std::numeric_limits::is_signed); BOOST_CONCEPT_ASSERT(( boost::Convertible< diff --git a/test/iterator_facade.cpp b/test/iterator_facade.cpp index 33e678add..6a25ace20 100644 --- a/test/iterator_facade.cpp +++ b/test/iterator_facade.cpp @@ -147,7 +147,7 @@ struct iterator_with_proxy_reference template void same_type(U const&) -{ BOOST_MPL_ASSERT((boost::is_same)); } +{ BOOST_STATIC_ASSERT(boost::is_same::value); } template struct abstract_iterator diff --git a/test/static_assert_same.hpp b/test/static_assert_same.hpp index 6df0506ba..d92af2b15 100644 --- a/test/static_assert_same.hpp +++ b/test/static_assert_same.hpp @@ -5,15 +5,15 @@ #ifndef STATIC_ASSERT_SAME_DWA2003530_HPP # define STATIC_ASSERT_SAME_DWA2003530_HPP -#include -# include +#include +#include -#define STATIC_ASSERT_SAME( T1,T2 ) BOOST_MPL_ASSERT((::boost::is_same< T1, T2 >)) +#define STATIC_ASSERT_SAME( T1,T2 ) BOOST_STATIC_ASSERT(::boost::is_same< T1, T2 >::value) template struct static_assert_same { - BOOST_MPL_ASSERT((::boost::is_same< T1, T2 >)); + STATIC_ASSERT_SAME(T1, T2); enum { value = 1 }; }; From 2666df4ca4ddc2e0e20742b7d0026f9c5db5f34b Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Sun, 7 May 2023 11:09:09 +0200 Subject: [PATCH 2/4] Fix style and revert `is_iterator_category` change --- .../iterator/detail/facade_iterator_category.hpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/include/boost/iterator/detail/facade_iterator_category.hpp b/include/boost/iterator/detail/facade_iterator_category.hpp index 8beea915c..f7dc2b312 100644 --- a/include/boost/iterator/detail/facade_iterator_category.hpp +++ b/include/boost/iterator/detail/facade_iterator_category.hpp @@ -14,7 +14,7 @@ # include # include -#include +# include # include # include @@ -113,9 +113,9 @@ struct iterator_facade_default_category // True iff T is convertible to an old-style iterator category. template struct is_iterator_category - : integral_constant::value || - is_convertible::value + : mpl::or_< + is_convertible + , is_convertible > { }; @@ -144,8 +144,8 @@ struct iterator_category_with_traversal , Traversal >::value); - BOOST_STATIC_ASSERT(is_iterator_category::value); - BOOST_STATIC_ASSERT(!is_iterator_category::value); + BOOST_STATIC_ASSERT(is_iterator_category::type::value); + BOOST_STATIC_ASSERT(!is_iterator_category::type::value); BOOST_STATIC_ASSERT(!is_iterator_traversal::value); # if !BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1310)) BOOST_STATIC_ASSERT(is_iterator_traversal::value); @@ -157,7 +157,7 @@ struct iterator_category_with_traversal template struct facade_iterator_category_impl { - BOOST_STATIC_ASSERT(!is_iterator_category::value); + BOOST_STATIC_ASSERT(!is_iterator_category::type::value); typedef typename iterator_facade_default_category< Traversal,ValueParam,Reference From 812e999eb32312f23bc76b14c126bef2559b1d2e Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Sun, 7 May 2023 11:55:13 +0200 Subject: [PATCH 3/4] Replace `::type::value` by `::value` Seems to be enough for `boost::mpl::or_` and the former fails for MSVC 14.0 --- include/boost/iterator/detail/facade_iterator_category.hpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/include/boost/iterator/detail/facade_iterator_category.hpp b/include/boost/iterator/detail/facade_iterator_category.hpp index f7dc2b312..920b9cadc 100644 --- a/include/boost/iterator/detail/facade_iterator_category.hpp +++ b/include/boost/iterator/detail/facade_iterator_category.hpp @@ -144,8 +144,8 @@ struct iterator_category_with_traversal , Traversal >::value); - BOOST_STATIC_ASSERT(is_iterator_category::type::value); - BOOST_STATIC_ASSERT(!is_iterator_category::type::value); + BOOST_STATIC_ASSERT(is_iterator_category::value); + BOOST_STATIC_ASSERT(!is_iterator_category::value); BOOST_STATIC_ASSERT(!is_iterator_traversal::value); # if !BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1310)) BOOST_STATIC_ASSERT(is_iterator_traversal::value); @@ -157,7 +157,7 @@ struct iterator_category_with_traversal template struct facade_iterator_category_impl { - BOOST_STATIC_ASSERT(!is_iterator_category::type::value); + BOOST_STATIC_ASSERT(!is_iterator_category::value); typedef typename iterator_facade_default_category< Traversal,ValueParam,Reference From 78427a085f6727b7f6ce7a7de39a884ede34d853 Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Sun, 7 May 2023 13:19:54 +0200 Subject: [PATCH 4/4] Use double parens for `BOOST_STATIC_ASSERT` with commas in argument --- include/boost/iterator/detail/facade_iterator_category.hpp | 4 ++-- test/iterator_facade.cpp | 2 +- test/static_assert_same.hpp | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/include/boost/iterator/detail/facade_iterator_category.hpp b/include/boost/iterator/detail/facade_iterator_category.hpp index 920b9cadc..9d41320f6 100644 --- a/include/boost/iterator/detail/facade_iterator_category.hpp +++ b/include/boost/iterator/detail/facade_iterator_category.hpp @@ -138,11 +138,11 @@ struct iterator_category_with_traversal // Make sure this isn't used to build any categories where // convertibility to Traversal is redundant. Should just use the // Category element in that case. - BOOST_STATIC_ASSERT( + BOOST_STATIC_ASSERT(( !is_convertible< typename iterator_category_to_traversal::type , Traversal - >::value); + >::value)); BOOST_STATIC_ASSERT(is_iterator_category::value); BOOST_STATIC_ASSERT(!is_iterator_category::value); diff --git a/test/iterator_facade.cpp b/test/iterator_facade.cpp index 6a25ace20..79c01618e 100644 --- a/test/iterator_facade.cpp +++ b/test/iterator_facade.cpp @@ -147,7 +147,7 @@ struct iterator_with_proxy_reference template void same_type(U const&) -{ BOOST_STATIC_ASSERT(boost::is_same::value); } +{ BOOST_STATIC_ASSERT((boost::is_same::value)); } template struct abstract_iterator diff --git a/test/static_assert_same.hpp b/test/static_assert_same.hpp index d92af2b15..5d96da935 100644 --- a/test/static_assert_same.hpp +++ b/test/static_assert_same.hpp @@ -8,7 +8,7 @@ #include #include -#define STATIC_ASSERT_SAME( T1,T2 ) BOOST_STATIC_ASSERT(::boost::is_same< T1, T2 >::value) +#define STATIC_ASSERT_SAME( T1,T2 ) BOOST_STATIC_ASSERT((::boost::is_same< T1, T2 >::value)) template struct static_assert_same