Opened 9 years ago
Closed 9 years ago
#9009 closed Bugs (fixed)
flat_set.insert() is ambigious
Reported by: | Owned by: | Ion Gaztañaga | |
---|---|---|---|
Milestone: | To Be Determined | Component: | container |
Version: | Boost 1.54.0 | Severity: | Regression |
Keywords: | move | Cc: |
Description
Here is the code:
#include "boost/container/flat_set.hpp"
int main() {
boost::container::flat_set<int> const fs0;
boost::container::flat_set<int> fs1;
fs1.insert(fs0.begin(), fs0.end());
}
This is with C++03 not C++11.
The error is that the call to insert is ambiguous.
This is a regression. It doesn't happing in 1.49. (I think it was introduced by move support.)
I believe the issue is that if the iterators are of the same type, then the iterator pair insert is supposed to be preferred because the template that has both parameters being the same time is more specialized. But with the move semantic implementation macros, the form (const_iterator, value) is only templated on the second parameter so it isn't less specific.
You are right. It was introduced by the move support. I think I have a fix for it.