On Sunday, 6 April 2014 at 02:33:38 UTC, Walter Bright wrote:
On 4/5/2014 6:26 PM, Michel Fortin wrote:
What if you also have a C++ foo at global scope?
It'll work exactly the same as import does.
module cpptest;
extern (C++) void foo();
extern (C++, namespace = A) void foo();
foo(); // ambiguous
A.foo(); // works
.foo(); // works?
Yes.
cpptest.foo(); // works?
Yes.
Does these two last lines make sense?
Just as much sense as:
module bar;
void foo();
.foo(); // works
bar.foo(); // works
Namespace lookup rules would be exactly the same as for imports
and mixin templates.
My main reservation against the new suggestion is that one would
be forced to open a new nested namespace even when it's
detrimental, because in some cases the namespace structure is
already reflected in the filesystem(just like for D:s module
system).
I can't assess how widespread this is globally, but at least some
high-quality projects already have guidelines to use
file/namespace mappings.
A random example from boost:
boost::asio::ip::multicast
boost/asio/ip/multicast.hpp
One can of course workaround this issue with an extra alias for
every imported symbol, or use compile-time reflection to
auto-generate all alias statements... (or heaven forbid, put
entire boost in one file ;))
I assume the "namespace = xxx" syntax is some sort of named
parameter, would it be possible to add another similar param,
which only changes mangling and doesn't actually create a new
scope?