Почему 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";
~~~~~~~~~~^~~~~~~~


почему?

639   1  

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

    Ничего не найдено.