
Mathias Gaunard wrote:
Steven Watanabe wrote:
Of course, keeping the names begin and end for fusion means we won't be able to have a range that is at the same time a fusion sequence, even though that could be somewhat useful.
Hmm. I think it works just fine for boost::array, since fusion::begin won't be found by ADL.
It *may* be found by ADL. Consider the following:
#include <boost/array.hpp> #include <boost/fusion/container/vector.hpp> #include <boost/fusion/sequence/intrinsic/end.hpp> #include <boost/fusion/adapted/array.hpp> #include <boost/range.hpp>
int main() { boost::array<boost::fusion::vector<>, 42> foo; begin(foo); // ambiguous, boost::begin or boost::fusion::begin }
Namespaces of template arguments are also considered for ADL. (Yes, that's a terrible rule -- no idea why it was coined)
Rename boost::fusion::begin/end to boost::fusion::some_other_namespace::begin/end ???