SSCCE:Loại dàn diễn viên thất bại trong chuyển đổi cho enum với dung lượng hạn chế
enum class confirm {yes};
struct item
{
confirm s:4; // (1) limiting storage size required
};
int main()
{
item itm;
itm.s = confirm::yes; // (2) OK
switch (itm.s)
{
case confirm::yes: // (3) Failure, need static data cast here?
break;
}
}
sản xuất lỗi:
In function ‘int main()’:
error: could not convert ‘yes’ from ‘confirm’ to ‘int’
case confirm::yes:
^
khi biên dịch với g ++ nhưng biên soạn tốt bởi kêu vang ++. Tại sao chuyển nhượng được đánh dấu bởi (2) có thể nhưng trường hợp khoản được đánh dấu bằng (3) không?
Cảnh báo về too small storage
là offtopic
"Đây có phải là lỗi gcc" là câu trả lời đầy đủ không? (tự nhiên với bằng chứng rằng nó nên được cho phép) – Yakk
@Yakk: có nghi ngờ – dyomas
@dyp: cảm ơn bạn đã gắn thẻ, nhưng câu hỏi chỉ dành riêng cho 'lớp enum' —C++ 11; không có vấn đề như vậy trong các tiêu chuẩn trước đây – dyomas