mirror of
https://github.com/boostorg/geometry.git
synced 2026-02-25 04:22:09 +00:00
[iterators] fix return of a reference to a temporary object when using closing_iterator and ever_circling_iterator with transformed ranges.
This commit is contained in:
@@ -38,9 +38,12 @@ struct closing_iterator
|
||||
<
|
||||
closing_iterator<Range>,
|
||||
typename boost::range_value<Range>::type const,
|
||||
boost::random_access_traversal_tag
|
||||
boost::random_access_traversal_tag,
|
||||
typename boost::range_reference<Range>::type const,
|
||||
typename boost::range_difference<Range>::type
|
||||
>
|
||||
{
|
||||
typedef typename boost::range_reference<Range>::type const reference_type;
|
||||
typedef typename boost::range_difference<Range>::type difference_type;
|
||||
|
||||
/// Constructor including the range it is based on
|
||||
@@ -71,7 +74,7 @@ struct closing_iterator
|
||||
private:
|
||||
friend class boost::iterator_core_access;
|
||||
|
||||
inline typename boost::range_value<Range>::type const& dereference() const
|
||||
inline reference_type dereference() const
|
||||
{
|
||||
return *m_iterator;
|
||||
}
|
||||
|
||||
@@ -100,7 +100,9 @@ struct ever_circling_range_iterator
|
||||
<
|
||||
ever_circling_range_iterator<Range>,
|
||||
typename boost::range_value<Range>::type const,
|
||||
boost::random_access_traversal_tag
|
||||
boost::random_access_traversal_tag,
|
||||
typename boost::range_reference<Range>::type const,
|
||||
typename boost::range_difference<Range>::type
|
||||
>
|
||||
{
|
||||
/// Constructor including the range it is based on
|
||||
@@ -118,12 +120,13 @@ struct ever_circling_range_iterator
|
||||
, m_index(0)
|
||||
{}
|
||||
|
||||
typedef std::ptrdiff_t difference_type;
|
||||
typedef typename boost::range_reference<Range>::type const reference_type;
|
||||
typedef typename boost::range_difference<Range>::type difference_type;
|
||||
|
||||
private:
|
||||
friend class boost::iterator_core_access;
|
||||
|
||||
inline typename boost::range_value<Range>::type const& dereference() const
|
||||
inline reference_type dereference() const
|
||||
{
|
||||
return *m_iterator;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user