6

我正在尝试将 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 编译器成熟一点可能是个好主意,但如果有人暂时知道解决这个问题的方法,我会很感兴趣。

谢谢

4

0 回答 0