<thread>
: Using this_thread::sleep_for
in a module results in compilation errors #5203
Open
Description
When I use vs and use std::this_thread::sleep_for in a C++ module, I get an error.
'std::this_thread::sleep_until': no matching overloaded function found
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
binary '+=': no global operator found which takes type 'const std::chrono::duration<__int64,std::ratio<1,1000>>' (or there is no acceptable conversion)
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
binary '>': 'const std::chrono::duration<__int64,std::ratio<1,1000>>' does not define this operator or a conversion to a type acceptable to the predefined operator
The minimum duplicate file is as follows:
Mouse.ixx
module;
#include <thread>
#include <chrono>
export module Mouse;
export struct Mouse {
Mouse() {
std::this_thread::sleep_for(std::chrono::milliseconds{ 100 });
}
};
main.cpp
import Mouse;
int main() {
Mouse mouse;
return 0;
}
A possible solution:
Modify #include <thread>
and #include <chrono>
in Mouse.ixx to import std
to pass the compilation. The modified Mouse.ixx file is as follows:
export module Mouse;
import std;
export struct Mouse {
Mouse() {
std::this_thread::sleep_for(std::chrono::milliseconds{ 100 });
}
};
The main.cpp file does not need to be modified and can now be compiled.
I am using the vs version:
Microsoft Visual Studio Community 2022 (64-bit) - Current
Version 17.12.3