Определяет ли спецификация С++:
- существование оператора "меньше" для булевых параметров, и если да,
- результат 4-позиционных перестановок?
Другими словами, являются ли результаты следующих операций, определенных спецификацией?
false < false
false < true
true < false
true < true
В моей настройке (Centos 7, gcc 4.8.2) код ниже выплевывает то, что я ожидаю (учитывая, что C-история представляет false как 0 и true как 1):
false < false = false
false < true = true
true < false = false
true < true = false
В то время как я уверен, что большинство (все?) компиляторы будут давать одинаковый результат, это законодательно закреплено спецификацией С++? Или является запутывающим, но компилятор, совместимый с спецификациями, позволил решить, что true меньше false?
#include <iostream>
const char * s(bool a)
{
return (a ? "true" : "false");
}
void test(bool a, bool b)
{
std::cout << s(a) << " < " << s(b) << " = " << s(a < b) << std::endl;
}
int main(int argc, char* argv[])
{
test(false, false);
test(false, true);
test(true, false);
test(true, true);
return 0;
}