Прежде всего unsigned int(width)
- это недопустимый синтаксис.Возможно, есть расширение для компилятора, позволяющего это (я проверил и clang, и gcc, и ни один не разрешил это, даже с gnu++
).Есть способы правильно написать это приведение:
(unsigned int)(width)
unsigned(width)
static_cast<unsigned int>(width)
static_cast<unsigned(width)
Рекомендуется static_cast
s.
Теперь, предполагая, что один из описанных выше способов написания вашего условия ничего не делает.Вы, кстати, witdth
и height
типа unsigned int
, поэтому приведение абсолютно ничего не делает, поэтому сравнение эквивалентно:
width != width
, которое всегда будет ложным.
Итакэто ошибка.
Правильный способ проверить, была ли успешной операция чтения потока:
if (!(image >> img_format >> width >> height >> maxval))
// error
или эквивалент:
image >> img_format >> width >> height >> maxval;
if (!image)
// error