Salut,
Pour une fois, j'ouvre une discussion, car je me pose réellement une question...
Avant la nouvelle norme, std::exception ne fonctionnait qu'avec des char "8 bits".
La nouvelle norme a décidé d'ajouter des traits pour les char "16 bits" et pour les char "32 bits", afin d'améliorer le support des différentes formes d'UTF.
Si bien que l'on peut "assez facilement" prévoir son code pour qu'il s'adapte aux différentes tailles de caractères avec un code plus ou moins proche de
Je n'ai parcouru la nouvelle norme qu'en diagonale, mais je n'ai rien vu quant à un éventuel support de l'UTF en ce qui concerne les exceptions
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 #include <string> #include <iosfwd> #if defined(USE_UTF32) #define LITTERAL(X) U("##x##") typedef char32_t CHAR_T; #elif defined(USE_UTF16) #define LITTERAL(X) u("##x##") typedef char16_t CHAR_T; #else #define USE_UTF8 #endif #if defined(USE_UTF8) #define LITTERAL(X) u8("##x##") typedef char CHAR_T; #endif typedef std::basic_string<CHAR_T> string; typedef std::basic_istringstream<CHAR_T> istringstream; typedef std::basic_ostringstream<CHAR_T> ostringstream; typedef std::basic_stringstream<CHAR_T> stringstream;
Le probème, si une exception doit etre lancée, c'est qu'il faudra reconvertir la chaine de caractères en std::string, pour, sans doute, la reconvertir en std::basic_string<CHAR_T> afin de pouvoir afficher le message d'erreur
Ma question est donc : ai-je vraiment mal cherché, ou est ce que les exceptions restent effectivement exclusivement prévues pour fonctionner avec des char 8 bits
Dans la deuxième hypothèse, est-ce que quelqu'un sait quelle a été la motivation du comité pour ne pas les élagir au suport de l'UTF
Partager