最近在 MSVC 16.8 中添加了对 C++20 模块的支持。如果我没记错的话,使用模块的优点之一是现在支持循环导入依赖项。但是,以下测试项目仍然无法在最新版本的 Microsoft 编译器中编译。
computer.ixx
export module computer;
import printer;
export struct Computer {
Printer* printer;
};
printer.ixx
export module printer;
import computer;
export struct Printer {
Computer* computer;
};
main.cpp
import computer;
import printer;
int main() {
Computer* c = new Computer();
Printer* p = new Printer();
p->computer = c;
c->printer = p;
}
尝试编译此代码会导致:(
MultiToolTask has encounted an issue scheduling task because one or more tasks still remains but none could be started. Please check the inputs and their dependency to avoid cirular loops.
错字逐字复制)并混淆 IntelliSense、挂起甚至使 Visual Studio 崩溃。
我还尝试颠倒导入和导出行的顺序,但这并没有解决问题。
我知道这仍然是一个测试版功能,但我想确保我的假设是正确的(该代码应该可以工作),并且如果代码中有任何错误,我应该更改它以使其工作。
如果您想自己尝试一下,可以在这里找到包含上述代码的 MSVC 项目:https ://github.com/albertvaka/ModulesTest