c++标准每天都在进化,以至于老旧的c++和新的c++可能是不同的语言。为了不至于被历史的车轮抛弃太远,这里简单介绍一下,用CMake编译C++17文件的写法:

if ( CMAKE_SYSTEM_NAME MATCHES "Windows" )
set( my_std_pre "/std:" )
else()
set( my_std_pre "-std=" )
endif()
set( basic_cxx17 "c++17" )
set( str_cxx17 "${my_std_pre}${basic_cxx17}" )
include( CheckCXXCompilerFlag )
check_cxx_compiler_flag( "${str_cxx17}" _cpp_17_flag_supported )
if ( _cpp_17_flag_supported )
set( CMAKE_CXX_STANDARD 17 )
endif()
上述代码在vs2019和gcc9.3.0测试通过。
在vs2019下,不这么做的后果是:


正确的编译结果是:

运行如下:

在gcc9.3.0下,错误的编译结果为:

正确的编译结果为:

运行结果为:
