首页 > 解决方案 > 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 中。有谁知道这里发生了什么?也许我缺少一些东西?

标签: c++visual-studiogccc++20

解决方案


推荐阅读