From 5927acaf652e2dfacd777a7491c217aefd1118ef Mon Sep 17 00:00:00 2001 From: Allan Sandfeld Jensen Date: Wed, 9 Aug 2017 15:57:00 +0200 Subject: Add support for converting from std::variant Adds inline handling of the C++17 type std::variant, so the type will be resolved if converted into a QVariant. Change-Id: I31809d70d7f347277389d42a3695836ec7a32d02 Reviewed-by: Thiago Macieira --- tests/auto/corelib/kernel/qvariant/qvariant.pro | 3 +- .../auto/corelib/kernel/qvariant/tst_qvariant.cpp | 42 +++++++++++++++++++++- 2 files changed, 43 insertions(+), 2 deletions(-) (limited to 'tests/auto/corelib/kernel') diff --git a/tests/auto/corelib/kernel/qvariant/qvariant.pro b/tests/auto/corelib/kernel/qvariant/qvariant.pro index 96071f9f73..a620be0091 100644 --- a/tests/auto/corelib/kernel/qvariant/qvariant.pro +++ b/tests/auto/corelib/kernel/qvariant/qvariant.pro @@ -5,7 +5,8 @@ INCLUDEPATH += $$PWD/../../../other/qvariant_common SOURCES = tst_qvariant.cpp RESOURCES += qvariant.qrc DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0 -qtConfig(c++11): CONFIG += c++11 +qtConfig(c++14): CONFIG += c++14 +qtConfig(c++1z): CONFIG += c++1z !qtConfig(doubleconversion):!qtConfig(system-doubleconversion) { DEFINES += QT_NO_DOUBLECONVERSION } diff --git a/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp b/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp index 5d19cb8428..9eb8071ff3 100644 --- a/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp +++ b/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp @@ -45,7 +45,9 @@ #include #include #include - +#if QT_HAS_INCLUDE() && __cplusplus >= 201703L +#include +#endif #include #include #include @@ -281,6 +283,8 @@ private slots: void accessSequentialContainerKey(); + void fromStdVariant(); + private: void dataStream_data(QDataStream::Version version); void loadQVariantFromDataStream(QDataStream::Version version); @@ -4944,5 +4948,41 @@ void tst_QVariant::accessSequentialContainerKey() QCOMPARE(nameResult, QStringLiteral("Seven")); } +void tst_QVariant::fromStdVariant() +{ +#if QT_HAS_INCLUDE() && __cplusplus >= 201703L + { + typedef std::variant intorbool_t; + intorbool_t stdvar = 5; + QVariant qvar = QVariant::fromStdVariant(stdvar); + QVERIFY(!qvar.isNull()); + QCOMPARE(qvar.type(), QVariant::Int); + QCOMPARE(qvar.value(), std::get(stdvar)); + stdvar = true; + qvar = QVariant::fromStdVariant(stdvar); + QVERIFY(!qvar.isNull()); + QCOMPARE(qvar.type(), QVariant::Bool); + QCOMPARE(qvar.value(), std::get(stdvar)); + } + { + std::variant stdvar; + QVariant qvar = QVariant::fromStdVariant(stdvar); + QVERIFY(!qvar.isValid()); + stdvar = -4; + qvar = QVariant::fromStdVariant(stdvar); + QVERIFY(!qvar.isNull()); + QCOMPARE(qvar.type(), QVariant::Int); + QCOMPARE(qvar.value(), std::get(stdvar)); + } + { + std::variant stdvar = QChar::fromLatin1(' '); + QVariant qvar = QVariant::fromStdVariant(stdvar); + QVERIFY(!qvar.isNull()); + QCOMPARE(qvar.type(), QVariant::Char); + QCOMPARE(qvar.value(), std::get(stdvar)); + } +#endif +} + QTEST_MAIN(tst_QVariant) #include "tst_qvariant.moc" -- cgit v1.2.3