C++에서 true의 보수는 true다 — 단, gcc에서는 false

The complement of true is true, except when it's false

C++에서 true의 보수는 true다 — 단, gcc에서는 false

P4313R1은 C++26 어노테이션으로 enum에 비트마스크 연산을 추가하는 제안이다. 이를 계기로 C++ 정수 연산의 복잡한 이면을 살펴본다. bool은 정수 승격과 불리언 변환을 거치면서 ~true가 true가 되는 기이한 결과를 낳는다. gcc는 enum 기반 bool 타입에서 표준과 다르게 동작하는 오래된 버그를 가지고 있으며, 스코프 없는 enum의 비트 연산은 정의되지 않은 동작(UB)을 유발할 수 있다.

true의 보수는 true다. C++로 쓰면 static_cast<bool>(~true) == true이다.

이 날의 다른 글

2026-10-06