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

Martin Sebor resolved STDCXX-478.
---------------------------------

       Resolution: Fixed
    Fix Version/s: 4.2

Resolved. Will close after a regression test has been added to the test suite.

> std::locale::operator==() inconsistent for locales with the same user-defined 
> facets
> ------------------------------------------------------------------------------------
>
>                 Key: STDCXX-478
>                 URL: https://issues.apache.org/jira/browse/STDCXX-478
>             Project: C++ Standard Library
>          Issue Type: Bug
>          Components: 22. Localization
>    Affects Versions: 4.1.3, 4.1.2
>            Reporter: Martin Sebor
>            Assignee: Martin Sebor
>             Fix For: 4.2
>
>
> The program below is intended to take advantage of the stdcxx extension 
> whereby two unnamed locales compare equal when they represent the exact same 
> object (i.e., when all their facets are exactly same). The program passes the 
> first assertion but aborts in the second one:
> $ cat t.cpp && make t && ./t
> #include <cassert>
> #include <cstdio>
> #include <locale>
> struct A: std::num_put<char, char*> { A (): std::num_put<char, char*>(1) { } 
> };
> struct B: std::num_put<char, char*> { B (): std::num_put<char, char*>(1) { } 
> };
> int main ()
> {
>     const std::locale en ("en_US");
>     const A* const a = new A;
>     const B* const b = new B;
>     {
>         const std::locale usr1 (std::locale (en, a), b);
>         const std::locale usr2 (std::locale (en, a), b);
>         std::printf ("\"%s\" == \"%s\"\n",
>                      usr1.name ().c_str (), usr2.name ().c_str ());
>        assert (usr1 == usr2);
>     }
>     {
>         const std::locale usr1 (std::locale (en, a), b);
>         const std::locale usr2 (std::locale (en, b), a);
>         std::printf ("\"%s\" == \"%s\"\n",
>                      usr1.name ().c_str (), usr2.name ().c_str ());
>        assert (usr1 == usr2);
>     }
> }
> icc -c -I/home/sebor/stdcxx/include/ansi -D_RWSTDDEBUG   -D_REENTRANT 
> -I/home/sebor/stdcxx/include -I/build/sebor/stdcxx-icc-10.0.025-15S/include 
> -I/home/sebor/stdcxx/examples/include  -cxxlib-nostd -g   -w1   t.cpp
> icc t.o -o t -cxxlib-nostd  -lpthread  
> -L/build/sebor/stdcxx-icc-10.0.025-15S/lib  -lstd15S -lcxaguard -lsupc++ -lm 
> "*" == "*"
> "*" == "*"
> t: t.cpp:32: int main(): Assertion `usr1 == usr2' failed.
> Aborted

-- 
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