https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111895
Bug ID: 111895 Summary: error: invalid operands of types 'unsigned char:2' and 'int' to binary 'operator!=' Product: gcc Version: 13.2.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: nabijaczleweli at nabijaczleweli dot xyz Target Milestone: --- Simplified from other code: #include <cstdint> enum class o_field : std::uint8_t { no, yes, different_from_s }; struct fields { o_field o : 2; }; bool func(fields f) { return static_cast<bool>(f.o); } yields main.cpp: In function 'bool func(fields)': main.cpp:8:50: error: invalid operands of types 'unsigned char:2' and 'int' to binary 'operator!=' 8 | bool func(fields f) { return static_cast<bool>(f.o); } | ~~^ Which is nonsensical. Clang accepts this, and does the expected thing. Repros on "g++ (GCC) 13.1.0", "g++ (Debian 12.2.0-14) 12.2.0", and "g++ (Debian 13.2.0-5) 13.2.0".