About your last point:
You can get around it by typing
return (a);
I'm not aware of unambiguous situations where the compiler will complain; if you see an error it's usually pebkac!
if (a)
return (some && complicated || boolean && calculation);
else
return (some || other && boolean || calculation);
edit: I suppose you can get rid of the "else", but you shouldn't have to sacrifice readability for a compiler shortcoming. I'm with mdasen; the compiler should figure it out.if (a) { return true; } return false;
if (a) { return true; } is just as redundant as an if (a == true) statement.