<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On 20 June 2017 at 05:29, Boris Kolpackov <span dir="ltr"><<a href="mailto:boris@codesynthesis.com" target="_blank">boris@codesynthesis.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">Boris Kolpackov <<a href="mailto:boris@codesynthesis.com">boris@codesynthesis.com</a>> writes:<br>
<br>
> So, theoretically, I should be able to replace my '#include <string>'<br>
> with something like 'import std.core' provided I build an appropriate<br>
> .pcm?<br>
<br>
</span>Actually, nothing prevents me from defining my own modules-ts std.core<br>
module, even if I am using libstdc++:<br>
<br>
// file: std-core.mxx -*- C++ -*-<br>
export module std.core;<br>
<br>
#include <string><br>
#include <iostream> // For compatibility with VC.<br>
<br>
I was then able to replace '#include <string>' with 'import std.core'<br>
and everything works except for one little niggle: for some reason<br>
Clang insists that I import in the module's purview:<br>
<br>
// file: hello.mxx -*- C++ -*-<br>
export module hello;<br>
<br>
import std.core;<br>
<span class=""><br>
export namespace hello<br>
{<br>
  void<br>
  say (const std::string& name);<br>
}<br>
<br>
</span>If I move import before the exporting module declaration:<br>
<br>
// file: hello.mxx -*- C++ -*-<br>
import std.core;<br>
<span class=""><br>
export module hello;<br>
<br>
export namespace hello<br>
{<br>
  void<br>
</span>  say (const std::string& name); // line 9<br>
}<br>
<br>
Then I get this error:<br>
<br>
hello.mxx:9:14: error: declaration of 'std' must be imported from module 'std.core' before it is required say (const std::string& name);<br>
/usr/bin/../lib/gcc/x86_64-<wbr>linux-gnu/6.2.0/../../../../<wbr>include/c++/6.2.0/iostream:42:<wbr>11: note: previous declaration is here namespace std _GLIBCXX_VISIBILITY(default)<br>
<br>
VC is happy with either placement and my reading of the spec suggests<br>
that it shouldn't matter (unlike #include). Or am I missing something<br>
here?</blockquote><div><br></div><div>This is another "implementation not finished yet" issue. What's happening here is that "export module hello;" enters a new module scope, and that new module scope does not (yet) inherit the set of imported modules from the global module scope. </div></div></div></div>