Use normal emplace implementation for emplace_hint and insert with hint.

There's a bug in the emplace_hint implementation for unordered
containers with equivalent keys. Since my tests missed it, I'm just
going to use the normal emplace implementation until I write better
tests.

[SVN r57005]
This commit is contained in:
Daniel James
2009-10-19 19:24:33 +00:00
parent 6c24cccf96
commit 8d4b503e56
4 changed files with 20 additions and 91 deletions

View File

@@ -326,7 +326,7 @@ namespace boost
table_.emplace(obj));
}
iterator insert(const_iterator hint, const value_type& obj)
iterator insert(const_iterator, const value_type& obj)
{
return iterator(table_.emplace(obj).first);
}
@@ -735,10 +735,9 @@ namespace boost
}
template <class... Args>
iterator emplace_hint(const_iterator hint, Args&&... args)
iterator emplace_hint(const_iterator, Args&&... args)
{
return iterator(table_.emplace_hint(get(hint),
std::forward<Args>(args)...));
return iterator(table_.emplace(std::forward<Args>(args)...));
}
#else
@@ -747,10 +746,10 @@ namespace boost
return iterator(table_.emplace(v));
}
iterator emplace_hint(const_iterator hint,
iterator emplace_hint(const_iterator,
value_type const& v = value_type())
{
return iterator(table_.emplace_hint(get(hint), v));
return iterator(table_.emplace(v));
}
#define BOOST_UNORDERED_EMPLACE(z, n, _) \
@@ -768,11 +767,11 @@ namespace boost
template < \
BOOST_UNORDERED_TEMPLATE_ARGS(z, n) \
> \
iterator emplace_hint(const_iterator hint, \
iterator emplace_hint(const_iterator, \
BOOST_UNORDERED_FUNCTION_PARAMS(z, n) \
) \
{ \
return iterator(table_.emplace_hint(get(hint), \
return iterator(table_.emplace( \
BOOST_UNORDERED_CALL_PARAMS(z, n) \
)); \
}
@@ -789,9 +788,9 @@ namespace boost
return iterator(table_.emplace(obj));
}
iterator insert(const_iterator hint, const value_type& obj)
iterator insert(const_iterator, const value_type& obj)
{
return iterator(table_.emplace_hint(get(hint), obj));
return iterator(table_.emplace(obj));
}
template <class InputIt>