Здравствуйте, kov_serg, Вы писали:
_>_>bool test() { bool x; return x||!x; } // UB
_>
Вменяемый компилятор, в режиме высокого уровня предупреждений, непременно на такое выругается. Ну а кто компилит с W3, тот ССЗБ.
А вот в отношении переменных-
членов компилятор уже не так строг, поэтому в функциях-членах весьма пользительно иметь что-нибудь вроде Assert (static_cast <int> (x) <= 1). Заодно помогает ловить и просто порчу памяти.