On Aug 5, 2023, at 5:11 AM, Rainer Deyke via Boost wrote:
On 03.08.23 16:33, Marshall Clow via Boost wrote:
As always, the release managers would appreciate it if you download the
candidate of your choice and give building it a try. Please report both
success and failure, and anything else that is noteworthy.
-- The Release managers
Sorry for the very late report, but I think I found a serious regression in either Boost.Stl_interfaces or in Boost.Range. Some iterators generated by Boost.Stl_interfaces are not accepted by Boost.Range. This is a regression from Boost 1.82. Minimal example program, with basic_input_iter taken directly from a Boost.Stl_interfaces test:
I have reproduced this with Apple clang version 14.0.3 (clang-1403.0.22.14.1) on ARM64,
And have confirmed that this compiles w/o error with boost 1.82.0 on the same configuration.
Does anyone have any ideas about what is going wrong here, and how to fix it?
— Marshall
% clang++ -I $BOOST boost.cpp -std=c++20 -c
In file included from boost.cpp:2:
In file included from /Users/marshall/Sources/Boost/main/boost/range/iterator_range.hpp:13:
In file included from /Users/marshall/Sources/Boost/main/boost/range/iterator_range_core.hpp:27:
In file included from /Users/marshall/Sources/Boost/main/boost/iterator/iterator_facade.hpp:13:
/Users/marshall/Sources/Boost/main/boost/iterator/iterator_categories.hpp:120:50: error: no type named 'iterator_category' in 'std::iterator_traits'
typename std::iterator_traits<Iterator>::iterator_category
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~
/Users/marshall/Sources/Boost/main/boost/range/iterator_range_core.hpp:157:32: note: in instantiation of template class 'boost::iterators::iterator_traversal' requested here
BOOST_DEDUCED_TYPENAME iterator_traversal<IteratorT>::type
^
/Users/marshall/Sources/Boost/main/boost/range/iterator_range_core.hpp:437:67: note: in instantiation of template class 'boost::iterator_range_detail::pure_iterator_traversal' requested here
BOOST_DEDUCED_TYPENAME iterator_range_detail::pure_iterator_traversal<IteratorT>::type
^
boost.cpp:40:9: note: in instantiation of template class 'boost::iterator_range' requested here
return boost::make_iterator_range(
^
In file included from boost.cpp:2:
In file included from /Users/marshall/Sources/Boost/main/boost/range/iterator_range.hpp:13:
/Users/marshall/Sources/Boost/main/boost/range/iterator_range_core.hpp:161:30: error: no matching function for call to 'test_traversal_tag'
traversal_i = sizeof(iterator_range_detail::test_traversal_tag((traversal_t())))
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/Users/marshall/Sources/Boost/main/boost/config/detail/suffix.hpp:410:72: note: expanded from macro 'BOOST_STATIC_CONSTANT'
# define BOOST_STATIC_CONSTANT(type, assignment) static const type assignment
^~~~~~~~~~
/Users/marshall/Sources/Boost/main/boost/range/iterator_range_core.hpp:437:67: note: in instantiation of template class 'boost::iterator_range_detail::pure_iterator_traversal' requested here
BOOST_DEDUCED_TYPENAME iterator_range_detail::pure_iterator_traversal<IteratorT>::type
^
boost.cpp:40:9: note: in instantiation of template class 'boost::iterator_range' requested here
return boost::make_iterator_range(
^
/Users/marshall/Sources/Boost/main/boost/range/iterator_range_core.hpp:131:17: note: candidate function not viable: no known conversion from 'boost::iterator_range_detail::pure_iterator_traversal::traversal_t' (aka 'int') to 'boost::incrementable_traversal_tag' for 1st argument
incrementable_t test_traversal_tag(boost::incrementable_traversal_tag);
^
/Users/marshall/Sources/Boost/main/boost/range/iterator_range_core.hpp:132:17: note: candidate function not viable: no known conversion from 'boost::iterator_range_detail::pure_iterator_traversal::traversal_t' (aka 'int') to 'boost::bidirectional_traversal_tag' for 1st argument
bidirectional_t test_traversal_tag(boost::bidirectional_traversal_tag);
^
/Users/marshall/Sources/Boost/main/boost/range/iterator_range_core.hpp:133:17: note: candidate function not viable: no known conversion from 'boost::iterator_range_detail::pure_iterator_traversal::traversal_t' (aka 'int') to 'boost::random_access_traversal_tag' for 1st argument
random_access_t test_traversal_tag(boost::random_access_traversal_tag);
^
/Users/marshall/Sources/Boost/main/boost/range/iterator_range_core.hpp:484:19: error: type 'boost::iterator_range::base_type' (aka 'iterator_range_base::type>') is not a direct or virtual base of 'boost::iterator_range'
: base_type(first, last)
^~~~~~~~~
/Users/marshall/Sources/Boost/main/boost/range/iterator_range_core.hpp:758:20: note: in instantiation of function template specialization 'boost::iterator_range::iterator_range' requested here
return iterator_range<IteratorT>( Begin, End );
^
boost.cpp:40:16: note: in instantiation of function template specialization 'boost::make_iterator_range' requested here
return boost::make_iterator_range(
^
3 errors generated.
%