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

Viewed 344

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.

1 Answers

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

Related