首页 > 解决方案 > clang (Windows) 上的 C++20 模块:最简单示例中的 typeinfo 错误

问题描述

文件first_module.cppm

export module first_module;

int foo(int x) {
  return x;
}

export int e = 42;

export int bar() {
  return foo(e);
}

预编译(没问题):

$ clang++ --std=c++20 -fmodules --precompile first_module.cppm -o first_module.pcm

编译器信息:

$ clang++ -v
clang version 10.0.0
Target: x86_64-pc-windows-msvc

文件first-main.cc

import first_module;

int main() {
  return bar();
}

编译(没问题):

$ clang++ --std=c++20 -fmodules first-main.cc -fmodule-file=first_module.pcm first_module.pcm

一切都好。

文件second-main.cc

import first_module;

#include <iostream>

int main() {
  std::cout << bar() << std::endl;
}

编译方式相同:

$ clang++ --std=c++20 -fmodules second-main.cc -fmodule-file=first_module.pcm first_module.pcm

结果:大量错误,例如:

C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.26.28801\include\eh.h:56:14: error: reference to 'type_info' is ambiguous
        _In_ type_info const&     _Type,
             ^
note: candidate found by name lookup is 'type_info'
note: candidate found by name lookup is 'type_info'

我觉得我做错了什么,因为我有最新的 MSVS(最近更新),最新的 clang,但在 Windows 上的一些小例子仍然无法正常工作。

或者这可能是已知的错误?试着google了一下,没有结果。

标签: c++visual-studiomodulec++20

解决方案


推荐阅读