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