Há alguma atualização de suporte de localização em C ++ 0x?
Quanto mais eu trabalho com facetas de localidade C ++, mais eu entendo --- eles estão quebrados.
std::time_get
- não é simétrica comstd::time_put
(como em strftime / strftime) e não permite a fácil análise de tempos com marcas AM / PM.I descoberto Recentemente, essa simples formatação de números pode produzir UTF-8 ilegal sob certas localidades (comoru_RU.UTF-8
).std::ctype
é muito simplista supondo que para cima / para baixo pode ser feito em base por caractere (conversão de caso pode alterar o número de caracteres e é dependente do contexto).std::collate
- não suporta força de agrupamento (sensível a maiúsculas ou insensível).Não há maneira de especificar o fuso horário diferente do fuso horário global na formatação de hora.E muito mais...
Alguém sabe se alguma alteração é esperada em facetas padrão em C ++ 0x?Existe alguma maneira de trazer uma importância de tais mudanças?Obrigado.
EDITAR: Esclarecimentos, caso o link não esteja acessível:
std::numpunct
define o separador de milhares como char. Portanto, quando separador em U + 2002 - tipo diferente de espaço, ele não pode ser reproduzido como um único caractere em UTF-8, mas como uma sequência de múltiplos bytes.
Na API Cstruct lconv
define o separador de milhares como string e não sofre desse problema. Portanto, quando você tenta formatar números com separadores fora do ASCII com o código do idioma UTF-8, o UTF-8 inválido é produzido.
Para reproduzir este bug escreva 1234 para std: ostream com imbuedru_RU.UTF-8
localidade
EDIT2: Devo admitir que a API de localização POSIX C funciona de maneira muito mais suave:
Há inverso de strftime - strptime (strftime faz o mesmo questd::time_put::put
)Não há problemas com formatação de números por causa do ponto que eu mencionei acima.No entanto, ainda é para ser perfecet.
EDIT3: De acordo com as últimas notas sobre C ++ 0x eu posso ver questd::time_get::get
-- igual astrptime
e oposto destd::time_put::put
.