Почему ADL не работает с Boost.Range?

Принимая во внимание:

#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));
}

Демо-версия Live Clang Live GCC демо

это дает:

main.cpp: 8: 37: ошибка: использование необъявленного идентификатора «конец»

Учитывая, что если ты пишешьusing boost::end; Этоработает просто отличночто подразумевает, чтоboost::end виден:

Почему ADL не работает и не находитboost::end в выраженииend(range)? И если это сделано намеренно, в чем причина этого?

Чтобы было ясно, ожидаемый результат будет похож на то, что происходит вэтот пример с помощьюstd::find_if и неквалифицированныйend(vec).

Ответы на вопрос(3)

Ваш ответ на вопрос