Недавно задался целью найти способ заставить GCC генерировать предупреждение о fallthrough в switch. Целевая версия GCC =5.2 -std=c++14.
Судя по всему, аттрибут [[fallthrough]] войдет в C++17. Однако нашлась страничка о неком __attribute__((fallthrough))
: https://gcc.gnu.org/onlinedocs/gcc/Statement-Attributes.html с упоминанием флага -Wimplicit-fallthrough
.
После беглой проверки на melpon.org/wandbox на разных версиях GCC оказалось, что флаг поддерживается только в GCC 7 (который еще не вышел). Ну и стало ясно, что для GCC 5.2 такого ворнинга нет.
Далее я накопал еще обсуждение #7652 на багзилле о, собственно, имплеиентации -Wimplicit-fallthrough
. Но пока читал коментарии «пальцем в небо» попробовал вот такой код:
int a;
switch (2) {
case 2:
a = 2;
[[gcc::fallthrough]]
default:
a = 1;
}
Так вот, вопрос: почему оно компилируется? Не баг ли?