В С++ вам разрешено иметь пустое условие внутри цикла for, например, как в for (;;) или for (int x = 0;; ++x). Но вы не можете сделать while ().
Когда условие отсутствует в цикле for, условие считается true (поэтому петли цикла навсегда). Почему это не так с циклами while, то есть, что аргумент, не позволяющий while () быть псевдонимом while (true)?