Я хочу скомпилировать следующий файл (temp.cpp):
#include <iostream>
class Foo {
public:
Foo() = default;
};
int main(){
std::cout << "Works!" << std::endl;
return 0;
}
С помощью следующей команды: clang++ temp.cpp -o temp -std=c++11 -Weverything -Werror
Есть ошибка:
temp.cpp: 5: 11: ошибка: определения функций по умолчанию несовместимы с C ++ 98 [-Werror, -Wc ++ 98-compat]
Я понимаю, что есть предупреждение типа c ++ 98-compat, и оно является частью всего. Как включить все предупреждения, кроме c ++ 98-compat? Есть ли совместимый c ++ 11 флаг для -Weverything?
На самом деле, вам, вероятно, не нужны все предупреждения, потому что ряд предупреждений можно рассматривать как стилистические или субъективные, а другие (например, такие, с которыми вы столкнулись) просто глупы в вашей ситуации.
-Weverything
изначально был построен по двум причинам:
-Weverything
ты выбираешь те, кого не хочешь применять; Преимущество заключается в том, что при переходе на новую версию компилятора вы, скорее всего, получите выгоду от новых предупреждений.Очевидно, что открытие не совсем совместимо с производственным использованием; поэтому вы, кажется, попали в черный список дело.
Система диагностики Clang выведет (по умолчанию) имя наиболее определенной группы предупреждений, которая отвечает за создание предупреждения (здесь -Wc++98-compat
) и каждую группу предупреждений можно отключить, добавив no-
сразу после -W
,
Следовательно, для внесения в черный список вы получаете:
-Weverything -Wno-c++98-compat -Wno-...
И вам рекомендуется время от времени пересматривать список включенных в черный список предупреждений (например, при обновлении до более нового компилятора).
Других решений пока нет …