MSVC编译含C++20模块与HttpLib的程序时出现chrono运算符错误
MSVC编译C++20模块中使用HttpLib的chrono报错问题
环境信息
- VS2022(搭配MSVC 14.43.34808)
- Windows 11 Pro 24H2
- 使用CMake构建
问题现象
在C++20模块中使用HttpLib时,MSVC编译会因thread.h内的chrono操作报错,错误信息如下:
H:\PROGRA~1\MICROS~1\2022\COMMUN~1\VC\Tools\MSVC\1443~1.348\bin\Hostx86\x64\cl.exe /nologo /TP -Dtest_EXPORTS /DWIN32 /D_WINDOWS /EHsc /Ob0 /Od /RTC1 -std:c++20 -MDd -Zi /showIncludes @CMakeFiles\test.dir\loader.cpp.obj.modmap /FoCMakeFiles\test.dir\loader.cpp.obj /FdCMakeFiles\test.dir\ /FS -c D:\Users\H5-A312\Desktop\network_projects\msvc_complie_test\loader.cpp H:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.43.34808\include\thread(170): error C2676: binary '+': 'const std::chrono::time_point<std::chrono::steady_clock,std::chrono::duration<__int64,std::ratio<1,1000000000>>> does not define this operator or a conversion to a type acceptable to the predefined operator H:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.43.34808\include\xutility(2014): note: could be 'std::reverse_iterator<_BidIt1> std::operator +(reverse_iterator<_BidIt1>::difference_type,const std::reverse_iterator<_BidIt1> &) noexcept(<expr>)' H:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.43.34808\include\thread(170): note: 'std::reverse_iterator<_BidIt1> std::operator +(reverse_iterator<_BidIt1>::difference_type,const std::reverse_iterator<_BidIt1> &) noexcept(<expr>)': could not deduce template argument for 'const std::reverse_iterator<_BidIt1> &' from 'const std::chrono::duration<__int64,std::ratio<1,1000>>' ...
最小复现示例(MRE)
loader.cpp
import client; int main() { auto client = Client(); return 0; }
client.cppm
module; #include "httplib.h" export module client; export class Client { public: Client() { } private: httplib::Client client = httplib::Client("localhost", 1080); };
CMakeLists.txt
cmake_minimum_required(VERSION 3.29) project(test) set(CMAKE_CXX_STANDARD 20) add_library(test SHARED loader.cpp ) target_sources(test PRIVATE FILE_SET modules TYPE CXX_MODULES BASE_DIRS ${PROJECT_SOURCE_DIR} FILES client.cppm )
触发条件
该问题仅在以下场景同时满足时出现:
- HttpLib引用位于C++20模块内部
- HttpLib对象定义在类中
- 使用MSVC编译(MSYS2-Clang可正常编译)
内容的提问来源于stack exchange,提问作者Rabbit0w0
相关产品推荐
相关产品推荐

