Я пытаюсь использовать экспериментальный модуль Visual Studio 2017 с шаблонами в модуле. Вот упрощенный пример модуля, который я пытаюсь сделать
// MyModule.ixx
module MyModule;
export
{
template<typename T>
struct Struct_1
{
T value;
}
template<typename T>
struct Struct_2
{
union
{
T data[1];
Struct_1<T> x;
};
}
}
И вот как я пытаюсь использовать модуль и шаблон структуры
// main.cpp
import std.core;
import MyModule;
int main(int argc, char* argv[])
{
Struct_2<float> s;
std::cout << s.data[0];
return 0;
}
Компиляция дает следующее: error C2079: 'Struct_2::x' uses undefined struct 'Struct_1<T>
Я понимаю, что модули являются экспериментальной функцией, однако, когда модули не используются, определение структур, подобных этой, работает нормально. Это говорит Struct_1<T>
не определено, значит ли это, что мне нужно каким-то образом явно создавать шаблоны?
Моя командная строка компилятора выглядит так:
cl /utf-8 /experimental:module MyModule.ixx /std:c++latest /W3 /Zi /MDd /EHsc main.cpp /link /OUT:test.exe /INCREMENTAL:NO
Любая помощь приветствуется.
ОБНОВИТЬ
Я думаю, что это какая-то ошибка компилятора MSVC. Я скомпилировал тот же код, используя Clang, и он работает нормально. Файл модуля Clang выглядит так же, как указано выше, за исключением того, что расширение файла — .cppm, а вверху оно имеет:
export module MyModule;
Моя командная строка компилятора выглядит так:
clang++ -fmodules-ts --precompile MyModule.cppm -o MyModule.pcm
clang++ -fmodules-ts -fprebuilt-module-path=. main.cpp
Вероятно, будет хорошей идеей просто подождать, пока компилятор MSVC немного повзрослеет, прежде чем использовать модули, но если кто-нибудь пока знает, как обойти это, мне было бы интересно увидеть его.
Спасибо
Задача ещё не решена.
Других решений пока нет …