summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/corelib/tools/qflatmap_p.h2
-rw-r--r--tests/auto/corelib/tools/qflatmap/tst_qflatmap.cpp27
2 files changed, 26 insertions, 3 deletions
diff --git a/src/corelib/tools/qflatmap_p.h b/src/corelib/tools/qflatmap_p.h
index 512dfa4ae7..77864babc3 100644
--- a/src/corelib/tools/qflatmap_p.h
+++ b/src/corelib/tools/qflatmap_p.h
@@ -417,7 +417,7 @@ private:
struct is_marked_transparent_type : std::false_type { };
template <class X>
- struct is_marked_transparent_type<X, typename X::is_transparent> : std::true_type { };
+ struct is_marked_transparent_type<X, std::void_t<typename X::is_transparent>> : std::true_type { };
template <class X>
using is_marked_transparent = typename std::enable_if<
diff --git a/tests/auto/corelib/tools/qflatmap/tst_qflatmap.cpp b/tests/auto/corelib/tools/qflatmap/tst_qflatmap.cpp
index 88d2748f06..11448b33cb 100644
--- a/tests/auto/corelib/tools/qflatmap/tst_qflatmap.cpp
+++ b/tests/auto/corelib/tools/qflatmap/tst_qflatmap.cpp
@@ -52,10 +52,15 @@ private slots:
void extraction();
void iterators();
void statefulComparator();
- void transparency();
+ void transparency_using();
+ void transparency_struct();
void try_emplace_and_insert_or_assign();
void viewIterators();
void varLengthArray();
+
+private:
+ template <typename Compare>
+ void transparency_impl();
};
void tst_QFlatMap::constructing()
@@ -405,7 +410,7 @@ void tst_QFlatMap::statefulComparator()
QVERIFY(m2.key_comp().count > m1.key_comp().count);
}
-void tst_QFlatMap::transparency()
+void tst_QFlatMap::transparency_using()
{
struct StringViewCompare
{
@@ -415,7 +420,25 @@ void tst_QFlatMap::transparency()
return lhs < rhs;
}
};
+ transparency_impl<StringViewCompare>();
+}
+void tst_QFlatMap::transparency_struct()
+{
+ struct StringViewCompare
+ {
+ struct is_transparent {};
+ bool operator()(QAnyStringView lhs, QAnyStringView rhs) const
+ {
+ return lhs < rhs;
+ }
+ };
+ transparency_impl<StringViewCompare>();
+}
+
+template <typename StringViewCompare>
+void tst_QFlatMap::transparency_impl()
+{
using Map = QFlatMap<QString, QString, StringViewCompare>;
auto m = Map{ { "one", "een" }, { "two", "twee" }, { "three", "dree" } };