SSCCE:cast di tipo non è riuscito a passare per enum con memoria limitato
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;
}
}
produce errore:
In function ‘int main()’:
error: could not convert ‘yes’ from ‘confirm’ to ‘int’
case confirm::yes:
^
durante la compilazione con g ++ ma compilato bene da clang ++. Perché l'assegnazione contrassegnata da (2) possibile ma causa clausola contrassegnata da (3) no?
Avvertimento in too small storage
è di offtopic
"Questo è un bug di gcc" può essere una risposta sufficiente? (naturalmente con la prova che dovrebbe essere consentito) – Yakk
@Yakk: c'è dubbio – dyomas
@dyp: grazie per il tagging, ma una domanda è specifica solo per 'enum class' -C++ 11; nessun problema di questo tipo negli standard precedenti – dyomas