#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/…