¿Por qué ADL no funciona con 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));
}
Demostración en vivo de Clang Demo en vivo de GCC
esto da:
main.cpp: 8: 37: error: uso del identificador no declarado 'fin'
Considerando que si escribesusing boost::end;
esofunciona bien, lo que implica queboost::end
es visible:
¿Por qué ADL no funciona y no encuentraboost::end
en la expresiónend(range)
? Y si es intencional, ¿cuál es la razón detrás de esto?
Para ser claros, el resultado esperado sería similar a lo que sucede eneste ejemplo utilizandostd::find_if
y sin reservasend(vec)
.