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] Created: (STDCXX-214) std::char_traits<char>::compare() broken for negative characters
Date Wed, 28 Jun 2006 17:55:29 GMT
std::char_traits<char>::compare() broken for negative characters
----------------------------------------------------------------

         Key: STDCXX-214
         URL: http://issues.apache.org/jira/browse/STDCXX-214
     Project: C++ Standard Library
        Type: Bug

  Components: 21. Strings  
    Versions: 4.1.2, 4.1.3    
 Environment: all
    Reporter: 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.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


Mime
View raw message