I think some compilers give a warning on while(foo = read()) but not on while((foo = read())).
That would be a broken compiler.
No, I'm pretty sure that's intentional specifically to permit that idiom.
It's usually a warning that you have to turn on explicitly, or one that you can at least turn off (thank heavens).
It's not the choice of keyword that (should) trigger the warning. It's the simple fact that an expression that evaluates to boolean contains an '='. This potential error is trivial for any compiler to flag.