Подробности
[В начало]
Проблема в реализации № 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
[В начало]