Warum funktioniert ADL nicht mit Boost.Range?
In Anbetracht
#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));
}
das gibt
main.cpp: 8: 37: Fehler: Verwendung des nicht deklarierten Bezeichners 'end'
Bedenken Sie, dass, wenn Sie @ schreibusing boost::end;
itworks ganz gut, was bedeutet, dassboost::end
ist sichtbar
Warum funktioniert ADL nicht und findetboost::end
im Ausdruckend(range)
? Und wenn es beabsichtigt ist, was ist das Grundprinzip dahinter?
Um klar zu sein, würde das erwartete Ergebnis dem in @ ähneldieses Beispiel usingstd::find_if
und unqualifiziertend(vec)
.