You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@stdcxx.apache.org by "Martin Sebor (JIRA)" <ji...@apache.org> on 2007/07/09 02:42:04 UTC

[jira] Assigned: (STDCXX-478) std::locale::operator==() inconsistent for locales with the same user-defined facets

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

Martin Sebor reassigned STDCXX-478:
-----------------------------------

    Assignee: Martin Sebor

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