Почему 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)
.