Skip to content

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

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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    compilerCompiler work involvedmodulesC++23 modules, C++20 header units

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions