[英]C++20 modules on clang (Windows): typeinfo error in simplest example
文件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了一下,没有结果。
核心问题在于您当前的Clang
安装它正在使用MSVC
工具链,并且当您使用带有 Microsoft 工具链的#include
指令和Clang
使用modules
功能进行编译时,存在一个已知问题。
你可以在这里找到它,自 2018 年以来打开https://github.com/llvm/llvm-project/issues/38400
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.