Clang C ++ 11 сужение - PullRequest
       0

Clang C ++ 11 сужение

1 голос
/ 10 марта 2020

Если я скомпилировал свой код g cc для clang, я получил ошибку:

non-constant-expression cannot be narrowed from type 'int' to 'BYTE' (aka 'unsigned char') in initializer list [-Wc++11-narrowing]

это в строке:

const BYTE pattern[4] = {0x00, 0x00, m_outTrackFormat == BS_RTF_MODE2_FORM1 ? 0x80 : 0x00, 0x00};

Что здесь изменилось?

1 Ответ

1 голос
/ 10 марта 2020

Инициализация списка сужающие преобразования определяются следующим образом:

Инициализация списка ограничивает допустимые неявные преобразования, запрещая следующее:

...

преобразование из целочисленного или незаданного типа перечисления в целочисленный тип, который не может представлять все значения оригинала, за исключением случаев, когда source является константным выражением, значение которого может храниться точно в целевом типе

И в C ++ нет 8-битных целочисленных литералов . Таким образом, в отличие от других аргументов, поскольку ваш троичный оператор использует непостоянную переменную, у вас есть непостоянный аргумент int, который необходимо преобразовать в BYTE, таким образом, ошибка компиляции.

как я мог воспроизвести его как в Clang и G cc.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...