C++ 海合会及;Cmake:不要使用更新的功能

C++ 海合会及;Cmake:不要使用更新的功能,c++,gcc,cmake,c++14,C++,Gcc,Cmake,C++14,我正在尝试用GCC和CMake编译一些代码。在CMakeLists.txt文件中,我将如下设置目标属性: set_target_properties(${example_name} PROPERTIES CXX_STANDARD 14 CXX_STANDARD_REQUIRED YES CXX_EXTENSIONS NO ) 我想知道如何强制Cmake/Gcc只使用C++14中提供的功能,而不使用更新的功能。我想要一个编译时错误(

我正在尝试用GCC和CMake编译一些代码。在CMakeLists.txt文件中,我将如下设置目标属性:

set_target_properties(${example_name} PROPERTIES
        CXX_STANDARD 14
        CXX_STANDARD_REQUIRED YES
        CXX_EXTENSIONS NO
        )
我想知道如何强制Cmake/Gcc只使用C++14中提供的功能,而不使用更新的功能。我想要一个编译时错误(不是警告)。我希望这样做的原因是,我最终需要将此代码移植到另一个系统,该系统使用一个只支持C++14的编译器

为了测试以上内容,我添加了一些明显的C++17特性:

namespace bob::hope {
void bar() {
  if constexpr (true) {
    return;
  }
}
}
但它没有给我一个错误,只是发出了一个警告。具体来说,如果我打开一些警告:

add_compile_options(-Wall -Wextra -Wpedantic)
然后我得到

warning: nested namespace definitions only available with -std=c++1z or -std=gnu++1z [-Wpedantic]
warning: ‘if constexpr’ only available with -std=c++1z or -std=gnu++1z
但代码在其他方面编译时不会出错


那么,我如何配置Cmake以禁止使用较新的语言功能呢?

关于
-迂腐的错误
?你已经试过这个了吗?哦我从来没有听说过。让我试试。我不这么认为,因为这里的问题是关于学究式错误的。那么
-学究式错误
呢?你已经试过这个了吗?哦我从来没有听说过。让我试试。我不这么认为,因为这里的问题是关于学究式错误的。