Учитывая:
#include <cassert>
#include <boost/range/irange.hpp>
#include <boost/range/algorithm.hpp>
int main() {
auto range = boost::irange(1, 4);
assert(boost::find(range, 4) == end(range));
}
это дает:
main.cpp: 8: 37: ошибка: использование незаявленного идентификатора "конец"
Учитывая, что если вы пишете using boost::end;, то отлично работает, что означает, что boost::end видно:
Почему ADL не работает и находит boost::end в выражении end(range)? И если это преднамеренно, что за это стоит?
Чтобы быть ясным, ожидаемый результат был бы аналогичен тому, что происходит в этом примере, используя std::find_if и неквалифицированный end(vec).