On Friday, 4 April 2014 at 19:43:56 UTC, Walter Bright wrote:
C++:
namespace S { namespace T {
int foo();
namespace U {
int foo();
}
} }
D:
extern (C++, S::T) {
int foo();
extern (C++, U) {
int foo();
}
}
foo(); // error, ambiguous, which one?
S.T.foo(); // S undefined
Why would we need new ways of declaring scopes in D? Overriding
the external mangling should be sufficient? If there are
collisions you can use any type of scope you prefer to avoid the
issue, modules, structs, templates, even functions or blocks...
void fun1() { extern (C++, S::T) int foo();}
void fun2() { extern (C++, S::T::U) int foo();}
extern (C++, S::T::U) int foo();
struct test { extern (C++, S::T) int foo();}