libc ++ vs VC ++: можно ли с помощью wstring_convert выполнять преобразования без UTF?

C ++ 11 std :: wstring_convert отлично работает * для стандартного UTF- 8 Преобразования UTF-16 / UCS2 / UCS4. Однако, когда я попытался создать экземпляр wstring_convert или wbuffer_convert с фасетом не из , это не сработало, как ожидалось:

// works as expected
std::wstring_convert> ucs4conv;

// Now, by analogy, I want to try this:
std::wstring_convert> gbconv(
        new std::codecvt_byname("zh_CN.gb18030"));

Clang ++ выдает ошибку, говоря «вызов защищенного деструктора codecvt . in ~ wstring_convert "

Visual Studio позволяет это (хотя в нем отсутствует этот языковой стандарт, но это уже другая история), потому что его wstring_convert закладывает управление временем жизни указателя фасета на объект языкового стандарта, который он держит в качестве члена, а языковые стандарты знают, как удалить указатели на все фасеты.

Является ли Visual Studio правильной, а libc ++ неправильной?

* как реализовано в clang ++ - 2.9 / libc ++ - svn и Visual Studio 2010 EE SP1, следующий пример работает на обоих, но не в GCC, к сожалению: https://ideone.com/hywz6

8
задан R. Martinho Fernandes 30 September 2011 в 00:47
поделиться