From ad1557f5d775739230e0e2252c293948977b42a0 Mon Sep 17 00:00:00 2001 From: Stephan Bergmann Date: Thu, 30 Sep 2021 13:54:26 +0200 Subject: A more lightweight O[U]StringConcatenation ...compared to a full-blown O[U]String, for temporary objects holding an O[U]StringConcat result that can then be used as a std::[u16]string_view. It's instructive to see how some invocations of operator ==, operator !=, and O[U]StringBuffer::insert with an O[U]StringConcat argument required implicit materialization of an O[U]String temporary, and how that expensive operation has now been made explicit with the explicit O[U]StringConcatenation ctor. (The additional operator == and operator != overloads are necessary because the overloads taking two std::[u16]string_view parameters wouldn't even be found here with ADL. And the OUString-related ones would cause ambiguities in at least sal/qa/rtl/strings/test_oustring_stringliterals.cxx built with RTL_STRING_UNITTEST, so have simply been disabled for that special test-code case.) Change-Id: Id29799fa8da21a09ff9794cbc7cc9b366e6803b8 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/122890 Tested-by: Jenkins Reviewed-by: Noel Grandin Reviewed-by: Stephan Bergmann --- compilerplugins/clang/test/stringview.cxx | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'compilerplugins/clang/test/stringview.cxx') diff --git a/compilerplugins/clang/test/stringview.cxx b/compilerplugins/clang/test/stringview.cxx index 34accb6e6448..be7b8db3ea95 100644 --- a/compilerplugins/clang/test/stringview.cxx +++ b/compilerplugins/clang/test/stringview.cxx @@ -99,7 +99,7 @@ void f4(OUString s1, OUString s2) } } -void f5(char const* s1, sal_Int32 n1, char16_t const* s2, sal_Int32 n2) +void f5(char const* s1, sal_Int32 n1, char16_t const* s2, sal_Int32 n2, OString s3, OUString s4) { // expected-error@+1 {{instead of an 'rtl::OString', pass a 'std::string_view' [loplugin:stringview]}} call_view(OString()); @@ -118,6 +118,8 @@ void f5(char const* s1, sal_Int32 n1, char16_t const* s2, sal_Int32 n2) call_view(OString(std::string_view("foo"))); // expected-error@+1 {{instead of an 'rtl::OString' constructed from a 'OStringNumber', pass a 'std::string_view' [loplugin:stringview]}} call_view(OString(OString::number(0))); + // expected-error-re@+1 {{instead of an 'rtl::OString' constructed from a 'typename std::enable_if_t::allowOStringConcat && ToStringHelper::allowOStringConcat, OStringConcat{{ ?}}>' (aka 'rtl::OStringConcat'), pass a 'std::string_view' via 'rtl::OStringConcatenation' [loplugin:stringview]}} + call_view(OString(s3 + s3)); // expected-error@+1 {{instead of an 'rtl::OUString', pass a 'std::u16string_view' [loplugin:stringview]}} call_view(OUString()); // expected-error@+1 {{instead of an 'rtl::OUString' constructed from a 'const char [4]', pass a 'std::u16string_view' [loplugin:stringview]}} @@ -141,6 +143,8 @@ void f5(char const* s1, sal_Int32 n1, char16_t const* s2, sal_Int32 n2) call_view(OUString(std::u16string_view(u"foo"))); // expected-error@+1 {{instead of an 'rtl::OUString' constructed from a 'OUStringNumber', pass a 'std::u16string_view' [loplugin:stringview]}} call_view(OUString(OUString::number(0))); + // expected-error-re@+1 {{instead of an 'rtl::OUString' constructed from a 'typename std::enable_if_t::allowOUStringConcat && ToStringHelper::allowOUStringConcat, OUStringConcat{{ ?}}>' (aka 'rtl::OUStringConcat'), pass a 'std::u16string_view' via 'rtl::OUStringConcatenation' [loplugin:stringview]}} + call_view(OUString(s4 + s4)); } void f5(OUString s) -- cgit