繁体   English   中英

clang (Windows) 上的 C++20 模块:最简单示例中的 typeinfo 错误

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM