From 9192996a93b3fc01b1e4a30c899c70b3080b7e70 Mon Sep 17 00:00:00 2001 From: morinmorin Date: Sun, 23 Sep 2018 21:45:30 +0900 Subject: [PATCH 1/6] Add ADL guard namespace for boost::distance(rng). --- include/boost/range/distance.hpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/include/boost/range/distance.hpp b/include/boost/range/distance.hpp index 8dcf05b..5b82cf0 100644 --- a/include/boost/range/distance.hpp +++ b/include/boost/range/distance.hpp @@ -23,13 +23,18 @@ namespace boost { - template< class T > - inline BOOST_CXX14_CONSTEXPR BOOST_DEDUCED_TYPENAME range_difference::type - distance( const T& r ) + namespace range_distance_adl_barrier { - return boost::distance( boost::begin( r ), boost::end( r ) ); + template< class T > + inline BOOST_CXX14_CONSTEXPR BOOST_DEDUCED_TYPENAME range_difference::type + distance( const T& r ) + { + return boost::iterators::distance( boost::begin( r ), boost::end( r ) ); + } } + using namespace range_distance_adl_barrier; + } // namespace 'boost' #endif From 7efe3c68f606679f134ee57a060fec3e5e90af79 Mon Sep 17 00:00:00 2001 From: Peter Dimov Date: Mon, 24 Sep 2018 02:21:55 +0300 Subject: [PATCH 2/6] Fix msvc-10.0, msvc-11.0 failures in ref_unwrapped tests --- include/boost/range/adaptor/ref_unwrapped.hpp | 10 +++++----- test/adaptor_test/ref_unwrapped.cpp | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/include/boost/range/adaptor/ref_unwrapped.hpp b/include/boost/range/adaptor/ref_unwrapped.hpp index 71af483..0369cc3 100644 --- a/include/boost/range/adaptor/ref_unwrapped.hpp +++ b/include/boost/range/adaptor/ref_unwrapped.hpp @@ -32,7 +32,7 @@ namespace boost typedef BOOST_DEDUCED_TYPENAME range_reference::type argument_type; - using result_type = decltype(std::declval().get() ); + typedef decltype(std::declval().get() ) result_type; result_type operator()( argument_type &&r ) const { @@ -46,11 +46,11 @@ namespace boost : public transformed_range, SinglePassRange> { - using base = transformed_range, - SinglePassRange>; + typedef transformed_range, + SinglePassRange> base; public: - using transform_fn_type = unwrap_ref; - using source_range_type = SinglePassRange; + typedef unwrap_ref transform_fn_type; + typedef SinglePassRange source_range_type; unwrap_ref_range(transform_fn_type fn, source_range_type &rng) : base(fn, rng) diff --git a/test/adaptor_test/ref_unwrapped.cpp b/test/adaptor_test/ref_unwrapped.cpp index ea190b3..c476b74 100644 --- a/test/adaptor_test/ref_unwrapped.cpp +++ b/test/adaptor_test/ref_unwrapped.cpp @@ -17,7 +17,7 @@ #include -#if !defined(BOOST_NO_CXX11_AUTO_DECLARATIONS) && !defined(BOOST_NO_CXX11_RANGE_BASED_FOR) +#if !defined(BOOST_NO_CXX11_AUTO_DECLARATIONS) && !defined(BOOST_NO_CXX11_RANGE_BASED_FOR) && !defined(BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX) namespace boost { From b91cb90dcae9a0aa05e3c91fadb9026e5302bece Mon Sep 17 00:00:00 2001 From: Peter Dimov Date: Mon, 24 Sep 2018 02:26:50 +0300 Subject: [PATCH 3/6] Make min/max engine members constexpr in random_shuffle.hpp --- include/boost/range/algorithm/random_shuffle.hpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/include/boost/range/algorithm/random_shuffle.hpp b/include/boost/range/algorithm/random_shuffle.hpp index 2475173..33e98e0 100644 --- a/include/boost/range/algorithm/random_shuffle.hpp +++ b/include/boost/range/algorithm/random_shuffle.hpp @@ -32,12 +32,12 @@ struct wrap_rand { typedef unsigned int result_type; - static result_type (min)() + static BOOST_CONSTEXPR result_type (min)() { return 0; } - static result_type (max)() + static BOOST_CONSTEXPR result_type (max)() { return RAND_MAX; } @@ -64,12 +64,12 @@ struct wrap_generator wrap_generator(Generator& gen) : g(gen) {} - static result_type (min)() + static BOOST_CONSTEXPR result_type (min)() { return 0; } - static result_type (max)() + static BOOST_CONSTEXPR result_type (max)() { return max_arg - 1; } From af9f65e06e432b517817024fc5c009fef1b6bbee Mon Sep 17 00:00:00 2001 From: Peter Dimov Date: Sat, 29 Sep 2018 17:34:43 +0300 Subject: [PATCH 4/6] Add g++-4.4, g++-4.6 to Travis --- .travis.yml | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/.travis.yml b/.travis.yml index 314afb9..dcfdd49 100644 --- a/.travis.yml +++ b/.travis.yml @@ -28,6 +28,26 @@ matrix: compiler: g++ env: TOOLSET=gcc CXXSTD=03,11 + - os: linux + compiler: g++-4.4 + env: TOOLSET=gcc-4.4 CXXSTD=98,0x + addons: + apt: + packages: + - g++-4.4 + sources: + - ubuntu-toolchain-r-test + + - os: linux + compiler: g++-4.6 + env: TOOLSET=gcc-4.6 CXXSTD=03,0x + addons: + apt: + packages: + - g++-4.6 + sources: + - ubuntu-toolchain-r-test + - os: linux compiler: g++-5 env: TOOLSET=gcc-5 CXXSTD=03,11 From 364f755d99edc9b8d16ea3377a48eab533a7d2d5 Mon Sep 17 00:00:00 2001 From: Peter Dimov Date: Sun, 30 Sep 2018 01:11:12 +0300 Subject: [PATCH 5/6] Use boost::declval, as g++ 4.4 has decltype but no std::declval --- include/boost/range/adaptor/ref_unwrapped.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/boost/range/adaptor/ref_unwrapped.hpp b/include/boost/range/adaptor/ref_unwrapped.hpp index 0369cc3..7ac5115 100644 --- a/include/boost/range/adaptor/ref_unwrapped.hpp +++ b/include/boost/range/adaptor/ref_unwrapped.hpp @@ -15,7 +15,7 @@ #include #include #include - +#include #include #if !defined(BOOST_NO_CXX11_DECLTYPE) @@ -32,7 +32,7 @@ namespace boost typedef BOOST_DEDUCED_TYPENAME range_reference::type argument_type; - typedef decltype(std::declval().get() ) result_type; + typedef decltype( boost::declval().get() ) result_type; result_type operator()( argument_type &&r ) const { From 023f45be010eb0d6841e7c6bb7167050cd57bd32 Mon Sep 17 00:00:00 2001 From: Peter Dimov Date: Sun, 30 Sep 2018 01:34:50 +0300 Subject: [PATCH 6/6] Remove constexpr from begin/end on g++ 4.6 as it doesn't like it --- include/boost/range/begin.hpp | 12 ++++++++++-- include/boost/range/end.hpp | 12 ++++++++++-- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/include/boost/range/begin.hpp b/include/boost/range/begin.hpp index 0d7d3db..4f53d46 100644 --- a/include/boost/range/begin.hpp +++ b/include/boost/range/begin.hpp @@ -22,6 +22,8 @@ #else #include +#include +#include namespace boost { @@ -94,7 +96,10 @@ namespace range_adl_barrier { template< class T > -BOOST_CONSTEXPR inline BOOST_DEDUCED_TYPENAME range_iterator::type begin( T& r ) +#if !BOOST_WORKAROUND(BOOST_GCC, < 40700) +BOOST_CONSTEXPR +#endif +inline BOOST_DEDUCED_TYPENAME range_iterator::type begin( T& r ) { #if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) using namespace range_detail; @@ -103,7 +108,10 @@ BOOST_CONSTEXPR inline BOOST_DEDUCED_TYPENAME range_iterator::type begin( T& } template< class T > -BOOST_CONSTEXPR inline BOOST_DEDUCED_TYPENAME range_iterator::type begin( const T& r ) +#if !BOOST_WORKAROUND(BOOST_GCC, < 40700) +BOOST_CONSTEXPR +#endif +inline BOOST_DEDUCED_TYPENAME range_iterator::type begin( const T& r ) { #if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) using namespace range_detail; diff --git a/include/boost/range/end.hpp b/include/boost/range/end.hpp index 588495c..eab4fa9 100644 --- a/include/boost/range/end.hpp +++ b/include/boost/range/end.hpp @@ -24,6 +24,8 @@ #include #include #include +#include +#include namespace boost { @@ -88,7 +90,10 @@ namespace range_adl_barrier { template< class T > -BOOST_CONSTEXPR inline BOOST_DEDUCED_TYPENAME range_iterator::type end( T& r ) +#if !BOOST_WORKAROUND(BOOST_GCC, < 40700) +BOOST_CONSTEXPR +#endif +inline BOOST_DEDUCED_TYPENAME range_iterator::type end( T& r ) { #if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) using namespace range_detail; @@ -97,7 +102,10 @@ BOOST_CONSTEXPR inline BOOST_DEDUCED_TYPENAME range_iterator::type end( T& r } template< class T > -BOOST_CONSTEXPR inline BOOST_DEDUCED_TYPENAME range_iterator::type end( const T& r ) +#if !BOOST_WORKAROUND(BOOST_GCC, < 40700) +BOOST_CONSTEXPR +#endif +inline BOOST_DEDUCED_TYPENAME range_iterator::type end( const T& r ) { #if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) using namespace range_detail;