联合未定义结构中的C ++模块模板 - VC 2017

时间:2017-06-18 21:39:28

标签: c++ module visual-studio-2017 c++20 c++-modules

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

由于

0 个答案:

没有答案