c++ 20 Modules std.ixx STL静态/全局作用域引用



按照微软的指示,我无法得到std模块构建而没有版本控制错误,所以我继续并只是添加了文件:

C:Program FilesMicrosoft Visual Studio2022PreviewVCToolsMSVC14.35.32213modulesstd.ixx

到我的项目中,我将它导入到我的模块接口文件中。我唯一的问题是我不能访问::localtime_s,因为它是std命名空间中不存在的静态内联/全局函数之一。包括& lt; time.h>在全局模块空间中会产生宏重定义的问题。我是不是漏掉了什么?

export module MyModule;
import std;
export namespace nspace1 {
void TimeFunction();
}
namespace nspace1 {
void TimeFunction()
{
std::time_t t = std::time(nullptr);
std::tm* now{};
void* result = ::localtime_s(now, &t); <== dne
}
}

智能感知错误是它在全局空间中找不到,这对localtime_s有意义,因为它是静态的,但是_localtime64_s只是全局的,它说的是同样的事情。删除双冒号只会将错误信息更改为无法找到。

下面的代码可以在我的机器上运行。

(Version 17.5.0 Preview 3.0)

import std;是c++ 23的一个特性。我希望供应商的支持越来越好。

module;
#include <time.h>
export module MyModule;
import std;
export namespace nspace1 {
void TimeFunction();
}
namespace nspace1 {
void TimeFunction()
{
std::time_t t = std::time(nullptr);
std::tm* now{};
auto result = ::localtime_s(now, &t);
//auto result = localtime_s(now, &t); // ok, too
}
}

编辑:在MSVC 17.6.0 Preview 3.0中,不需要添加std.ixx文件。IDE知道如何构建。如果添加,会导致编译错误。

最新更新