Учитывая:
#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)
.