Подробности

[В начало]

Проблема в реализации № S0745

Краткое описание

Составленная из именованной и неименованной локали, локаль становится именованной

Подробное описание

Из общего описания класса locale (22.1.1 p8):

A locale constructed from a name string (such as "POSIX"), or from parts of two named locales, has a name; all others do not. Named locales may be compared for equality; an unnamed locale is equal only to (copies of) itself. For an unnamed locale, locale::name() returns the string “*”.


Однако конструктор

locale(const locale& other, const locale& one, locale::category cats)

создает локаль, для которой name() возвращает не "*", в случае, когда
other - именнованная локаль (other.name() возвращает не "*"), а
one - неименованная локаль (one.name() возвращает "*").

Приведенный ниже пример демонстрирует такое поведение функции.

Раздел стандарта

Linux Standard Base C++ Specification 3.2, Chapter 9. Libraries, 9.1. Interfaces for libstdcxx, который ссылается на ISO/IEC 14882: 2003 Programming languages --C++, section 22.1.1

Пример

#include <locale>
#include <iostream>
using namespace std;

int main()
{
    locale other(locale("C"));
    locale one(locale("en_US"), new ctype<char>());
    locale loc(other, one, locale::collate);
    cout << "one.name() is " << one.name() << endl;
    cout << "other.name() is " << other.name() << endl;
    cout << "loc.name() is " << loc.name() << endl;
    return 0;
}

Компонент

libstdc++

Принято

GCC Bugzilla 38365

Статус

Исправлено в gcc-4.4.0

[В начало]