C++20:source_location::current() 在模块内不起作用?

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 中。有谁知道这是怎么回事?也许我缺少什么?