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

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;
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

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