This is an internal reminder for the issue pointed out by Martin in: c++std-lib-17244 It looks like, we are implementing the current C++ specifications rather well, besides a few issues. See the test: http://people.apache.org/~sebor/width_test.cpp
Can anybody fix this bug? ------- code: ------- #include<iostream> using namespace std; int main() { cout.setf(ios_base::fixed); cout.precision(3); cout.width(20); cout.fill('#'); cout << (double)1.123456789 << endl; cout << (double)0.123456789 << endl; cout << (double)10.123456789 << endl; } --------------------- ------- output: ------- ###############1.123 0.123 10.123 ----------------------- ------- expected: ------- ###############1.123 ###############0.123 ##############10.123 ------------------------- It's just sad... :^(((
The snippet you posted has nothing to do with the issue discussed here, which is about *when exactly* calling width(0) toward the end of the insertion operation (there are minor inconsistencies in the Standard detectable when the insertion proper throws). But in any case, per the letter of both C++03 and C++0x , during the arithmetic insertion at some point width(0) has to be called, normally by the num_put facet in Stage 3. Thus the behavior we are implementing vs your snippet is already Ok, no bug to fix (if you want a practical check, Sun Studio behaves the same).
(In reply to comment #1) > Can anybody fix this bug? Don't be sad, your bug is easy to fix: > ------- code: ------- > #include<iostream> > using namespace std; > > int main() > { > cout.setf(ios_base::fixed); > cout.precision(3); > cout.width(20); > cout.fill('#'); > cout << std::setw(20) << 1.123456789 << endl; cout << std::setw(20) << 0.123456789 << endl; cout << std::setw(20) << 10.123456789 << endl; > } Fixed.
:))OK. ( I merely have looked at 'ios_base state functions' chapter in C++0x draft and not found any mention that any preset state of a stream may be lost after an output operation. It turns out that the width is the (only) state which can be(inconsequently) lost after an output operation. )
Created attachment 56765 [details] Martin's test code Attaching the test code here, in case the link stops working.