Приведение к (void) - это не неявный флажок, а ЯВНОЕ указание, что результат логического выражения никому не нужен, нужны только побочные эффекты. Так что от мысли "приведение к (void) там к месту" я не откажусь.
А по поводу скобок - что-то я не понял, какие скобки там не нужны.
Наружные - нужны для приведения, а внутренние - так ведь приоритет assignment operator ниже, чем logiacl or и тем более comparsions - поэтому на
ok != status = foo()
в момент получим "invalid lvalue"