c++ - C++20:source_location::current() 在模块中不起作用?
问题描述
我在 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;
};
然后,在 main.cpp 我导入模块并调用构造函数:
import std.core;
import Test;
int main() {
std::cout << Test().info;
}
它不会编译,给出以下错误:
错误 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;
}
附带说明一下,第一个模块示例在 GCC 中工作得非常好,并且没有给出任何错误或警告(当然你不能导入 std.core,你只需 #include 所需的头文件),即使模块没有完全实现在 GCC 中,而它们在 MSVC 中。有谁知道这里发生了什么?也许我缺少一些东西?
解决方案
推荐阅读
- postgresql - 将数据从 Citus 迁移到 RDS
- gitlab - 覆盖 gitlab 作业中定义的 CI/CD 变量
- python - Boto3 / ECR-公共错误
- javascript - 如何在使用 onsubmit 插入数据库之前验证表单的输入
- reactjs - 从 API 获取时 React Native Snap 轮播不显示图像
- python - 使用 TortoiseOrm 作为数据库层测试 FastApi 应用程序的问题
- arrays - Spring Boot - JPARepository - 出现在 _links 中的实体数组,而不是 json 中的数组
- java - Alfresco:更改工作流启动器时出错
- pyomo - 将 ipopt 与 pyomo 一起使用
- python - 如何使用pytest在python中测试没有参数或返回的类的方法