Почему GCC предупреждает меня о провале, даже когда я использую [[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, код компилируется без ошибок. Однако компилятор все равно предупреждает меня о провале:
warning: this statement may fall through [-Wimplicit-fallthrough=]
std::cout << "an";
~~~~~~~~~~^~~~~~~~
почему?
1 ответ:
после атрибута отсутствует точка с запятой:
case 0: std::cout << "a\n"; [[fallthrough]]; // ^ case 1:The
[[fallthrough]]атрибут должен быть применен к пустому оператору (см. P0188R1). Текущий лязг ствола дает полезную ошибку в этом случае:error: fallthrough attribute is only allowed on empty statements [[fallthrough]] ^ note: did you forget ';'? [[fallthrough]] ^ ;Обновление: Коди Серый об этом сообщает этот вопрос к команде GCC.
Comments