This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: std::quoted doesn't respect padding


On 06/05/2014 11:48 AM, Jonathan Wakely wrote:
On 05/06/14 11:43 -0400, Ed Smith-Rowland wrote:
On 04/01/2014 07:33 AM, Jonathan Wakely wrote:
[CCing gcc-patches]

On 11/03/14 11:18 -0400, Ed Smith-Rowland wrote:
On 02/14/2014 07:56 PM, Jonathan Wakely wrote:
We need to implement this fix (probably after 4.9 is released though)

http://cplusplus.github.io/LWG/lwg-active.html#2344

Here is a patch (Stage 1 obviously).

A couple of things I didn't notice earlier ...

Index: include/std/iomanip
===================================================================
--- include/std/iomanip    (revision 208430)
+++ include/std/iomanip    (working copy)
@@ -41,6 +41,7 @@

#if __cplusplus >= 201103L
#include <locale>
+#include <sstream> // used in quoted.

We really only need <sstream> for __cplusplus > 201103L, otherwise we
include it unnecessarily for C++11.


-    return __os;
+    return __os << __ostr.str();
     }

It should be slightly more efficient to do __os << __ostr.rdbuf() here,
and in the other operator<< overload, since that copies directly from
the stringbuf to __os's own streambuf, rather than creating a
temporary std::string and copying from that.


Sorry for the hiatus...

Here is a new patch with issues fixed.

OK if it passes testing on x86_64-linux?

Great, OK for trunk and 4.9 too, I think.

Thanks!



The rdbuf version fails.
The compare asserts fail and

  //  Should be: ["AB \"CD\" EF"xxxxxx]
  //  Gives    : ["AB \"CD\" EF"xxxxxx]
std::cout << "[" << std::left << std::setfill('x') << std::setw(20) << R"("AB \"CD\" EF")" << "]" << std::endl;
  //  Should be: ["GH \"IJ\" KL"yyyyyy]
  //  Gives    : ["yyyyyyyyyyyyyyyyyyyGH \"IJ\" KL"]
std::cout << "[" << std::left << std::setfill('y') << std::setw(20) << std::quoted(R"(GH "IJ" KL)") << "]" << std::endl;

This prints
["AB \"CD\" EF"xxxxxx]
[

No newline on the second line - just the '['.
I'll look at rdbuf. Error in rdbuf? Do I need to do something?

Failing that we know str() works even though it is inefficient.

Ed


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]