From ab8cc8387f1891ccf99721bfe5a6182c507e332f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20K=C3=BCmmel?= Date: Tue, 10 Nov 2015 18:57:40 +0100 Subject: Add qOverload to select overloaded functions [ChangeLog][QtCore][Global] qOverload added to select overloaded functions. Change-Id: I7c9b1b054e6631eca0b5594db59e1202ef552c33 Reviewed-by: Olivier Goffart (Woboq GmbH) --- tests/auto/corelib/global/qglobal/tst_qglobal.cpp | 122 ++++++++++++++++++++++ 1 file changed, 122 insertions(+) (limited to 'tests/auto/corelib/global/qglobal') diff --git a/tests/auto/corelib/global/qglobal/tst_qglobal.cpp b/tests/auto/corelib/global/qglobal/tst_qglobal.cpp index d1a6e66203..152906287c 100644 --- a/tests/auto/corelib/global/qglobal/tst_qglobal.cpp +++ b/tests/auto/corelib/global/qglobal/tst_qglobal.cpp @@ -55,6 +55,7 @@ private slots: void qprintable(); void qprintable_data(); void buildAbiEndianness(); + void testqOverload(); }; void tst_QGlobal::qIsNull() @@ -652,5 +653,126 @@ void tst_QGlobal::buildAbiEndianness() QVERIFY(QSysInfo::buildAbi().contains(endian)); } +struct Overloaded +{ + void foo() {} + void foo(QByteArray) {} + void foo(QByteArray, const QString &) {} + + void constFoo() const {} + void constFoo(QByteArray) const {} + void constFoo(QByteArray, const QString &) const {} + + void mixedFoo() {} + void mixedFoo(QByteArray) const {} +}; + +void freeOverloaded() {} +void freeOverloaded(QByteArray) {} +void freeOverloaded(QByteArray, const QString &) {} + +void freeOverloadedGet(QByteArray) {} +QByteArray freeOverloadedGet() { return QByteArray(); } + + +void tst_QGlobal::testqOverload() +{ +#ifdef Q_COMPILER_VARIADIC_TEMPLATES + + // void returning free overloaded functions + QVERIFY(QOverload<>::of(&freeOverloaded) == + static_cast(&freeOverloaded)); + + QVERIFY(QOverload::of(&freeOverloaded) == + static_cast(&freeOverloaded)); + + QVERIFY((QOverload::of(&freeOverloaded)) == + static_cast(&freeOverloaded)); + + // value returning free overloaded functions + QVERIFY(QOverload<>::of(&freeOverloadedGet) == + static_cast(&freeOverloadedGet)); + + QVERIFY(QOverload::of(&freeOverloadedGet) == + static_cast(&freeOverloadedGet)); + + // void returning overloaded member functions + QVERIFY(QOverload<>::of(&Overloaded::foo) == + static_cast(&Overloaded::foo)); + + QVERIFY(QOverload::of(&Overloaded::foo) == + static_cast(&Overloaded::foo)); + + QVERIFY((QOverload::of(&Overloaded::foo)) == + static_cast(&Overloaded::foo)); + + // void returning overloaded const member functions + QVERIFY(QOverload<>::of(&Overloaded::constFoo) == + static_cast(&Overloaded::constFoo)); + + QVERIFY(QOverload::of(&Overloaded::constFoo) == + static_cast(&Overloaded::constFoo)); + + QVERIFY((QOverload::of(&Overloaded::constFoo)) == + static_cast(&Overloaded::constFoo)); + + // void returning overloaded const AND non-const member functions + QVERIFY(QNonConstOverload<>::of(&Overloaded::mixedFoo) == + static_cast(&Overloaded::mixedFoo)); + + QVERIFY(QConstOverload::of(&Overloaded::mixedFoo) == + static_cast(&Overloaded::mixedFoo)); + +#if defined(__cpp_variable_templates) && __cpp_variable_templates >= 201304 // C++14 + + // void returning free overloaded functions + QVERIFY(qOverload<>(&freeOverloaded) == + static_cast(&freeOverloaded)); + + QVERIFY(qOverload(&freeOverloaded) == + static_cast(&freeOverloaded)); + + QVERIFY((qOverload(&freeOverloaded)), + static_cast(&freeOverloaded)); + + // value returning free overloaded functions + QVERIFY(qOverload<>(&freeOverloadedGet) == + static_cast(&freeOverloadedGet)); + + QVERIFY(qOverload(&freeOverloadedGet) == + static_cast(&freeOverloadedGet)); + + // void returning overloaded member functions + QVERIFY(qOverload<>(&Overloaded::foo) == + static_cast(&Overloaded::foo)); + + QVERIFY(qOverload(&Overloaded::foo) == + static_cast(&Overloaded::foo)); + + QVERIFY((qOverload(&Overloaded::foo)) == + static_cast(&Overloaded::foo)); + + // void returning overloaded const member functions + QVERIFY(qOverload<>(&Overloaded::constFoo) == + static_cast(&Overloaded::constFoo)); + + QVERIFY(qOverload(&Overloaded::constFoo) == + static_cast(&Overloaded::constFoo)); + + QVERIFY((qOverload(&Overloaded::constFoo)) == + static_cast(&Overloaded::constFoo)); + + // void returning overloaded const AND non-const member functions + QVERIFY(qNonConstOverload<>(&Overloaded::mixedFoo) == + static_cast(&Overloaded::mixedFoo)); + + QVERIFY(qConstOverload(&Overloaded::mixedFoo) == + static_cast(&Overloaded::mixedFoo)); +#endif + +#endif +} + + QTEST_APPLESS_MAIN(tst_QGlobal) #include "tst_qglobal.moc" -- cgit v1.2.3