Почему GCC предупреждает меня о fallthrough, даже когда я использую [[fallthrough]]?
в следующем фрагменте кода я использую стандартный [[fallthrough]]
атрибут из C++1z для документа, что требуется fallthrough:
#include <iostream>
int main() {
switch (0) {
case 0:
std::cout << "an";
[[fallthrough]]
case 1:
std::cout << "bn";
break;
}
}
С GCC 7.1, код компилируется без ошибок. Тем не менее, компилятор все еще предупреждает меня о fallthrough:
warning: this statement may fall through [-Wimplicit-fallthrough=]
std::cout << "an";
~~~~~~~~~~^~~~~~~~
почему?
1 ответов
после атрибута отсутствует точка с запятой:
case 0:
std::cout << "a\n";
[[fallthrough]];
// ^
case 1:
на [[fallthrough]]
атрибут должен применяться к пустому оператору (см. P0188R1). Текущий лязг ствола дает полезную ошибку в этом случае:
error: fallthrough attribute is only allowed on empty statements
[[fallthrough]]
^
note: did you forget ';'?
[[fallthrough]]
^
;
Обновление: Коди Серый об этом сообщает эта проблема для команды GCC.