
AMDG Mathias Gaunard wrote:
Mathias Gaunard a écrit :
In C++0x, begin and end are supposed to be found through ADL, and this might end up considering fusion::begin/fusion::end as possible overloads.
Unfortunately, this breaks, as fusion::begin and fusion::end produce hard errors when passed something else than a fusion sequence.
All in all, I find ADL very dangerous. Should it be advocated not to use the names "begin" and "end" for something else than ranges to avoid issues? I suppose that for Fusion, it could be possible to use SFINAE to mask the overloads if the arguments aren't fusion sequences.
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.
Since this is not leading to a discussion of what to do about this issue as I expected, I've filed a ticket here: https://svn.boost.org/trac/boost/ticket/4028
In Christ, Steven Watanabe