C 20: source_location::current() не работает внутри модулей?

#c #visual-studio #gcc #c 20

Вопрос:

У меня есть модуль .ixx в Visual Studio (MSVC) под названием Test, который экспортирует простую структуру:

 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’: вызов функции immediate не является постоянным выражением

Однако, если вы попытаетесь сделать то же самое, но за пределами модуля (все в main.cpp или отдельный класс .cpp/заголовок) он компилируется и работает просто отлично:

 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, вместо этого вы просто #включаете необходимые заголовки), даже если модули не полностью реализованы в GCC, в то время как они находятся в MSVC.
Кто-нибудь знает, что здесь происходит? Может быть, я чего-то не понимаю?

Комментарии:

1. Это кажется проблемой, я предлагаю вам следовать теме: developercommunity.visualstudio.com/t/…