[libcxx] Portability fix: unordered_set and unordered_multiset iterators are not required to be the same

The unordered_set and unordered_multiset iterators are specified in the standard as follows:

using iterator             = implementation-defined; // see [container.requirements]
using const_iterator       = implementation-defined; // see [container.requirements]
using local_iterator       = implementation-defined; // see [container.requirements]
using const_local_iterator = implementation-defined; // see [container.requirements]

The pairs iterator/const_iterator and local_iterator/const_local_iterator
are not required to be the same. The reasonable requirement would be that
iterator can convert to const_iterator and local_iterator can convert to
const_local_iterator. This patch weakens the check and makes the test
more portable.

Reviewed as https://reviews.llvm.org/D56493.
Thanks to Andrey Maksimov for the patch.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@352083 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Louis Dionne
2019-01-24 19:09:22 +00:00
parent 2a895e8087
commit 42cbe7a2aa

View File

@@ -51,10 +51,10 @@ void testUnorderedMap() {
template <class Set, class ValueTp, class CPtrT>
void testUnorderedSet() {
static_assert((std::is_same<typename Set::iterator,
typename Set::const_iterator>::value), "");
static_assert((std::is_same<typename Set::local_iterator,
typename Set::const_local_iterator>::value), "");
static_assert((std::is_convertible<typename Set::iterator,
typename Set::const_iterator>::value), "");
static_assert((std::is_convertible<typename Set::local_iterator,
typename Set::const_local_iterator>::value), "");
typedef typename Set::difference_type Diff;
{
typedef typename Set::iterator It;