Использование атрибута [[deprecated]], когда предупреждения являются ошибками (-Werror) - PullRequest
0 голосов
/ 14 сентября 2018

Я перехожу на C ++ 14 и стремлюсь принять его [[deprecated]] функциональность, например.

#include <string>
#include <iostream>

[[deprecated]]
int f() { return 42; }

int main()
{
  std::cout << f() << std::endl;
}

скомпилировано с

g++ example.cpp -std=c++14 -Werror

и проблема в том, что устаревшее предупреждение преобразуется (понижается?) В ошибку, и сборка завершается неудачно.

Очевидно, что использование #pragma, чтобы заставить замолчать предупреждение, полностью уничтожает точку. Есть ли способ заставить g ++ выдавать предупреждения, но исключать конкретные из них как ошибки?

Ответы [ 2 ]

0 голосов
/ 14 сентября 2018

Вам нужно добавить

-Wno-error=deprecated-declarations

, чтобы gcc оставил deprecated-declarations в качестве предупреждения вместо того, чтобы выдавать ошибку.

Вы можете добавить дополнительные

-Wno-error=name_of_wanring

если у вас есть дополнительные предупреждения о том, что вы также не хотите, чтобы их считали ошибками.

0 голосов
/ 14 сентября 2018

С помощью GCC (а также Clang) вы можете отключить ошибки для определенных предупреждений.

Использование -Wno-error=, за которым следует имя предупреждения (отображается вместе с предупреждением или ошибкой), приведет к отключению ошибки для этого конкретного элемента.

Для вашего случая с [[deprecated]] используйте опцию -Wno-error=deprecated-declaration, и они снова станут предупреждениями, а не ошибками.

...