Подробности
[В начало]
Проблема в реализации № S0770
Краткое описание
Поведение basic_string
Подробное описание
Из описания функции basic_string
int compare(size_type pos1, size_type n1, const basic_string
Returns:
basic_string
Как указано в этом же разделе документации, функция
int compare(const basic_string
использует функцию char_traits
Однако результат, возвращаемый функцией __builtin_memcmp() на IA64, зависит не только от значений её аргументов.
Это приводит к тому, например, что в некоторых случаях (см. пример) при вызове compare(pos1, n1, str) возвращается 32, а при вызове basic_string
Раздел стандарта
Linux Standard Base C++ Specification 3.2, Chapter 9. Libraries, 9.1. Interfaces for libstdcxx, который ссылается на ISO/IEC 14882: 2003 Programming languages --C++, section 21.3.6.8
Пример
#include <string>
#include <cstdio>
#define CHAR_T char
#define STR_LEFT "The quick brown foxy"
#define STR_RIGHT "e quick brown Fox"
#define POS_VALUE 2
#define N_VALUE str_src.size() - 3
using namespace std;
int
main(int argc, char* argv[])
{
basic_string<CHAR_T> str_src(STR_LEFT);
basic_string<CHAR_T> str(STR_RIGHT);
size_t pos = POS_VALUE;
size_t n = N_VALUE;
basic_string<CHAR_T> str1(str_src, pos, n);
int ret_mustbe = str1.compare(str);
int ret = str_src.compare(pos, n, str);
printf("The function should have returned %d, it returned %d\n",
ret_mustbe, ret);
return 0;
}
Компонент
libstdc++
Окружение
Архитектуры
IA64
[В начало]