Как использовать стандартную библиотеку с модулями C++? (например: `import std.io`)

Основной пример, приведенный в разделе Как использовать модули C++ в Clang? работает для меня, но не импортирует стандартную библиотеку (например, через import std.stdio;); после просмотра http://clang.llvm.org/docs/Modules.html не было ясно, как использовать стандартную библиотеку в модуле C++, например:

// foo.cppm:
export module foo;
// works: #include <stdio.h>
// none of these work:
import std.stdio;
import std.io;
import std;

export void test_foo(){
  printf("hello world\n");
}

это дает ошибку: clang++ -std=c++17 -fmodules-ts --precompile foo.cppm -o foo.pcm foo.cppm:4:8: fatal error: module 'std.stdio' not found

НОТА: clang++ --version Apple LLVM version 9.1.0 (clang-902.0.39.1) Target: x86_64-apple-darwin17.4.0 Я на OSX. Я также попробовал clang от brew install llvm и тоже не работал.

Какой самый простой способ сделать что-то подобное?

1 ответ

Clang в настоящее время не поддерживает import std.io синтаксис в C или C++.

Из документации модуля Clang:

В настоящее время нет синтаксиса C или C++ для объявлений импорта. Clang будет отслеживать предложение модулей в комитете C++. См. Раздел "Включает как импорт", чтобы увидеть, как модули импортируются сегодня.

Когда вы передаете -fmodules флаг, #include заявления автоматически переводятся в import,

Из раздела Включает как импорт:

модули автоматически переводят директивы #include в соответствующий импорт модуля. Например, директива включения

#include <stdio.h>

будет автоматически сопоставлен с импортом модуля std.io.

Другие вопросы по тегам