From 126e6861d786f951ef1bc090d8eb98271b9e8faf Mon Sep 17 00:00:00 2001 From: Neil Groves Date: Sat, 2 Apr 2011 13:05:26 +0000 Subject: [PATCH] [boost][range] - Resolved Trace 5162 - boost::iterator_range is unsafe. [SVN r70852] --- include/boost/range/iterator_range_core.hpp | 4 ++-- test/Jamfile.v2 | 1 + test/compile_fail/iterator_range1.cpp | 21 +++++++++++++++++++++ test/iterator_range.cpp | 9 +++++++++ 4 files changed, 33 insertions(+), 2 deletions(-) create mode 100644 test/compile_fail/iterator_range1.cpp diff --git a/include/boost/range/iterator_range_core.hpp b/include/boost/range/iterator_range_core.hpp index 438f38c..31d7147 100755 --- a/include/boost/range/iterator_range_core.hpp +++ b/include/boost/range/iterator_range_core.hpp @@ -53,13 +53,13 @@ namespace boost template< class ForwardRange > static IteratorT adl_begin( ForwardRange& r ) { - return IteratorT( boost::begin( r ) ); + return static_cast( boost::begin( r ) ); } template< class ForwardRange > static IteratorT adl_end( ForwardRange& r ) { - return IteratorT( boost::end( r ) ); + return static_cast( boost::end( r ) ); } }; diff --git a/test/Jamfile.v2 b/test/Jamfile.v2 index e0087fb..7086fd0 100644 --- a/test/Jamfile.v2 +++ b/test/Jamfile.v2 @@ -31,6 +31,7 @@ rule range-test ( name : includes * ) } test-suite range : + [ compile-fail compile_fail/iterator_range1.cpp ] [ range-test adaptor_test/adjacent_filtered ] [ range-test adaptor_test/copied ] [ range-test adaptor_test/filtered ] diff --git a/test/compile_fail/iterator_range1.cpp b/test/compile_fail/iterator_range1.cpp new file mode 100644 index 0000000..eed4ea9 --- /dev/null +++ b/test/compile_fail/iterator_range1.cpp @@ -0,0 +1,21 @@ +// Boost.Range library +// +// Copyright Neil Groves 2011. Use, modification and distribution is subject +// to the Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// For more information, see http://www.boost.org/libs/range +// + +#include + +namespace iterator_range_test_detail +{ + void check_iterator_range_doesnt_convert_pointers() + { + double source[] = { 0.0, 1.0, 2.0, 3.0, 4.0, 5.0 }; + boost::iterator_range rng = boost::make_iterator_range(source); + } +} + diff --git a/test/iterator_range.cpp b/test/iterator_range.cpp index 8e9f380..1d9539b 100644 --- a/test/iterator_range.cpp +++ b/test/iterator_range.cpp @@ -200,6 +200,15 @@ namespace iterator_range_test_detail } } } + + void check_iterator_range_from_array() + { + double source[] = { 0.0, 1.0, 2.0, 3.0, 4.0, 5.0 }; + boost::iterator_range rng = boost::make_iterator_range(source); + BOOST_CHECK_EQUAL_COLLECTIONS( rng.begin(), rng.end(), + source, source + 6 ); + } + } // namespace iterator_range_test_detail template