Странное поведение предупреждения с gcc и сравнения со знаком / без знака

У меня есть следующий код:

unsigned int a;
if (a > numeric_limits<int>::max())
   do_stuff();

При компиляции gcc жалуется на предупреждение

: "сравнение подписанного и неподписанного"

Хорошо, я понимаю

Но со следующим кодом:

unsigned int a;
if (a > (numeric_limits<int>::max()))
   do_stuff();

Предупреждение больше не отображается, и я действительно не знаю, почему ... Есть ли какая-то логическая причина для такого поведение или я что-то не так делаю ?!

8
задан iammilind 22 September 2011 в 08:26
поделиться