Je suis perplexe. N'est-ce pas const auto ch = unsigned char{'p'};
une expression d'initialisation parfaitement valide? Ne parvient pas à être compilé par les trois principaux compilateurs avec des messages d'erreur presque identiques:
erreur: attendue '(' pour la construction de type ou de fonte de style fonction
Échange d'accolades pour ('p')
ne change rien. Il compile cependant sans le mot clé signed
ou unsigned
.
Parce que seul le nom de type Word unique peut être utilisé pour ce type de conversion de type explicite .
Un nom de type mot unique suivi d'une liste d'initiation contreventée est une valeur du type spécifié
designating a temporary (until C++17)
whose result object is (since C++17)
direct-list-initialisé avec la liste d'initiation contreventée spécifiée.
unsigned char
n'est pas un nom de type Word unique, tandis que char
l'est. Et cela est également vrai pour l'expression fonctionnelle de cast, c'est pourquoi ('p')
ne fonctionne pas non plus.
Pour contourner ce problème, vous pouvez
using uc = unsigned char; // or use typedef
const auto ch = uc{'p'};
Ou changez-le en d'autres styles de distribution.
const auto ch = (unsigned char) 'p'; // c-style cast expression
const auto ch = static_cast<unsigned char>('p'); // static_cast conversion