|
Boost : |
From: Rainer Deyke (rdeyke_at_[hidden])
Date: 2023-08-05 12:11:56
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:
#include "boost/stl_interfaces/iterator_interface.hpp"
#include "boost/range/iterator_range.hpp"
struct basic_input_iter
: boost::stl_interfaces::iterator_interface<
#if !BOOST_STL_INTERFACES_USE_DEDUCED_THIS
basic_input_iter,
#endif
std::input_iterator_tag, int>
{
basic_input_iter() : it_(nullptr) {}
basic_input_iter(int * it) : it_(it) {}
int & operator*() const noexcept { return *it_; }
basic_input_iter & operator++() noexcept
{
++it_;
return *this;
}
friend bool operator==(basic_input_iter lhs, basic_input_iter rhs)
noexcept
{
return lhs.it_ == rhs.it_;
}
using base_type = boost::stl_interfaces::iterator_interface<
#if !BOOST_STL_INTERFACES_USE_DEDUCED_THIS
basic_input_iter,
#endif
std::input_iterator_tag, int>;
using base_type::operator++;
private:
int * it_;
};
auto make_range() {
static int si;
return boost::make_iterator_range(
basic_input_iter(&si),
basic_input_iter(&si + 1));
}
This fails to compile with the following errors:
>g++ -Wall -Wstrict-aliasing=0 -Wno-unused-local-typedefs
-Werror=return-type -static-libgcc -static-libasan -static-libstdc++
-static-libubsan -std=gnu++20 -O3 -flto -pthread
-Iintermediate/linux64/obj/linux64__test__iter_test
-Iintermediate/linux64/libs/boost/install/include
-DELDWOOD_EXTENSION_BOOST -c -o
intermediate/linux64/obj/linux64__test__iter_test/eldwood/test/iter.cpp.o
intermediate/linux64/obj/linux64__test__iter_test/eldwood/test/iter.cpp
In file included from
intermediate/linux64/libs/boost/install/include/boost/iterator/iterator_facade.hpp:13,
from
intermediate/linux64/libs/boost/install/include/boost/range/iterator_range_core.hpp:27,
from
intermediate/linux64/libs/boost/install/include/boost/range/iterator_range.hpp:13,
from
intermediate/linux64/obj/linux64__test__iter_test/eldwood/test/iter.cpp:2:
intermediate/linux64/libs/boost/install/include/boost/iterator/iterator_categories.hpp:
In instantiation of âstruct
boost::iterators::iterator_traversal<basic_input_iter>â:
intermediate/linux64/libs/boost/install/include/boost/range/iterator_range_core.hpp:158:5:
required from âstruct
boost::iterator_range_detail::pure_iterator_traversal<basic_input_iter>â
intermediate/linux64/libs/boost/install/include/boost/range/iterator_range_core.hpp:434:15:
required from âclass boost::iterator_range<basic_input_iter>â
intermediate/linux64/obj/linux64__test__iter_test/eldwood/test/iter.cpp:40:36:
required from here
intermediate/linux64/libs/boost/install/include/boost/iterator/iterator_categories.hpp:118:8:
error: no type named âiterator_categoryâ in âstruct
std::iterator_traits<basic_input_iter>â
118 | struct iterator_traversal
| ^~~~~~~~~~~~~~~~~~
intermediate/linux64/libs/boost/install/include/boost/range/iterator_range_core.hpp:
In instantiation of âstruct
boost::iterator_range_detail::pure_iterator_traversal<basic_input_iter>â:
intermediate/linux64/libs/boost/install/include/boost/range/iterator_range_core.hpp:434:15:
required from âclass boost::iterator_range<basic_input_iter>â
intermediate/linux64/obj/linux64__test__iter_test/eldwood/test/iter.cpp:40:36:
required from here
intermediate/linux64/libs/boost/install/include/boost/range/iterator_range_core.hpp:158:5:
error: no type named âtypeâ in âstruct
boost::iterators::iterator_traversal<basic_input_iter>â
158 | traversal_t;
| ^~~~~~~~~~~
In file included from
intermediate/linux64/libs/boost/install/include/boost/utility/enable_if.hpp:15,
from
intermediate/linux64/libs/boost/install/include/boost/range/has_range_iterator.hpp:21,
from
intermediate/linux64/libs/boost/install/include/boost/range/difference_type.hpp:21,
from
intermediate/linux64/libs/boost/install/include/boost/range/size_type.hpp:19,
from
intermediate/linux64/libs/boost/install/include/boost/range/size.hpp:21,
from
intermediate/linux64/libs/boost/install/include/boost/range/functions.hpp:20,
from
intermediate/linux64/libs/boost/install/include/boost/range/iterator_range_core.hpp:38:
intermediate/linux64/libs/boost/install/include/boost/core/enable_if.hpp:
In instantiation of âstruct
boost::enable_if<boost::iterator_range<basic_input_iter>::is_compatible_range<const
basic_input_iter>, void>â:
intermediate/linux64/libs/boost/install/include/boost/range/iterator_range_core.hpp:489:13:
required by substitution of âtemplate<class SinglePassRange>
boost::iterator_range<basic_input_iter>::iterator_range(const
SinglePassRange&, typename boost::enable_if<is_compatible_range<const
SinglePassRange>, void>::type*) [with SinglePassRange = basic_input_iter]â
intermediate/linux64/libs/boost/install/include/boost/range/iterator_range_core.hpp:758:20:
required from âboost::iterator_range<IteratorT>
boost::make_iterator_range(IteratorT, IteratorT) [with IteratorT =
basic_input_iter]â
intermediate/linux64/obj/linux64__test__iter_test/eldwood/test/iter.cpp:40:36:
required from here
intermediate/linux64/libs/boost/install/include/boost/core/enable_if.hpp:41:10:
error: âvalueâ is not a member of
âboost::iterator_range<basic_input_iter>::is_compatible_range<const
basic_input_iter>â
41 | struct enable_if : public enable_if_c<Cond::value, T> {};
| ^~~~~~~~~
intermediate/linux64/libs/boost/install/include/boost/core/enable_if.hpp:
In instantiation of âstruct
boost::enable_if<boost::iterator_range<basic_input_iter>::is_compatible_range<basic_input_iter>,
void>â:
intermediate/linux64/libs/boost/install/include/boost/range/iterator_range_core.hpp:500:13:
required by substitution of âtemplate<class SinglePassRange>
boost::iterator_range<basic_input_iter>::iterator_range(SinglePassRange&,
typename boost::enable_if<is_compatible_range<Source>, void>::type*)
[with SinglePassRange = basic_input_iter]â
intermediate/linux64/libs/boost/install/include/boost/range/iterator_range_core.hpp:758:20:
required from âboost::iterator_range<IteratorT>
boost::make_iterator_range(IteratorT, IteratorT) [with IteratorT =
basic_input_iter]â
intermediate/linux64/obj/linux64__test__iter_test/eldwood/test/iter.cpp:40:36:
required from here
intermediate/linux64/libs/boost/install/include/boost/core/enable_if.hpp:41:10:
error: âvalueâ is not a member of
âboost::iterator_range<basic_input_iter>::is_compatible_range<basic_input_iter>â
Build failed.
-- Rainer Deyke (rainerd_at_[hidden])
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk