diff options
author | Marc Mutz <marc.mutz@qt.io> | 2023-01-02 10:50:17 +0100 |
---|---|---|
committer | Marc Mutz <marc.mutz@qt.io> | 2023-01-03 21:55:21 +0100 |
commit | 887d5eddb0e926e12841a9dbe8f425704da25e6d (patch) | |
tree | d0a7c834bf92b0a6cc62edb1df9a487dfc529057 | |
parent | 69ea84fd71d66e095a4d3f581f276fe5b41964a3 (diff) |
QString: use inheritance, not template aliases, for arg() constraints
For unknown reasons, using template aliases breaks on some MSVC
versions and a valid arg(std::declval<QStringRef>(),
std::declval<QString>()) call gets SFINAE'd out.
Partially reverts e0963f7d6a31dd26629a9553c0fe00d0c8b2f22f.
Add a test.
Fixes: QTBUG-109723
Change-Id: I832357c91efa4caafce40b50dd76a700de2c58d7
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
-rw-r--r-- | src/corelib/text/qstring.h | 6 | ||||
-rw-r--r-- | tests/auto/corelib/text/qstring/tst_qstring.cpp | 3 |
2 files changed, 6 insertions, 3 deletions
diff --git a/src/corelib/text/qstring.h b/src/corelib/text/qstring.h index f1363903f5..be1f822985 100644 --- a/src/corelib/text/qstring.h +++ b/src/corelib/text/qstring.h @@ -361,11 +361,11 @@ public: #endif private: template <typename T> - using is_convertible_to_view_or_qstring = std::integral_constant<bool, + struct is_convertible_to_view_or_qstring + : std::integral_constant<bool, std::is_convertible<T, QString>::value || std::is_convertible<T, QStringView>::value || - std::is_convertible<T, QLatin1String>::value - >; + std::is_convertible<T, QLatin1String>::value> {}; public: template <typename...Args> Q_REQUIRED_RESULT diff --git a/tests/auto/corelib/text/qstring/tst_qstring.cpp b/tests/auto/corelib/text/qstring/tst_qstring.cpp index 878988d425..90f7f63192 100644 --- a/tests/auto/corelib/text/qstring/tst_qstring.cpp +++ b/tests/auto/corelib/text/qstring/tst_qstring.cpp @@ -4876,6 +4876,9 @@ void tst_QString::arg() QCOMPARE( s4.arg("foo", 10), QLatin1String("[ foo]") ); QCOMPARE( s4.arg("foo", -10), QLatin1String("[foo ]") ); + // QStringRef argument in multi-arg: + QCOMPARE(QString("%1;%2").arg(QStringRef(), QString()), ";"); + QString firstName( "James" ); QString lastName( "Bond" ); QString fullName = QString( "My name is %2, %1 %2" ) |