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)