[libcxx-commits] [libcxx] [libc++][strings] P2591R5: Concatenation of strings and string views (PR #88389)
Mark de Wever via libcxx-commits
libcxx-commits at lists.llvm.org
Sat Apr 13 04:16:36 PDT 2024
================
@@ -4005,6 +4023,44 @@ operator+(basic_string<_CharT, _Traits, _Allocator>&& __lhs, _CharT __rhs) {
#endif // _LIBCPP_CXX03_LANG
+#if _LIBCPP_STD_VER >= 26
+
+template <class _CharT, class _Traits, class _Allocator>
+_LIBCPP_HIDE_FROM_ABI constexpr basic_string<_CharT, _Traits, _Allocator>
+operator+(const basic_string<_CharT, _Traits, _Allocator>& __lhs,
+ type_identity_t<basic_string_view<_CharT, _Traits>> __rhs) {
+ basic_string<_CharT, _Traits, _Allocator> __r = __lhs;
+ __r.append(__rhs);
+ return __r;
----------------
mordante wrote:
This is correct, however I wonder whether this is the optimal solution. Did you consider/benchmark different approaches like
```
basic_string<_CharT, _Traits, _Allocator> __r;
__r.reserve(__lhs.size() + __rhs.size());
__r.append(__lhs);
__r.append(__rhs);
```
or using `resize_and_overwrite`?
https://github.com/llvm/llvm-project/pull/88389
More information about the libcxx-commits
mailing list