From fdfafce2b9a71b1d85cbc697983652788f1c4bb7 Mon Sep 17 00:00:00 2001 From: Georgy Guminov Date: Sat, 26 Oct 2024 15:06:43 +0300 Subject: [PATCH] Remove BOOST_NO_STRICT_ITERATOR_INTEROPERABILITY Correct static_assert messages. Fix messages & replace is_standard_layout with is_copy_constructible. --- include/boost/iterator/iterator_facade.hpp | 19 +------------------ include/boost/iterator/minimum_category.hpp | 2 +- include/boost/iterator/new_iterator_tests.hpp | 9 ++++----- test/indirect_iter_member_types.cpp | 4 ++-- 4 files changed, 8 insertions(+), 26 deletions(-) diff --git a/include/boost/iterator/iterator_facade.hpp b/include/boost/iterator/iterator_facade.hpp index 110f883..6029208 100644 --- a/include/boost/iterator/iterator_facade.hpp +++ b/include/boost/iterator/iterator_facade.hpp @@ -433,9 +433,7 @@ namespace iterators { struct use_operator_brackets_proxy : detail::negation< detail::conjunction< - // Really we want an is_copy_constructible trait here, - // but is_POD will have to suffice in the meantime. - std::is_standard_layout + std::is_copy_constructible , std::is_trivial , iterator_writability_disabled > @@ -908,11 +906,6 @@ namespace iterators { # define BOOST_ITERATOR_FACADE_INTEROP(op, result_type, return_prefix, base_op) \ BOOST_ITERATOR_FACADE_INTEROP_HEAD(inline, op, result_type) \ { \ - /* For those compilers that do not support enable_if */ \ - static_assert( \ - is_interoperable::value, \ - "Derived1 & Derived2 types must be interoperable." \ - ); \ return_prefix iterator_core_access::base_op( \ *static_cast(&lhs) \ , *static_cast(&rhs) \ @@ -938,16 +931,6 @@ namespace iterators { BOOST_ITERATOR_FACADE_INTEROP_RANDOM_ACCESS_HEAD(inline, op, result_type) \ { \ using boost::iterators::detail::is_traversal_at_least; \ - typedef typename iterator_category::type Derived1IterCat; \ - typedef typename iterator_category::type Derived2IterCat; \ - /* For those compilers that do not support enable_if */ \ - static_assert( \ - is_interoperable::value && \ - is_traversal_at_least::value && \ - is_traversal_at_least::value, \ - "Derived1 & Derived2 types must be interoperable and must both have " \ - "random_access_traversal_tag." \ - ); \ return_prefix iterator_core_access::base_op( \ *static_cast(&lhs) \ , *static_cast(&rhs) \ diff --git a/include/boost/iterator/minimum_category.hpp b/include/boost/iterator/minimum_category.hpp index 58fa275..913cec4 100644 --- a/include/boost/iterator/minimum_category.hpp +++ b/include/boost/iterator/minimum_category.hpp @@ -44,7 +44,7 @@ struct minimum_category_impl { static_assert( std::is_same::value, - "Types must be same when they are convertible to each other." + "Iterator category types must be the same when they are equivalent." ); typedef T1 type; }; diff --git a/include/boost/iterator/new_iterator_tests.hpp b/include/boost/iterator/new_iterator_tests.hpp index 90fde10..a8a8335 100644 --- a/include/boost/iterator/new_iterator_tests.hpp +++ b/include/boost/iterator/new_iterator_tests.hpp @@ -123,10 +123,9 @@ void constant_lvalue_iterator_test(Iterator i, T v1) { const T &v2 = *i2; BOOST_TEST(v1 == v2); #ifndef BOOST_NO_LVALUE_RETURN_DETECTION - static_assert(is_lvalue_iterator::value, - "Iterator must be lvalue."); - static_assert(!is_non_const_lvalue_iterator::value, - "Iterator must be const."); + static_assert(is_lvalue_iterator::value + && !is_non_const_lvalue_iterator::value, + "Iterator must be a const lvalue iterator."); #endif } @@ -149,7 +148,7 @@ void non_const_lvalue_iterator_test(Iterator i, T v1, T v2) { BOOST_TEST(v2 == v4); #ifndef BOOST_NO_LVALUE_RETURN_DETECTION static_assert(is_lvalue_iterator::value, - "Iterator must be lvalue."); + "Iterator must be an lvalue iterator."); static_assert(is_non_const_lvalue_iterator::value, "Iterator must be non-const."); #endif diff --git a/test/indirect_iter_member_types.cpp b/test/indirect_iter_member_types.cpp index dffe68c..86b893f 100644 --- a/test/indirect_iter_member_types.cpp +++ b/test/indirect_iter_member_types.cpp @@ -40,7 +40,7 @@ int main() static_assert(std::is_convertible::value, - "Iter must have an STL random_access_iterator_tag."); + "Iter must have a random access category."); static_assert(std::is_convertible::type, boost::random_access_traversal_tag>::value, "Iter must have a random_access_traversal_tag."); @@ -73,7 +73,7 @@ int main() static_assert(std::is_convertible::value, - "Iter must have an STL random_access_iterator_tag."); + "Iter must have a random access category."); static_assert(std::is_convertible::type, boost::random_access_traversal_tag>::value, "Iter must have a random_access_traversal_tag.");