Why is there no support for concatenating std::string and std::string_view?
The reason for this is given in n3512 string_ref: a non-owning reference to a string, revision 2 by Jeffrey Yasskin:
I also omitted operator+(basic_string, basic_string_ref) because LLVM returns a lightweight object from this overload and only performs the concatenation lazily. If we define this overload, we'll have a hard time introducing that lightweight concatenation later.
It has been later suggested on the std-proposals mailing list to add these operator overloads to the standard.
s3rvac
Software engineer. Open source, Python, C++, Rust, Linux, Vim, clean code and TDD enthusiast.
Updated on June 08, 2022Comments
-
s3rvac almost 2 years
Since C++17, we have
std::string_view
, a light-weight view into a contiguous sequence of characters that avoids unnecessary copying of data. Instead of having aconst std::string&
parameter, it is now often recommended to usestd::string_view
.However, one quickly finds out that switching from
const std::string&
tostd::string_view
breaks code that uses string concatenation as there is no support for concatenatingstd::string
andstd::string_view
:std::string{"abc"} + std::string_view{"def"}; // ill-formed (fails to compile) std::string_view{"abc"} + std::string{"def"}; // ill-formed (fails to compile)
Why is there no support for concatenating
std::string
andstd::string_view
in the standard?