c++ - program - ¿Por qué GCC me advierte sobre una falla incluso cuando uso[[fallthrough]]?
switch case c++ menu (1)
En el siguiente fragmento de código, utilizo el atributo estándar
[[fallthrough]]
de C ++ 1z para documentar que se desea un fallthrough:
#include <iostream>
int main() {
switch (0) {
case 0:
std::cout << "a/n";
[[fallthrough]]
case 1:
std::cout << "b/n";
break;
}
}
Con GCC 7.1, el código se compila sin errores. Sin embargo, el compilador todavía me advierte sobre un error:
warning: this statement may fall through [-Wimplicit-fallthrough=]
std::cout << "a/n";
~~~~~~~~~~^~~~~~~~
¿Por qué?
Le falta un punto y coma después del atributo:
case 0:
std::cout << "a/n";
[[fallthrough]];
// ^
case 1:
El atributo
[[fallthrough]]
se aplicará a una declaración vacía (consulte
P0188R1
).
El tronco actual de Clang
da un error útil en este caso
:
error: fallthrough attribute is only allowed on empty statements
[[fallthrough]]
^
note: did you forget '';''?
[[fallthrough]]
^
;
Actualización: Cody Gray reported este problema al equipo de GCC.