kvo*_*olt 6 c++ gcc visual-studio c++20
我在 Visual Studio (MSVC) 上有一个名为 Test 的 .ixx 模块,它导出一个简单的结构:
export module Test;
import std.core;
export struct Test {
Test(std::source_location src = std::source_location::current()) {
info.append(src.function_name());
}
std::string info;
};
Run Code Online (Sandbox Code Playgroud)
然后,在 main.cpp 上,我导入模块并调用构造函数:
import std.core;
import Test;
int main() {
std::cout << Test().info;
}
Run Code Online (Sandbox Code Playgroud)
它不会编译,给出以下错误:
错误 C7595 'std::source_location::current':对立即函数的调用不是常量表达式
但是,如果您尝试在模块之外执行完全相同的操作(全部在 main.cpp 或单独的 .cpp/header 类中),则它可以编译并正常工作:
import std.core;
struct Test {
Test(std::source_location src = std::source_location::current()) {
info.append(src.function_name());
}
std::string info;
};
int main() {
std::cout << Test().info;
}
Run Code Online (Sandbox Code Playgroud)
顺便说一句,第一个模块示例在 GCC 中工作得很好,并且不会给出任何错误或警告(当然你不能导入 std.core,你只需 #include 所需的标头),即使模块没有完全实现在 GCC 中,而他们在 MSVC 中。有谁知道这是怎么回事?也许我缺少什么?