From 4054759aecd06313a775c8c71748ec52ca7dc27d Mon Sep 17 00:00:00 2001 From: Mikhail Svetkin Date: Fri, 8 Mar 2019 15:38:33 +0100 Subject: [PATCH] core: Add deduction guides for QPair [ChangeLog][QtCore] Added support of deduction guides for QPair Change-Id: I41a798390dc2c925b0f8432ba12aa345724de2d7 Reviewed-by: Martin Smith Reviewed-by: Thiago Macieira Reviewed-by: Ville Voutilainen --- src/corelib/tools/qpair.h | 5 ++++ tests/auto/corelib/tools/qpair/qpair.pro | 3 +++ tests/auto/corelib/tools/qpair/tst_qpair.cpp | 26 ++++++++++++++++++++ 3 files changed, 34 insertions(+) diff --git a/src/corelib/tools/qpair.h b/src/corelib/tools/qpair.h index 94977fc826..1af43d0a68 100644 --- a/src/corelib/tools/qpair.h +++ b/src/corelib/tools/qpair.h @@ -97,6 +97,11 @@ struct QPair T2 second; }; +#if defined(__cpp_deduction_guides) && __cpp_deduction_guides >= 201606 +template +QPair(T1, T2) -> QPair; +#endif + template void swap(QPair &lhs, QPair &rhs) Q_DECL_NOEXCEPT_EXPR(noexcept(lhs.swap(rhs))) { lhs.swap(rhs); } diff --git a/tests/auto/corelib/tools/qpair/qpair.pro b/tests/auto/corelib/tools/qpair/qpair.pro index 659be887d3..d684a24a57 100644 --- a/tests/auto/corelib/tools/qpair/qpair.pro +++ b/tests/auto/corelib/tools/qpair/qpair.pro @@ -2,3 +2,6 @@ CONFIG += testcase TARGET = tst_qpair QT = core testlib SOURCES = tst_qpair.cpp + +# Force C++17 if available (needed due to Q_COMPILER_DEDUCTION_GUIDES) +contains(QT_CONFIG, c++1z): CONFIG += c++1z diff --git a/tests/auto/corelib/tools/qpair/tst_qpair.cpp b/tests/auto/corelib/tools/qpair/tst_qpair.cpp index dedc353e67..3c972329bc 100644 --- a/tests/auto/corelib/tools/qpair/tst_qpair.cpp +++ b/tests/auto/corelib/tools/qpair/tst_qpair.cpp @@ -39,6 +39,7 @@ private Q_SLOTS: void testConstexpr(); void testConversions(); void taskQTBUG_48780_pairContainingCArray(); + void testDeducationRules(); }; class C { C() {} char _[4]; }; @@ -202,5 +203,30 @@ void tst_QPair::taskQTBUG_48780_pairContainingCArray() Q_UNUSED(pair); } +void tst_QPair::testDeducationRules() +{ +#if defined(__cpp_deduction_guides) && __cpp_deduction_guides >= 201606 + QPair p1{1, 2}; + static_assert(std::is_same::value); + static_assert(std::is_same::value); + QCOMPARE(p1.first, 1); + QCOMPARE(p1.second, 2); + + QPair p2{QString("string"), 2}; + static_assert(std::is_same::value); + static_assert(std::is_same::value); + QCOMPARE(p2.first, "string"); + QCOMPARE(p2.second, 2); + + QPair p3(p2); + static_assert(std::is_same::value); + static_assert(std::is_same::value); + QCOMPARE(p3.first, "string"); + QCOMPARE(p3.second, 2); +#else + QSKIP("Unsupported"); +#endif +} + QTEST_APPLESS_MAIN(tst_QPair) #include "tst_qpair.moc"