Но столкнулся с такой проблемой: если первая функция возвращает true, то вторая функция даже не выполняется. Если поменять or на and, то ситуация повторяется, но наоборот: если первая возвращает false, то вторая не выполняется.
Поздравляю, ты открыл для себя детали работы операторов || и && в С и С++.
как-то обойти?
bool f1 = func(1);
bool f2 = func(2);
if (f1 || f2)
Можно схитрить и использовать побитовое или вместо логического, но, как минимум, это заслуживает комментария, зачем так сделано:
while (func(1) | func(2))