Как использовать стандартную библиотеку с модулями 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++.
В настоящее время нет синтаксиса C или C++ для объявлений импорта. Clang будет отслеживать предложение модулей в комитете C++. См. Раздел "Включает как импорт", чтобы увидеть, как модули импортируются сегодня.
Когда вы передаете -fmodules
флаг, #include
заявления автоматически переводятся в import
,
Из раздела Включает как импорт:
модули автоматически переводят директивы #include в соответствующий импорт модуля. Например, директива включения
#include <stdio.h>
будет автоматически сопоставлен с импортом модуля std.io.