diff options
author | Peter Kümmel <syntheticpp@gmx.net> | 2015-11-10 18:57:40 +0100 |
---|---|---|
committer | Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com> | 2016-02-15 12:33:24 +0000 |
commit | ab8cc8387f1891ccf99721bfe5a6182c507e332f (patch) | |
tree | a892939a744e2fa65dba687f0f42e293b45963f5 /tests/auto/corelib | |
parent | e41e0346698c4578da4625ef3cce7f5417b71e08 (diff) |
Add qOverload to select overloaded functions
[ChangeLog][QtCore][Global] qOverload added to select
overloaded functions.
Change-Id: I7c9b1b054e6631eca0b5594db59e1202ef552c33
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
Diffstat (limited to 'tests/auto/corelib')
-rw-r--r-- | tests/auto/corelib/global/qglobal/tst_qglobal.cpp | 122 |
1 files changed, 122 insertions, 0 deletions
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<void (*)()>(&freeOverloaded)); + + QVERIFY(QOverload<QByteArray>::of(&freeOverloaded) == + static_cast<void (*)(QByteArray)>(&freeOverloaded)); + + QVERIFY((QOverload<QByteArray, const QString &>::of(&freeOverloaded)) == + static_cast<void (*)(QByteArray, const QString &)>(&freeOverloaded)); + + // value returning free overloaded functions + QVERIFY(QOverload<>::of(&freeOverloadedGet) == + static_cast<QByteArray (*)()>(&freeOverloadedGet)); + + QVERIFY(QOverload<QByteArray>::of(&freeOverloadedGet) == + static_cast<void (*)(QByteArray)>(&freeOverloadedGet)); + + // void returning overloaded member functions + QVERIFY(QOverload<>::of(&Overloaded::foo) == + static_cast<void (Overloaded::*)()>(&Overloaded::foo)); + + QVERIFY(QOverload<QByteArray>::of(&Overloaded::foo) == + static_cast<void (Overloaded::*)(QByteArray)>(&Overloaded::foo)); + + QVERIFY((QOverload<QByteArray, const QString &>::of(&Overloaded::foo)) == + static_cast<void (Overloaded::*)(QByteArray, const QString &)>(&Overloaded::foo)); + + // void returning overloaded const member functions + QVERIFY(QOverload<>::of(&Overloaded::constFoo) == + static_cast<void (Overloaded::*)() const>(&Overloaded::constFoo)); + + QVERIFY(QOverload<QByteArray>::of(&Overloaded::constFoo) == + static_cast<void (Overloaded::*)(QByteArray) const>(&Overloaded::constFoo)); + + QVERIFY((QOverload<QByteArray, const QString &>::of(&Overloaded::constFoo)) == + static_cast<void (Overloaded::*)(QByteArray, const QString &) const>(&Overloaded::constFoo)); + + // void returning overloaded const AND non-const member functions + QVERIFY(QNonConstOverload<>::of(&Overloaded::mixedFoo) == + static_cast<void (Overloaded::*)()>(&Overloaded::mixedFoo)); + + QVERIFY(QConstOverload<QByteArray>::of(&Overloaded::mixedFoo) == + static_cast<void (Overloaded::*)(QByteArray) const>(&Overloaded::mixedFoo)); + +#if defined(__cpp_variable_templates) && __cpp_variable_templates >= 201304 // C++14 + + // void returning free overloaded functions + QVERIFY(qOverload<>(&freeOverloaded) == + static_cast<void (*)()>(&freeOverloaded)); + + QVERIFY(qOverload<QByteArray>(&freeOverloaded) == + static_cast<void (*)(QByteArray)>(&freeOverloaded)); + + QVERIFY((qOverload<QByteArray, const QString &>(&freeOverloaded)), + static_cast<void (*)(QByteArray, const QString &)>(&freeOverloaded)); + + // value returning free overloaded functions + QVERIFY(qOverload<>(&freeOverloadedGet) == + static_cast<QByteArray (*)()>(&freeOverloadedGet)); + + QVERIFY(qOverload<QByteArray>(&freeOverloadedGet) == + static_cast<void (*)(QByteArray)>(&freeOverloadedGet)); + + // void returning overloaded member functions + QVERIFY(qOverload<>(&Overloaded::foo) == + static_cast<void (Overloaded::*)()>(&Overloaded::foo)); + + QVERIFY(qOverload<QByteArray>(&Overloaded::foo) == + static_cast<void (Overloaded::*)(QByteArray)>(&Overloaded::foo)); + + QVERIFY((qOverload<QByteArray, const QString &>(&Overloaded::foo)) == + static_cast<void (Overloaded::*)(QByteArray, const QString &)>(&Overloaded::foo)); + + // void returning overloaded const member functions + QVERIFY(qOverload<>(&Overloaded::constFoo) == + static_cast<void (Overloaded::*)() const>(&Overloaded::constFoo)); + + QVERIFY(qOverload<QByteArray>(&Overloaded::constFoo) == + static_cast<void (Overloaded::*)(QByteArray) const>(&Overloaded::constFoo)); + + QVERIFY((qOverload<QByteArray, const QString &>(&Overloaded::constFoo)) == + static_cast<void (Overloaded::*)(QByteArray, const QString &) const>(&Overloaded::constFoo)); + + // void returning overloaded const AND non-const member functions + QVERIFY(qNonConstOverload<>(&Overloaded::mixedFoo) == + static_cast<void (Overloaded::*)()>(&Overloaded::mixedFoo)); + + QVERIFY(qConstOverload<QByteArray>(&Overloaded::mixedFoo) == + static_cast<void (Overloaded::*)(QByteArray) const>(&Overloaded::mixedFoo)); +#endif + +#endif +} + + QTEST_APPLESS_MAIN(tst_QGlobal) #include "tst_qglobal.moc" |