Updated to use boost/bind/bind.hpp to avoid warnings and compliance with C++20.

boost/bind.hpp emits warnings about deprecating global placeholder argument
keywords. C++20 removes std::bind1st/bind2nd, so replaced their usage with
boost::bind.
This commit is contained in:
Andrey Semashev 2020-03-04 01:02:52 +03:00
parent 4fe679bb0d
commit c2929ea6c6
5 changed files with 22 additions and 21 deletions

View File

@ -50,11 +50,11 @@ the integers greater than `-2`.
// Another example using make_filter_iterator() // Another example using make_filter_iterator()
std::copy( std::copy(
boost::make_filter_iterator( boost::make_filter_iterator(
std::bind2nd(std::greater<int>(), -2) std::bind(std::greater<int>(), std::placeholders::_1, -2)
, numbers, numbers + N) , numbers, numbers + N)
, boost::make_filter_iterator( , boost::make_filter_iterator(
std::bind2nd(std::greater<int>(), -2) std::bind(std::greater<int>(), std::placeholders::_1, -2)
, numbers + N, numbers + N) , numbers + N, numbers + N)
, std::ostream_iterator<int>(std::cout, " ") , std::ostream_iterator<int>(std::cout, " ")

View File

@ -49,7 +49,7 @@ using the `make_indirect_iterator` helper function.
const_indirect_last(pointers_to_chars + N); const_indirect_last(pointers_to_chars + N);
std::transform(const_indirect_first, const_indirect_last, std::transform(const_indirect_first, const_indirect_last,
mutable_indirect_first, std::bind1st(std::plus<char>(), 1)); mutable_indirect_first, std::bind(std::plus<char>(), 1, std::placeholders::_1));
std::copy(mutable_indirect_first, mutable_indirect_last, std::copy(mutable_indirect_first, mutable_indirect_last,
std::ostream_iterator<char>(std::cout, ",")); std::ostream_iterator<char>(std::cout, ","));

View File

@ -8,6 +8,7 @@
#include <functional> #include <functional>
#include <iostream> #include <iostream>
#include <boost/iterator/filter_iterator.hpp> #include <boost/iterator/filter_iterator.hpp>
#include <boost/bind/bind.hpp>
#include <boost/cstdlib.hpp> // for exit_success #include <boost/cstdlib.hpp> // for exit_success
struct is_positive_number { struct is_positive_number {
@ -42,11 +43,11 @@ int main()
// Another example using make_filter_iterator() // Another example using make_filter_iterator()
std::copy( std::copy(
boost::make_filter_iterator( boost::make_filter_iterator(
std::bind2nd(std::greater<int>(), -2) boost::bind(std::greater<int>(), boost::placeholders::_1, -2)
, numbers, numbers + N) , numbers, numbers + N)
, boost::make_filter_iterator( , boost::make_filter_iterator(
std::bind2nd(std::greater<int>(), -2) boost::bind(std::greater<int>(), boost::placeholders::_1, -2)
, numbers + N, numbers + N) , numbers + N, numbers + N)
, std::ostream_iterator<int>(std::cout, " ") , std::ostream_iterator<int>(std::cout, " ")

View File

@ -9,6 +9,7 @@
#include <iterator> #include <iterator>
#include <functional> #include <functional>
#include <algorithm> #include <algorithm>
#include <boost/bind/bind.hpp>
#include <boost/iterator/indirect_iterator.hpp> #include <boost/iterator/indirect_iterator.hpp>
int main(int, char*[]) int main(int, char*[])
@ -41,7 +42,7 @@ int main(int, char*[])
const_indirect_last(pointers_to_chars + N); const_indirect_last(pointers_to_chars + N);
std::transform(const_indirect_first, const_indirect_last, std::transform(const_indirect_first, const_indirect_last,
mutable_indirect_first, std::bind1st(std::plus<char>(), 1)); mutable_indirect_first, boost::bind(std::plus<char>(), 1, boost::placeholders::_1));
std::copy(mutable_indirect_first, mutable_indirect_last, std::copy(mutable_indirect_first, mutable_indirect_last,
std::ostream_iterator<char>(std::cout, ",")); std::ostream_iterator<char>(std::cout, ","));

View File

@ -19,7 +19,6 @@
#include <boost/iterator/iterator_concepts.hpp> #include <boost/iterator/iterator_concepts.hpp>
#include <boost/iterator/new_iterator_tests.hpp> #include <boost/iterator/new_iterator_tests.hpp>
#include <boost/pending/iterator_tests.hpp> #include <boost/pending/iterator_tests.hpp>
#include <boost/bind.hpp>
#include <boost/concept_check.hpp> #include <boost/concept_check.hpp>
#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION #ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
@ -114,9 +113,9 @@ struct polymorphic_mult_functor
template <class F, class T> struct result<F(T& )> {typedef void type;}; template <class F, class T> struct result<F(T& )> {typedef void type;};
template <class F, class T> struct result<F(const T&)> {typedef void type;}; template <class F, class T> struct result<F(const T&)> {typedef void type;};
template <class T> template <class T>
T operator()(const T& _arg) const {return _arg*2;} T operator()(const T& _arg) const {return _arg*2;}
template <class T> template <class T>
void operator()(const T& _arg) { BOOST_ASSERT(0); } void operator()(const T& _arg) { BOOST_ASSERT(0); }
}; };
@ -139,15 +138,15 @@ main()
for (int k = 0; k < N; ++k) for (int k = 0; k < N; ++k)
x[k] = k; x[k] = k;
std::copy(x, x + N, y); std::copy(x, x + N, y);
for (int k2 = 0; k2 < N; ++k2) for (int k2 = 0; k2 < N; ++k2)
x[k2] = x[k2] * 2; x[k2] = x[k2] * 2;
typedef boost::transform_iterator<adaptable_mult_functor, int*> iter_t; typedef boost::transform_iterator<adaptable_mult_functor, int*> iter_t;
iter_t i(y, adaptable_mult_functor(2)); iter_t i(y, adaptable_mult_functor(2));
boost::input_iterator_test(i, x[0], x[1]); boost::input_iterator_test(i, x[0], x[1]);
boost::input_iterator_test(iter_t(&y[0], adaptable_mult_functor(2)), x[0], x[1]); boost::input_iterator_test(iter_t(&y[0], adaptable_mult_functor(2)), x[0], x[1]);
boost::random_access_readable_iterator_test(i, N, x); boost::random_access_readable_iterator_test(i, N, x);
} }
@ -157,15 +156,15 @@ main()
for (int k = 0; k < N; ++k) for (int k = 0; k < N; ++k)
x[k] = k; x[k] = k;
std::copy(x, x + N, y); std::copy(x, x + N, y);
for (int k2 = 0; k2 < N; ++k2) for (int k2 = 0; k2 < N; ++k2)
x[k2] = x[k2] * 2; x[k2] = x[k2] * 2;
typedef boost::transform_iterator<mult_functor, int*, int> iter_t; typedef boost::transform_iterator<mult_functor, int*, int> iter_t;
iter_t i(y, mult_functor(2)); iter_t i(y, mult_functor(2));
boost::input_iterator_test(i, x[0], x[1]); boost::input_iterator_test(i, x[0], x[1]);
boost::input_iterator_test(iter_t(&y[0], mult_functor(2)), x[0], x[1]); boost::input_iterator_test(iter_t(&y[0], mult_functor(2)), x[0], x[1]);
boost::random_access_readable_iterator_test(i, N, x); boost::random_access_readable_iterator_test(i, N, x);
} }
@ -196,16 +195,16 @@ main()
for (int k = 0; k < N; ++k) for (int k = 0; k < N; ++k)
x[k] = k; x[k] = k;
std::copy(x, x + N, y); std::copy(x, x + N, y);
for (int k2 = 0; k2 < N; ++k2) for (int k2 = 0; k2 < N; ++k2)
x[k2] = x[k2] * 2; x[k2] = x[k2] * 2;
boost::input_iterator_test( boost::input_iterator_test(
boost::make_transform_iterator(y, mult_2), x[0], x[1]); boost::make_transform_iterator(y, mult_2), x[0], x[1]);
boost::input_iterator_test( boost::input_iterator_test(
boost::make_transform_iterator(&y[0], mult_2), x[0], x[1]); boost::make_transform_iterator(&y[0], mult_2), x[0], x[1]);
boost::random_access_readable_iterator_test( boost::random_access_readable_iterator_test(
boost::make_transform_iterator(y, mult_2), N, x); boost::make_transform_iterator(y, mult_2), N, x);
@ -267,16 +266,16 @@ main()
for (int k = 0; k < N; ++k) for (int k = 0; k < N; ++k)
x[k] = k; x[k] = k;
std::copy(x, x + N, y); std::copy(x, x + N, y);
for (int k2 = 0; k2 < N; ++k2) for (int k2 = 0; k2 < N; ++k2)
x[k2] = x[k2] * 2; x[k2] = x[k2] * 2;
boost::input_iterator_test( boost::input_iterator_test(
boost::make_transform_iterator(y, polymorphic_mult_functor()), x[0], x[1]); boost::make_transform_iterator(y, polymorphic_mult_functor()), x[0], x[1]);
boost::input_iterator_test( boost::input_iterator_test(
boost::make_transform_iterator(&y[0], polymorphic_mult_functor()), x[0], x[1]); boost::make_transform_iterator(&y[0], polymorphic_mult_functor()), x[0], x[1]);
boost::random_access_readable_iterator_test( boost::random_access_readable_iterator_test(
boost::make_transform_iterator(y, polymorphic_mult_functor()), N, x); boost::make_transform_iterator(y, polymorphic_mult_functor()), N, x);
} }