Por que o ADL não está funcionando com o Boost.Range?
Considerando:
#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));
}
Demonstração ao vivo Clang Demonstração ao vivo do GCC
isto dá:
main.cpp: 8: 37: erro: uso do identificador não declarado 'final'
Considerando que se você escreverusing boost::end;
istofunciona muito bem, o que implica queboost::end
é visível:
Por que a ADL não está funcionando e está encontrandoboost::end
na expressãoend(range)
? E se for intencional, qual é a lógica por trás disso?
Para ficar claro, o resultado esperado seria semelhante ao que acontece emeste exemplo usandostd::find_if
e não qualificadoend(vec)
.