En el siguiente fragmento de código, utilizo el [[fallthrough]]
atributo estándar de C ++ 1z para documentar que se desea una falla:
#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 una falla:
warning: this statement may fall through [-Wimplicit-fallthrough=]
std::cout << "a\n";
~~~~~~~~~~^~~~~~~~
¿Por qué?
c++
switch-statement
c++17
fall-through
s3rvac
fuente
fuente
Respuestas:
Falta un punto y coma después del atributo:
case 0: std::cout << "a\n"; [[fallthrough]]; // ^ case 1:
El
[[fallthrough]]
atributo se aplicará a una declaración vacía (consulte P0188R1 ). El tronco de Clang actual 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 informó este problema al equipo de GCC.
fuente
fallthrough attribute is only allowed on empty statements
; ya que no va seguida de una declaración vacía, gcc simplemente la ignoraclang
solucionó.