Opened 5 years ago

#13202 new Bugs

adjacent_filtered postcondition docs differ from behaviour

Reported by: Tony Lewis <tonyelewis@…> Owned by: Neil Groves
Milestone: To Be Determined Component: range
Version: Boost Development Trunk Severity: Optimization
Keywords: range, adjacent_filtered, documentation, postcondition, predicate, adaptor Cc:

Description

I think the documentation for adjacent_filtered's postcondition, ie:

For all adjacent elements [x,y] in the returned range, bi_pred(x,y) is true.

…isn't quite right. For example, this:

#include <boost/range/adaptor/adjacent_filtered.hpp>

#include <iostream>
#include <vector>

int main() {
        const std::vector<int> a = { 0, 1, 2, 3, 4, 5, 6 };

        const auto b = a | boost::adaptors::adjacent_filtered(
                [] (const int &x, const int &y) {
                        return ( y % 2 == 1 ) && ( y == x + 1 );
                }
        );
        for (const auto &x : b) {
                std::cerr << x << "\n";
        }
}

…outputs:

0
1
3
5

Yet two of the pairs of adjacent elements [x,y] in this range fail bi_pred(x,y) (because they differ by 2, not 1).

I think it's more like: bi_pred is true on each element in the returned range preceded by the element that preceded it in the original range (not in the returned range).

Change History (0)

Note: See TracTickets for help on using tickets.