Вопрос в основном для удовольствия/любопытства: как написать цикл for в С++, который будет перебирать два значения a bool (т.е. true и false), используя только операции с bool (т.е. без преобразования в другие типы)?
Фон состоит в том, что я хотел проверить, сколько решений существует для уравнения типа (A && B) || (!B && !C && !D) == true, и начал писать что-то вроде for (bool A=false; ??? ; ++A) for (bool B=false; ...) и т.д., но сразу же застрял в ??? - то есть, что было бы условием продолжения петля? Конечно, я переписал его для использования int, и я также знаю, что цикл do ... while будет работать, но мне стало любопытно, можно ли написать такой цикл for? И поскольку SO, похоже, не имеет ответа, я решил спросить:)
Обновление: обратите внимание, что "очевидный" вариант for(bool A=false; !A; A=true), предложенный, по крайней мере, в двух теперь удаленных ответах, будет запускать только одну итерацию, потому что для второго условие !A становится false, и цикл завершается.
После некоторого размышления я считаю невозможным сделать это в С++ 03 без второй переменной или конструкцией, основанной на указателях, как предложено Dietmar Kühl. Условие должно быть проверено три раза в желаемом исполнении, поэтому двух значений bool просто недостаточно. И цикл do-while работает, потому что первая итерация выполняется безоговорочно, условие проверяется только дважды, поэтому значение bool можно использовать для выбора между продолжением и выходом.