diff options
author | Marc Mutz <marc.mutz@qt.io> | 2022-01-28 10:48:49 +0100 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2022-01-30 19:43:31 +0000 |
commit | 6801c18813d8521fda44515cc9ee745c1b9bf85f (patch) | |
tree | 809a5def93b912621d66e785534c2812d63dc68d | |
parent | 2283a1facfef1d833de11289d600574fba43284a (diff) |
QFlatMap: fix is_transparent detection
Add a level of indirection via void_t such that
struct is_transparent {};
works, and not just
using is_transparent = <unspecified>;
Change-Id: I3ca2af6a07e6989dc95abc10fb2d0078a5269e5b
Reviewed-by: Jörg Bornemann <joerg.bornemann@qt.io>
(cherry picked from commit 58e8ae5605abefd0f579586a890dc13fb381b2a3)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r-- | src/corelib/tools/qflatmap_p.h | 2 | ||||
-rw-r--r-- | tests/auto/corelib/tools/qflatmap/tst_qflatmap.cpp | 27 |
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" } }; |