referrenced in e-mail thread:
http://mail-archives.apache.org/mod_mbox/incubator-stdcxx-dev/200706.mbox/ajax/%3c46801DBC.90909@roguewave.com%3e
But the test program does demonstrate a real problem, and that is the formatting of infinity when the stream precision is greater than 7. It looks as though the num_put facet inserts the string "inf\0\0ity" into the stream rather than "inf".
$ cat u.cpp && make u && ./u | od -c
#include <cassert>
#include <iostream>
#include <sstream>
int main () {
std::ostringstream s;
s.precision (8);
s << 1 / 0.0;
std::cout << s.str () << '\n';
assert (s.str () == "inf");
}
gcc -c -I/build/sebor/stdcxx/include/ansi -D_RWSTDDEBUG -D_RWSTD_USE_CONFIG -I/build/sebor/stdcxx/include -I/build/sebor/stdcxx-gcc-4.1.0-11s/include
-I/build/sebor/stdcxx/examples/include -pedantic -nostdinc++ -g -W
-Wall -Wcast-qual -Winline -Wshadow -Wwrite-strings -Wno-long-long u.cpp
u.cpp: In function 'int main()':
u.cpp:8: warning: division by zero in '1 / 0.'
gcc u.o -o u -L/build/sebor/stdcxx-gcc-4.1.0-11s/lib -lstd11s -lsupc++ -lm Assertion failed: s.str () == "inf", file u.cpp, line 10
0000000 i n f \0 \0 i t y \n
0000011
$ cat t.cpp && gmake t && ./t
#include <cassert>
#include <sstream>
int main () {
std::ostringstream s;
s.precision (8);
const std::num_put<char> &np =
std::use_facet<std::num_put<char> >(s.getloc ());
np.put (std::ostreambuf_iterator<char>(s), s, ' ', 1 / 0.0);
assert (s.str () == "inf");
}
CC -c -D_RWSTDDEBUG -mt -I/amd/devco/sebor/stdcxx/include -I/build/sebor/stdcxx-sunpro-5.8_j8-15D/include -I/amd/devco/sebor/stdcxx/examples/include -library=%none -g -xarch=v9 +w t.cpp
"/amd/devco/sebor/stdcxx/include/sstream", line 380: Warning: std::ostringstream::rdbuf hides the function std::ios::rdbuf(std::streambuf *).
"t.cpp", line 5: Where: While specializing "std::ostringstream ".
"t.cpp", line 5: Where: Specialized in non-template code.
1 Warning(s) detected.
CC t.o -o t -library=%none -mt -xarch=v9 -L/build/sebor/stdcxx-sunpro-5.8_j8-15D/lib -R/build/sebor/stdcxx-sunpro-5.8_j8-15D/lib -lstd15D -lm
Assertion failed: s.str () == "inf", file t.cpp, line 13
Abort (core dumped)