diff --git a/libcxx/include/iomanip b/libcxx/include/iomanip index e334c7de9fd7..a5042c7df810 100644 --- a/libcxx/include/iomanip +++ b/libcxx/include/iomanip @@ -519,15 +519,16 @@ std::basic_ostream<_CharT, _Traits> & __quoted_output ( basic_ostream<_CharT, _Traits> &__os, _ForwardIterator __first, _ForwardIterator __last, _CharT __delim, _CharT __escape ) { - __os << __delim; + _VSTD::basic_string<_CharT, _Traits> __str; + __str.push_back(__delim); for ( ; __first != __last; ++ __first ) { if (_Traits::eq (*__first, __escape) || _Traits::eq (*__first, __delim)) - __os << __escape; - __os << *__first; + __str.push_back(__escape); + __str.push_back(*__first); } - __os << __delim; - return __os; + __str.push_back(__delim); + return __put_character_sequence(__os, __str.data(), __str.size()); } template diff --git a/libcxx/test/input.output/iostream.format/quoted.manip/quoted.pass.cpp b/libcxx/test/input.output/iostream.format/quoted.manip/quoted.pass.cpp index 1f6b12674842..d09b3cae4f66 100644 --- a/libcxx/test/input.output/iostream.format/quoted.manip/quoted.pass.cpp +++ b/libcxx/test/input.output/iostream.format/quoted.manip/quoted.pass.cpp @@ -28,13 +28,13 @@ bool is_skipws ( const std::wistream *is ) { } void both_ways ( const char *p ) { - std::string str(p); - auto q = std::quoted(str); + std::string str(p); + auto q = std::quoted(str); std::stringstream ss; bool skippingws = is_skipws ( &ss ); - ss << q; - ss >> q; + ss << q; + ss >> q; } void round_trip ( const char *p ) { @@ -92,6 +92,20 @@ std::string unquote ( const char *p, char delim='"', char escape='\\' ) { return s; } +void test_padding () { + { + std::stringstream ss; + ss << std::left << std::setw(10) << std::setfill('!') << std::quoted("abc", '`'); + assert ( ss.str() == "`abc`!!!!!" ); + } + + { + std::stringstream ss; + ss << std::right << std::setw(10) << std::setfill('!') << std::quoted("abc", '`'); + assert ( ss.str() == "!!!!!`abc`" ); + } +} + void round_trip ( const wchar_t *p ) { std::wstringstream ss; @@ -197,6 +211,7 @@ int main() assert ( unquote ( "" ) == "" ); // nothing there assert ( unquote ( L"" ) == L"" ); // nothing there + test_padding (); } #else