我试图在模块中使用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编译器成熟一点可能是一个好主意,但是如果有人知道暂时解决这个问题的方法,我会有兴趣看到它
由于