[ 
https://issues.apache.org/jira/browse/STDCXX-2?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Farid Zaripov resolved STDCXX-2.
--------------------------------

    Resolution: Won't Fix

The problem in the MSVC CRT. 

The expression strm << 0.0; is invokes the __rw_put_num() function, where used 
the CRT function snprintf() (num_put.cpp, line 752):

snprintf (buf, size, "%#.2lg", 0.0);

The result of the snprintf() call above is: "0.00".

Info from MSDN:
-----------------------------
Flag '#' means: When used with the g or G format, the # flag forces the output 
value to contain a decimal point in all cases and prevents the truncation of 
trailing zeros.

The precision (".2") means: The precision specifies the maximum number of 
significant digits printed.
-----------------------------

The prefix 'l' before type character 'g' here should point to the long double 
type, but passed double number (0.0). Anyway this is not causes any problem 
because of the types double and long double have the same internal 
representation on the MSVC.


> [MSVC] std::num_put bad formatting of 0.0 with precision and showpoint
> ----------------------------------------------------------------------
>
>                 Key: STDCXX-2
>                 URL: https://issues.apache.org/jira/browse/STDCXX-2
>             Project: C++ Standard Library
>          Issue Type: Bug
>          Components: 22. Localization
>    Affects Versions: 4.1.2
>         Environment: Windows/MSVC
>            Reporter: Martin Sebor
>            Assignee: Farid Zaripov
>
> When compiled with MSVC (any version), the program below aborts at runtime.
> $ cat t.cpp && cl  -D_RWCONFIG=11s_msvc_7_1 
> -Ic:/contrib/cygwin/build/sebor/dev-hal/include -I./../../../../include 
> -Ic:/contrib/cygwin/build/sebor/dev-hal/examples/stdlib/manual/../include  
> -Ic:/contrib/cygwin/build/sebor/dev-hal/include/ansi -I./../../../..
> -Ic:/contrib/cygwin/build/sebor/dev-hal 
> -Ic:/contrib/cygwin/build/sebor/dev-hal/examples/stdlib/manual -I. -nologo 
> -GX -MLd -W3 -Zi -GA -GR -GF -GZ  -c t.cpp && link  -nologo 
> /NODEFAULTLIB:libcpd /debug /LIBPATH:./../../../../lib /OUT:t.exe t.obj  
> std11s_msvc_7_1.lib user32.lib t.cpp && ./t.exe
> #include <cassert>
> #include <sstream>
> int main ()
> {
>     std::ostringstream strm;
>     strm.setf (strm.showpoint);
>     strm.precision (2);
>     strm << 0.0;
>     assert ("0.0" == strm.str ());
> }
> Assertion failed: "0.0" == strm.str (), file t.cpp, line 13

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to