incubator-stdcxx-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Martin Sebor (JIRA)" <j...@apache.org>
Subject [jira] Updated: (STDCXX-214) [LWG #467] std::char_traits<char>::compare() broken for negative characters
Date Thu, 01 Mar 2007 20:13:50 GMT

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

Martin Sebor updated STDCXX-214:
--------------------------------

    Summary: [LWG #467] std::char_traits<char>::compare() broken for negative characters
 (was: std::char_traits<char>::compare() broken for negative characters)

This problem is the subject of Library Working Group issue 467:
http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#467

> [LWG #467] std::char_traits<char>::compare() broken for negative characters
> ---------------------------------------------------------------------------
>
>                 Key: STDCXX-214
>                 URL: https://issues.apache.org/jira/browse/STDCXX-214
>             Project: C++ Standard Library
>          Issue Type: Bug
>          Components: 21. Strings
>    Affects Versions: 4.1.3, 4.1.2
>         Environment: all
>            Reporter: Martin Sebor
>         Assigned To: Martin Sebor
>
> Moved from the Rogue Wave bug tracking database:
> ****Created By: sebor @ May 03, 2004 03:04:54 PM****
> According to Table 37 in [lib.char.traits.require]:
> X::compare(p,q,n) yields: 0 if for each i in [0,n), X::eq(p[i],q[i]) is true; else, a
negative value if, for some j in [0,n), X::lt(p[j],q[j]) is true and for each i in [0,j) X::eq(p[i],q[i])
is true; else a positive value.
> The following fails with gcc 3.4 on SunOS 5.7 because char_traits<char>::compare()
uses memcmp() which, on this platform, compares characters as if they were unsigned.
> $ cat t.cpp && ./t
> /*   1 */ #include <cassert>
> /*   2 */ #include <string>
> /*   3 */ 
> /*   4 */ int main ()
> /*   5 */ {
> /*   6 */     typedef std::char_traits<char> Traits;
> /*   7 */ 
> /*   8 */     const char s[] = "\0\377";
> /*   9 */ 
> /*  10 */     if (Traits::lt (s [0], s [1]))
> /*  11 */         assert (Traits::compare (s + 0, s + 1, 1) < 0);
> /*  12 */     else
> /*  13 */         assert (Traits::compare (s + 0, s + 1, 1) > 0);
> /*  14 */ }
> /*  15 */ 
> Assertion failed: Traits::compare (s + 0, s + 1, 1) > 0, file t.cpp, line 13
> Abort (core dumped)

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


Mime
View raw message