Dans le code suivant, j’utilise la norme [[fallthrough]]
attribuez à C++ 1z de documenter le fait qu’une réduction est souhaitée:
#include <iostream>
int main() {
switch (0) {
case 0:
std::cout << "a\n";
[[fallthrough]]
case 1:
std::cout << "b\n";
break;
}
}
Avec GCC 7.1, le code est compilé sans erreur. Cependant, le compilateur me met toujours en garde contre un échec:
warning: this statement may fall through [-Wimplicit-fallthrough=]
std::cout << "a\n";
~~~~~~~~~~^~~~~~~~
Pourquoi?
Il vous manque un point-virgule après l'attribut:
case 0:
std::cout << "a\n";
[[fallthrough]];
// ^
case 1:
Le [[fallthrough]]
attribut doit être appliqué à une instruction vide (voir P0188R1 ). Le tronc Clang actuel donne une erreur utile dans ce cas :
error: fallthrough attribute is only allowed on empty statements
[[fallthrough]]
^
note: did you forget ';'?
[[fallthrough]]
^
;
Mise à jour: Cody Gray rapporté ce problème à l’équipe de GCC.