Author: marshall
Date: Fri Mar  7 15:45:32 2014
New Revision: 203290

URL: http://llvm.org/viewvc/llvm-project?rev=203290&view=rev
Log:
Implement LWG #2344: quoted()'s interaction with padding is unclear. I think 
that anyone using quoted with padding is really confused, but it should work 
the way the rest of iostreams works.

Modified:
    libcxx/trunk/include/iomanip
    libcxx/trunk/test/input.output/iostream.format/quoted.manip/quoted.pass.cpp

Modified: libcxx/trunk/include/iomanip
URL: 
http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/iomanip?rev=203290&r1=203289&r2=203290&view=diff
==============================================================================
--- libcxx/trunk/include/iomanip (original)
+++ libcxx/trunk/include/iomanip Fri Mar  7 15:45:32 2014
@@ -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 <class _CharT, class _Traits, class _String>

Modified: 
libcxx/trunk/test/input.output/iostream.format/quoted.manip/quoted.pass.cpp
URL: 
http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/input.output/iostream.format/quoted.manip/quoted.pass.cpp?rev=203290&r1=203289&r2=203290&view=diff
==============================================================================
--- libcxx/trunk/test/input.output/iostream.format/quoted.manip/quoted.pass.cpp 
(original)
+++ libcxx/trunk/test/input.output/iostream.format/quoted.manip/quoted.pass.cpp 
Fri Mar  7 15:45:32 2014
@@ -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, cha
     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


_______________________________________________
cfe-commits mailing list
cfe-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to