switch program examples ejercicios code blocks c++ switch-statement c++17 fall-through

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.