Skip to content

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

Open
@hexne

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

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