You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows+VS2019+CMake+CLion+Conan环境如何启用C++20修复Abseil编译报错

核心问题原因

你遇到的是MSVC编译器的默认行为问题:MSVC出于旧代码兼容考虑,默认不会更新__cplusplus宏的取值,即使你已经通过CMake开启了C20标准,该宏的默认返回值仍然是199711L,无法触发Abseil代码中__cplusplus >= 201703L的判断分支,导致代码尝试引用C20已经移除的std::result_of。

解决方案
  • 给MSVC添加/Zc:__cplusplus编译参数,让编译器返回正确的__cplusplus数值。在你现有CMakeLists.txt的set(CMAKE_CXX_STANDARD_REQUIRED ON)行后添加以下配置:
if (MSVC)
    add_compile_options(/Zc:__cplusplus)
endif()
  • 清理原有CMake缓存:删除你项目的build目录,重新执行CMake配置、生成操作,确保新的编译参数生效。
  • 重新编译Conan依赖包:如果你的Abseil包是之前以低于C20的标准编译安装的,需要清理Conan中对应的缓存包,重新以C20标准安装所有依赖,避免后续出现兼容性问题。

配置完成后可以在代码中加入std::cout << __cplusplus << std::endl;验证,C++20下输出值应为202002L,即代表配置生效。

内容的提问来源于stack exchange,提问作者mpen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 06:36:04