Opened 5 years ago

Last modified 5 years ago

#13357 new Bugs

boost::iterator_range<boost::counting_iterator<uint64_t>>::back() returns reference to temporary

Reported by: Mikołaj Milej <mmilej@…> Owned by: Neil Groves
Milestone: To Be Determined Component: range
Version: Boost 1.61.0 Severity: Problem
Keywords: range Cc:

Description

boost::iterator_range<boost::counting_iterator<uint64_t>>::back() returns reference to temporary

it's created by

using RangeRawType = std::uint64_t;

inline Range makeRange(
    RangeRawType begin,
    RangeRawType end = std::numeric_limits<RangeRawType>::max())
{
    return boost::counting_range<RangeRawType>(begin, end);
}

After investigation code of back() it probably returns reference to temporary value:

    reference back() const
    {
        BOOST_ASSERT(!this->empty());
        return *boost::prior(this->m_End);
    }

So it returns just a junk (or rather this reference points to some random data).

Code is the same in the newest boost (1.66 at time of writing).

Change History (1)

comment:1 by Mikołaj Milej <mmilej@…>, 5 years ago

Keywords: range added
Note: See TracTickets for help on using tickets.