Opened 11 years ago
Closed 11 years ago
#5547 closed Bugs (fixed)
boost::range::join ambiguous with boost::algorithm::join
| Reported by: | Owned by: | Neil Groves | |
|---|---|---|---|
| Milestone: | To Be Determined | Component: | range |
| Version: | Boost 1.46.1 | Severity: | Problem |
| Keywords: | Cc: |
Description
Summary
Calling boost::join with an iterator range when both boost algorithm and boost range join.jpp headers have been included, introduces an ambiguity with Visual Studio 2010.
Steps to Reproduce
#include <vector>
#include <boost/algorithm/string/join.hpp>
#include <boost/range/join.hpp>
int main() {
std::vector< int > vec1;
std::vector< int > vec2;
boost::join(
vec1,
boost::make_iterator_range( vec2.begin(), vec2.end() )
);
return 0;
}
Expected Results
Code to compile and do nothing.
Actual Results
main.cpp(16): error C2668: 'boost::range::join' : ambiguous call to overloaded function
boost\range\join.hpp(65): could be 'boost::range::join
boost\algorithm\string\join.hpp(46): or 'boost::algorithm::join'
Notes
boost::algorithm::join is pulled into the boost namespace with a using declaration. boost::join is defined directly in the boost namespace by the range library meaning I can't explicitly refer to it.
Current workaround is to move boost::join into boost::range::join, and then pull it into the boost namespace with a using declaration.
namespace range {
join(SinglePassRange1& r1, SinglePassRange2& r2);
} // namespace range
using range::join;
Allowing the example code to be resolved by being more explicit:
boost::range::join( vec1, boost::make_iterator_range( vec2.begin(), vec2.end() ) );
Change History (2)
comment:1 by , 11 years ago
| Component: | None → range |
|---|---|
| Owner: | set to |
comment:2 by , 11 years ago
| Resolution: | → fixed |
|---|---|
| Status: | new → closed |
Thank you for your report. This is now resolved on the trunk.

forgot to set component to boost range