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

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
)

触发条件

该问题仅在以下场景同时满足时出现:

  1. HttpLib引用位于C++20模块内部
  2. HttpLib对象定义在类中
  3. 使用MSVC编译(MSYS2-Clang可正常编译)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 01:37:06