Visual Studio 2019:如果不首先将其导入到单独的模块 (ixx) 中,则无法在 cpp 文件中“导入”C++ 标准库声明

djh*_*son 2 c++ module c++20 visual-studio-2019

当尝试使用 C++20import命令加载 .cpp 文件中的标准库声明时,会返回编译器错误,指出找不到“标头单元”。

例如,在一个文件中,比如说Main.cpp,我把

import <iostream>;

int main()
{

    return 0;
}

Run Code Online (Sandbox Code Playgroud)

编译器错误结果如下:

error C7612: could not find header unit for 'C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include\iostream'

但是,如果我向项目添加一个模块,例如Test.ixx,如下所示

export module Test;
import <iostream>;
Run Code Online (Sandbox Code Playgroud)

然后Test在Main.cpp中导入该模块:

import Test;
import <iostream>;

int main()
{

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

那么,没问题。代码构建得很好。

这只是 C++20 编译器实现仍在研究中的一个例子吗?到目前为止,我的印象是标准库头应该无条件“导入”——即不需要import在其他地方的模块中——但我最近才开始尝试 C++20 中的新功能。

注意:我也尝试过使用其他标准库声明(例如<vector>等),得到相同的结果。

小智 7

有 3 个选项可用于在 Visual Studio 中使用标准库模块: 在项目属性 C/C++ 中:

  1. C++ 语言标准:预览 - 最新 C++ 工作草案 /std:c++latest 中的功能
  2. 启用实验性 C++ 标准库模块:是 (/experimental:module)
  3. 扫描模块依赖项的源:是

我正在使用 Microsoft Visual Studio Community 2019 版本 16.11.8