Чтобы спровоцировать ошибки компилятора специально для использования языковых функций, которые допустимы только в стандартах C ++ позже, чем выбранный вами, наилучшим вариантом диагностики c является, вероятно, -pedantic-errors
, что задокументировано
-pedanti c -errors
Выдает ошибку, когда базовый стандарт (см. -Wpedanti c) требует диагностики c , в некоторых случаях, когда существует неопределенное поведение во время компиляции, а в некоторых других случаях, которые не мешают компиляции программ, которые действуют в соответствии со стандартом ...
[мой акцент]
«Базовым стандартом» здесь является стандарт C ++, названный указанным значением или значением по умолчанию -std=...
(или если это диалект GNU, такой как gnu++14
, то это стандарт C ++, на котором этот диалект based).
Если вы скомпилируете исходный код, скажем, с std=c++14
, который использует конструкцию, впервые легализованную в C ++ 17, то этот код некорректен согласно стандарту C ++ 14 и диагностике. c quired. Следовательно, добавление -pedantic-errors
к -std=c++14
обязывает компилятор диагностировать инновации C ++ 17 как ошибки.
Например, без -pedantic-errors
$ cat foo.cpp
struct foo
{
inline static const int value = 42;
};
$ g++ -std=c++14 -Wall -Wextra -pedantic -c foo.cpp
foo.cpp:3:5: warning: inline variables are only available with ‘-std=c++17’ or ‘-std=gnu++17’
3 | inline static const int value = 42;
| ^~~~~~
И с -pedantic-errors
$ g++ -std=c++14 -Wall -Wextra -pedantic-errors -c foo.cpp
foo.cpp:3:5: error: inline variables are only available with ‘-std=c++17’ or ‘-std=gnu++17’
3 | inline static const int value = 42;
| ^~~~~~
-pedantic-errors
сделает компилятор более суетливым в отношении соответствия C ++ 14, чем сам по себе std-c++14
или с -Werror
. Но я думаю, вы не будете возражать против этого. И вы можете сделать неограниченный выбор относительно того, будете ли вы практиковать общую дисциплину компиляции с нулевыми предупреждениями (-Werror
)