Шаблоны модулей C ++ в объединении undefined struct — VC 2017

Я пытаюсь использовать экспериментальный модуль 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 немного повзрослеет, прежде чем использовать модули, но если кто-нибудь пока знает, как обойти это, мне было бы интересно увидеть его.

Спасибо

5

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector