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 - struct is_marked_transparent_type : std::true_type { }; + struct is_marked_transparent_type> : std::true_type { }; template 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 + 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(); +} +void tst_QFlatMap::transparency_struct() +{ + struct StringViewCompare + { + struct is_transparent {}; + bool operator()(QAnyStringView lhs, QAnyStringView rhs) const + { + return lhs < rhs; + } + }; + transparency_impl(); +} + +template +void tst_QFlatMap::transparency_impl() +{ using Map = QFlatMap; auto m = Map{ { "one", "een" }, { "two", "twee" }, { "three", "dree" } };