最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

c++ - MSVC unable to compile program with C++20 module feature - Stack Overflow

programmeradmin1浏览0评论

VS2022 with MSVC 14.43.34808

Windows 11 Pro 24H2

Using CMake

I'm using HttpLib () in my module, and when compiling MSVC will be confused by chrono operations inside thread.h

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
)

The problem only arises when the HttpLib reference is:

  • Within a module
  • Within a class
  • Compiling with MSVC (as MSYS2-Clang can easily compile it)
发布评论

评论列表(0)

  1. 暂无评论