Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

<thread>: Using std::this_thread::sleep_for in a module results in compilation errors #5203

Open
hexne opened this issue Dec 23, 2024 · 0 comments

Comments

@hexne
Copy link

hexne commented Dec 23, 2024

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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant