[Bug c++/87292] Warnings with Bit Fields
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87292 --- Comment #4 from Nuno Gonçalves --- I found that the issue with enum have been extensively debated at #61414. Sorry. So actually this bug report is only regarding the warning with initializer list: struct{ uint8_t c1:6; uint8_t c2:6; } a; auto c = {a.c1, a.c2}; //warning: narrowing conversion of '(unsigned char)c1' from 'unsigned char' to 'unsigned char:6' [-Wnarrowing]
[Bug c++/87292] Warnings with Bit Fields
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87292 --- Comment #3 from Nuno Gonçalves --- Also to add, this could be suppressed if enum class Bool : bool{False=0, True=1}; So a better example is for a 2 bit BitField: enum class Nr : uint8_t{Zero=0, One=1, Two=2, Three=3}; struct{ Nr v:2; } b;
[Bug c++/87292] Warnings with Bit Fields
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87292 --- Comment #2 from Nuno Gonçalves --- Not the case since, same warning if: enum class Bool : uint8_t {False=0, True=1}
[Bug c++/87292] New: Warnings with Bit Fields
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87292 Bug ID: 87292 Summary: Warnings with Bit Fields Product: gcc Version: 8.2.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: nunojpg at gmail dot com Target Milestone: --- #include #include int main() { struct{ uint8_t c1:6; uint8_t c2:6; } a; auto c = {a.c1, a.c2}; //warning: narrowing conversion of '(unsigned char)c1' from 'unsigned char' to 'unsigned char:6' [-Wnarrowing] enum class Bool{False=0, True=1}; struct{ Bool v:1; //warning: 'v' is too small to hold all values of 'enum class main()::Bool' } b; return 0; } I get this 2 warnings with g++, including trunk, but not with clang++. I believe the first case is a bug, c1 is promoted to uint8_t and then is truncated back to uint8_t:6. The second case I am not sure if the warning is reasonable. For example clang++ will also not warn if the enum class have values defined that do not fit, and instead will only warn if it detects a assignment that causes truncation.