Ответ 1
Вам не хватает точки с запятой после атрибута:
case 0:
std::cout << "a\n";
[[fallthrough]];
// ^
case 1:
Атрибут [[fallthrough]]
должен применяться к пустой инструкции (см. P0188R1). Текущая ствол Clang дает полезную ошибку в этом случае:
error: fallthrough attribute is only allowed on empty statements
[[fallthrough]]
^
note: did you forget ';'?
[[fallthrough]]
^
;
Обновление: Cody Gray сообщил эту проблему команде GCC.