Opportunistically take advantage of C++20 move-in/out-of stringstream (#1457)
* Opportunistically take advantage of C++20 move-out-of stringstream
* Opportunistically take advantage of C++20 move-in/out-of stringstream
---------
Co-authored-by: Jordan Bayles <bayles.jordan@gmail.com>
diff --git a/src/lib_json/json_reader.cpp b/src/lib_json/json_reader.cpp
index 4ab4dff..8ef29f0 100644
--- a/src/lib_json/json_reader.cpp
+++ b/src/lib_json/json_reader.cpp
@@ -587,8 +587,7 @@
bool Reader::decodeDouble(Token& token, Value& decoded) {
double value = 0;
- String buffer(token.start_, token.end_);
- IStringStream is(buffer);
+ IStringStream is(String(token.start_, token.end_));
if (!(is >> value)) {
if (value == std::numeric_limits<double>::max())
value = std::numeric_limits<double>::infinity();
@@ -1622,8 +1621,7 @@
bool OurReader::decodeDouble(Token& token, Value& decoded) {
double value = 0;
- const String buffer(token.start_, token.end_);
- IStringStream is(buffer);
+ IStringStream is(String(token.start_, token.end_));
if (!(is >> value)) {
if (value == std::numeric_limits<double>::max())
value = std::numeric_limits<double>::infinity();
@@ -1981,7 +1979,7 @@
String* errs) {
OStringStream ssin;
ssin << sin.rdbuf();
- String doc = ssin.str();
+ String doc = std::move(ssin).str();
char const* begin = doc.data();
char const* end = begin + doc.size();
// Note that we do not actually need a null-terminator.
diff --git a/src/lib_json/json_writer.cpp b/src/lib_json/json_writer.cpp
index 5bb5dd1..ee45c43 100644
--- a/src/lib_json/json_writer.cpp
+++ b/src/lib_json/json_writer.cpp
@@ -1251,7 +1251,7 @@
OStringStream sout;
StreamWriterPtr const writer(factory.newStreamWriter());
writer->write(root, &sout);
- return sout.str();
+ return std::move(sout).str();
}
OStream& operator<<(OStream& sout, Value const& root) {