язык конструктора фасетов игнорируется

locale Facet конструктор:

Создает копию другого объекта, кроме фасета типа Facet (обычно выводимого из типа аргумента), который устанавливается из фасета аргумента. Если фасет равен NULL, созданный языковой стандарт является полной копией другого. Локаль, построенная таким образом, не имеет названия.

Я пытаюсь построить, используя мойFacet Вот, но когда я ставлю точку останова в моемdo_decimal_point а такжеdo_thousands_sep они никогда не называются :(

Я могу видетьFacet передается, но передается в файлы реализации стандартной библиотеки, поэтому я не вижу, было ли что-нибудь сделано с этим.

Я пробовал это на Visual Studio 2013, Clang 3.6.0 и gcc 4.9.2.Все из них ведут себя так, как будто я никогда не проходил вFacet просто используя другойlocaleПоведение

Я не могу найти никаких ошибок в этом конструкторе ни в одном из компиляторов. Я думаю, что делаю все правильно. Почему я не могу получитьlocale построить с использованием моегоFacet?

РЕДАКТИРОВАТЬ:

Взапрос 0x499602D2 Я добавил пример. Интересно отметить, чтоFacet делает кажется, подобраны, ноне используется сget_money, Я связываюживой пример этого (который обязательно используетlocale("C") вместоlocale("en-US")):

class Foo : public std::moneypunct<char> {
protected:
    char_type do_decimal_point() const {
        cout << "Hit Foo::do_decimal_point";
        return ',';
    }
    char_type do_thousands_sep() const {
        cout << "Hit Foo::do_thousands_sep";
        return '.';
    }
};

int main()
{
    cout.imbue(locale(locale("en-US"), new Foo));

    const moneypunct<char>* temp = &use_facet<std::moneypunct<char>>(cout.getloc());

    cout << temp->decimal_point() << endl << temp->thousands_sep() << endl;

    istringstream USCurrency("1,234.56 -1,234.56 1.234,56 -1.234,56");
    USCurrency.imbue(cout.getloc());

    long double value;

    USCurrency >> get_money(value, true);

    return 0;
}

Это выводит:

Нажмите Foo :: do_thousands_sepHit Foo :: do_decimal_point,
.

Я ожидал бы, что это выведет:

Нажмите Foo :: do_thousands_sepHit Foo :: do_decimal_point,
.
Хит Foo :: do_thousands_sepHit Foo :: do_decimal_point

EDIT2:

Похоже, чтоmoneypunct<char> не может быть унаследовано, так как не создается должным образом, если оно не создано внутреннеlocale, Что по крайней мере на Visual Studio является проблемой, потому что он определяет, следует ли использоватьthousands_sep посредствомgrouping, Обойти это может быть полностью переопределитьmoneypunct<char>функциональность. Сейчас я возиться с этим. Тем временем я также добавил ошибку здесь:https://connect.microsoft.com/VisualStudio/feedback/details/1524749/inheriting-from-moneypunct-requires-use-of-unavailable-construction-information

Ответы на вопрос(1)

Ваш ответ на вопрос