diff options
-rw-r--r-- | src/corelib/text/qanystringview.h | 3 | ||||
-rw-r--r-- | src/corelib/text/qstringbuilder.h | 2 | ||||
-rw-r--r-- | tests/auto/corelib/text/qanystringview/tst_qanystringview.cpp | 18 |
3 files changed, 21 insertions, 2 deletions
diff --git a/src/corelib/text/qanystringview.h b/src/corelib/text/qanystringview.h index 68754931e9..774651cb6a 100644 --- a/src/corelib/text/qanystringview.h +++ b/src/corelib/text/qanystringview.h @@ -50,6 +50,7 @@ QT_BEGIN_NAMESPACE template <typename, typename> class QStringBuilder; +template <typename> struct QConcatenable; class QAnyStringView { @@ -163,7 +164,7 @@ public: // defined in qstringbuilder.h template <typename A, typename B> inline QAnyStringView(const QStringBuilder<A, B> &expr, - typename QStringBuilder<A, B>::ConvertTo &&capacity = {}); + typename QConcatenable<QStringBuilder<A, B>>::ConvertTo &&capacity = {}); template <typename Container, if_compatible_container<Container> = true> constexpr QAnyStringView(const Container &c) noexcept diff --git a/src/corelib/text/qstringbuilder.h b/src/corelib/text/qstringbuilder.h index 5a6a531e74..8494459d63 100644 --- a/src/corelib/text/qstringbuilder.h +++ b/src/corelib/text/qstringbuilder.h @@ -468,7 +468,7 @@ QString &operator+=(QString &a, const QStringBuilder<A, B> &b) template <typename A, typename B> QAnyStringView::QAnyStringView(const QStringBuilder<A, B> &expr, - typename QStringBuilder<A, B>::ConvertTo &&capacity) + typename QConcatenable<QStringBuilder<A, B>>::ConvertTo &&capacity) : QAnyStringView(capacity = expr) {} QT_END_NAMESPACE diff --git a/tests/auto/corelib/text/qanystringview/tst_qanystringview.cpp b/tests/auto/corelib/text/qanystringview/tst_qanystringview.cpp index bbc0bdacfd..e5e3ac9f84 100644 --- a/tests/auto/corelib/text/qanystringview/tst_qanystringview.cpp +++ b/tests/auto/corelib/text/qanystringview/tst_qanystringview.cpp @@ -30,6 +30,7 @@ #include <QChar> #include <QList> #include <QString> +#include <QStringBuilder> #include <QVarLengthArray> #include <QTest> @@ -230,6 +231,12 @@ static_assert(CanConvert<std::array<wchar_t, 123>> == CanConvertFromWCharT); static_assert(!CanConvert<std::deque<wchar_t>>); static_assert(!CanConvert<std::list<wchar_t>>); +// +// QStringBuilder +// + +static_assert(CanConvert<QStringBuilder<QString, QString>>); + class tst_QAnyStringView : public QObject { @@ -303,9 +310,13 @@ private Q_SLOTS: void fromChar16TContainers() const { fromContainers<char16_t>(); } void fromWCharTContainers() const { ONLY_WIN(fromContainers<wchar_t>()); } + void fromQStringBuilder_QString_QString() const { fromQStringBuilder(u"1"_qs % u"2"_qs, u"12"); } + void comparison(); private: + template <typename StringBuilder> + void fromQStringBuilder(StringBuilder &&sb, QStringView expected) const; template <typename Char> void fromArray() const; template <typename String> @@ -419,6 +430,13 @@ void tst_QAnyStringView::basics() const QVERIFY(!(sv2 != sv1)); } +template <typename StringBuilder> +void tst_QAnyStringView::fromQStringBuilder(StringBuilder &&sb, QStringView expected) const +{ + auto toAnyStringView = [](QAnyStringView sv) { return sv; }; + QCOMPARE(toAnyStringView(std::forward<StringBuilder>(sb)), expected); +} + template <typename Char> void tst_QAnyStringView::fromArray() const { |