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 */
/* 15 */
Assertion failed: Traits::compare (s + 0, s + 1, 1) > 0, file t.cpp, line 13
Abort (core dumped)