diff --git a/src/corelib/text/qstring.h b/src/corelib/text/qstring.h index 9896553f7d9..08930f73b57 100644 --- a/src/corelib/text/qstring.h +++ b/src/corelib/text/qstring.h @@ -89,6 +89,10 @@ class QTextCodec; class QStringRef; template class QVector; +namespace QtPrivate { +template class BoolList; +} + class QLatin1String { public: @@ -333,6 +337,7 @@ public: QChar fillChar = QLatin1Char(' ')) const; Q_REQUIRED_RESULT QString arg(QLatin1String a, int fieldWidth = 0, QChar fillChar = QLatin1Char(' ')) const; +#if QT_STRINGVIEW_LEVEL < 2 Q_REQUIRED_RESULT QString arg(const QString &a1, const QString &a2) const; Q_REQUIRED_RESULT QString arg(const QString &a1, const QString &a2, const QString &a3) const; Q_REQUIRED_RESULT QString arg(const QString &a1, const QString &a2, const QString &a3, @@ -350,6 +355,33 @@ public: Q_REQUIRED_RESULT QString arg(const QString &a1, const QString &a2, const QString &a3, const QString &a4, const QString &a5, const QString &a6, const QString &a7, const QString &a8, const QString &a9) const; +#endif +private: + template + struct is_convertible_to_view_or_qstring_helper + : std::integral_constant::value || + std::is_convertible::value || + std::is_convertible::value> {}; + template + struct is_convertible_to_view_or_qstring + : is_convertible_to_view_or_qstring_helper::type> {}; +public: + template + Q_REQUIRED_RESULT +#ifdef Q_CLANG_QDOC + QString +#else + typename std::enable_if< + sizeof...(Args) >= 2 && std::is_same< + QtPrivate::BoolList::value..., true>, + QtPrivate::BoolList::value...> + >::value, + QString + >::type +#endif + arg(Args &&...args) const + { return qToStringViewIgnoringNull(*this).arg(std::forward(args)...); } #if QT_DEPRECATED_SINCE(5, 14) QT_DEPRECATED_X("Use vasprintf(), arg() or QTextStream instead") @@ -1053,6 +1085,7 @@ inline QString QString::arg(short a, int fieldWidth, int base, QChar fillChar) c { return arg(qlonglong(a), fieldWidth, base, fillChar); } inline QString QString::arg(ushort a, int fieldWidth, int base, QChar fillChar) const { return arg(qulonglong(a), fieldWidth, base, fillChar); } +#if QT_STRINGVIEW_LEVEL < 2 inline QString QString::arg(const QString &a1, const QString &a2) const { return qToStringViewIgnoringNull(*this).arg(a1, a2); } inline QString QString::arg(const QString &a1, const QString &a2, const QString &a3) const @@ -1078,6 +1111,7 @@ inline QString QString::arg(const QString &a1, const QString &a2, const QString const QString &a4, const QString &a5, const QString &a6, const QString &a7, const QString &a8, const QString &a9) const { return qToStringViewIgnoringNull(*this).arg(a1, a2, a3, a4, a5, a6, a7, a8, a9); } +#endif inline QString QString::section(QChar asep, int astart, int aend, SectionFlags aflags) const { return section(QString(asep), astart, aend, aflags); } @@ -2014,6 +2048,7 @@ Q_REQUIRED_RESULT Q_ALWAYS_INLINE QString argToQStringDispatch(StringView patter return QtPrivate::argToQString(pattern, sizeof...(Args), argBases); } + inline QStringViewArg qStringLikeToArg(const QString &s) noexcept { return QStringViewArg{qToStringViewIgnoringNull(s)}; } Q_DECL_CONSTEXPR inline QStringViewArg qStringLikeToArg(QStringView s) noexcept { return QStringViewArg{s}; } inline QStringViewArg qStringLikeToArg(const QChar &c) noexcept { return QStringViewArg{QStringView{&c, 1}}; } Q_DECL_CONSTEXPR inline QLatin1StringArg qStringLikeToArg(QLatin1String s) noexcept { return QLatin1StringArg{s}; } diff --git a/src/corelib/text/qstringview.cpp b/src/corelib/text/qstringview.cpp index cc852dd042f..8442bcdf1b2 100644 --- a/src/corelib/text/qstringview.cpp +++ b/src/corelib/text/qstringview.cpp @@ -532,6 +532,7 @@ QT_BEGIN_NAMESPACE /*! \fn QString QStringView::arg(Args &&...args) const \fn QString QLatin1String::arg(Args &&...args) const + \fn QString QString::arg(Args &&...args) const \since 5.14 Replaces occurrences of \c{%N} in this string with the corresponding @@ -539,8 +540,8 @@ QT_BEGIN_NAMESPACE the \a args replaces the \c{%N} with the lowest \c{N} (all of them), the second of the \a args the \c{%N} with the next-lowest \c{N} etc. - \c Args can consist of anything that implicitly converts to QStringView - or QLatin1String. + \c Args can consist of anything that implicitly converts to QString, + QStringView or QLatin1String. In addition, the following types are also supported: QChar, QLatin1Char.