Re: Contraints on equal_range comparison function object
"Meador Inge" <meadori@gmail.com> writes:
For:
template<class ForwardIterator, class T, class Compare>
pair<ForwardIterator, ForwardIterator>
equal_range(ForwardIterator first, ForwardIterator last, const T&
value, Compare comp);
what are the constraints on T?
The Standard only specifies that "Type T is LessThanComparable
(20.1.2)." Is that it?
The resolution to LWG 270 changes that.
The reason I am asking is because I have a case something like:
struct Compare
{
bool operator()(const std::string& lhs, int rhs);
bool operator()(int lhs, const std::string& rhs);
};
...
std::vector<int> v;
std::string k("abc");
std::equal_range(v.begin(), v.end(), k, Compare());
Now this only works if there is *not* a constraint stating that the
value type of ForwardIterator == T.
Is the above well-defined in terms of the Standard?
Yes, but only since LWG 270 was resolved. See
http://std.dkuug.dk/jtc1/sc22/wg21/docs/lwg-defects.html#270
and http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2001/n1313.html
Regards,
--
Dave Abrahams
Boost Consulting
www.boost-consulting.com
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]