Поскольку для этого вида можно использовать только имя типа из одного слова явное преобразование типа .
Имя типа из одного слова, за которым следует фигурный список инициализацииявляется значением указанного типа designating a temporary (until C++17)
whose result object is (since C++17)
, инициализируемым прямым списком с указанным списком фигурных скобок.
unsigned char
не является именем типа, состоящим из одного слова, тогда как char
есть.И это также верно для функционального выражения приведения, поэтому ('p')
тоже не работает.
В качестве временного решения вы можете
using uc = unsigned char; // or use typedef
const auto ch = uc{'p'};
или изменить его на другие стили приведения.
const auto ch = (unsigned char) 'p'; // c-style cast expression
const auto ch = static_cast<unsigned char>('p'); // static_cast conversion