summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libcxx/include/sstream5
-rw-r--r--libcxx/test/input.output/string.streams/istringstream/istringstream.assign/move.pass.cpp36
2 files changed, 41 insertions, 0 deletions
diff --git a/libcxx/include/sstream b/libcxx/include/sstream
index f90d4464a40..27ae78f9d45 100644
--- a/libcxx/include/sstream
+++ b/libcxx/include/sstream
@@ -325,11 +325,16 @@ basic_stringbuf<_CharT, _Traits, _Allocator>::operator=(basic_stringbuf&& __rhs)
__p = const_cast<char_type*>(__str_.data());
if (__binp != -1)
this->setg(__p + __binp, __p + __ninp, __p + __einp);
+ else
+ this->setg(nullptr, nullptr, nullptr);
if (__bout != -1)
{
this->setp(__p + __bout, __p + __eout);
this->pbump(__nout);
}
+ else
+ this->setp(nullptr, nullptr);
+
__hm_ = __hm == -1 ? nullptr : __p + __hm;
__mode_ = __rhs.__mode_;
__p = const_cast<char_type*>(__rhs.__str_.data());
diff --git a/libcxx/test/input.output/string.streams/istringstream/istringstream.assign/move.pass.cpp b/libcxx/test/input.output/string.streams/istringstream/istringstream.assign/move.pass.cpp
index 6e20640c977..a3e869de2d9 100644
--- a/libcxx/test/input.output/string.streams/istringstream/istringstream.assign/move.pass.cpp
+++ b/libcxx/test/input.output/string.streams/istringstream/istringstream.assign/move.pass.cpp
@@ -33,6 +33,24 @@ int main()
ss >> i;
assert(i == 456);
}
+ {
+ std::istringstream s1("Aaaaa Bbbbb Cccccccccc Dddddddddddddddddd");
+ std::string s;
+ s1 >> s;
+
+ std::istringstream s2 = std::move(s1);
+ s2 >> s;
+ assert(s == "Bbbbb");
+
+ std::istringstream s3;
+ s3 = std::move(s2);
+ s3 >> s;
+ assert(s == "Cccccccccc");
+
+ s1 = std::move(s3);
+ s1 >> s;
+ assert(s == "Dddddddddddddddddd");
+ }
{
std::wistringstream ss0(L" 123 456");
std::wistringstream ss;
@@ -46,5 +64,23 @@ int main()
ss >> i;
assert(i == 456);
}
+ {
+ std::wistringstream s1(L"Aaaaa Bbbbb Cccccccccc Dddddddddddddddddd");
+ std::wstring s;
+ s1 >> s;
+
+ std::wistringstream s2 = std::move(s1);
+ s2 >> s;
+ assert(s == L"Bbbbb");
+
+ std::wistringstream s3;
+ s3 = std::move(s2);
+ s3 >> s;
+ assert(s == L"Cccccccccc");
+
+ s1 = std::move(s3);
+ s1 >> s;
+ assert(s == L"Dddddddddddddddddd");
+ }
#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
}
OpenPOWER on IntegriCloud