简体   繁体   中英

C++20 modules on clang (Windows): typeinfo error in simplest example

File first_module.cppm

export module first_module;

int foo(int x) {
  return x;
}

export int e = 42;

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

Pre-compiling (no problems):

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

Compiler information:

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

File first-main.cc

import first_module;

int main() {
  return bar();
}

Compiling (no problems):

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

Everything is ok.

File second-main.cc

import first_module;

#include <iostream>

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

Compiling same way:

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

Result: ton of errors like:

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'

I have feeling that I am doing something wrong, because I have newest MSVS (updated recently), newest clang, but something still not working on Windows on trivial examples.

Or may be this is known bug? Tried to google it, no results.

The core problem resides in that your current Clang installation it's working with the MSVC toolchain and there's a known issue when you compile using #include directives with the Microsoft toolchain with Clang using the modules feature.

You can find it here, opened since 2018 https://github.com/llvm/llvm-project/issues/38400

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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