On Wednesday, 20 January 2016 at 05:32:08 UTC, Walter Bright wrote:
Actual code examples of the serious problems would be appreciated. All the namespace code examples you posted were bugs that have since been fixed, or were misunderstandings that were explained.

IMO his description was already quite clear, but here you are:

// a.d
module a;

extern(C++, ns) {
    void fooa();
    void bar();
}

// b.d
module b;

extern(C++, ns) {
    void foob();
}
void bar();

// main.d
import a, b;

void main() {
    fooa();     // ok
    foob();     // ok
bar(); // Error: b.bar at b.d(6) conflicts with a.ns.bar at a.d(5)
    // let's try to disambiguate: we want ns.bar
ns.bar(); // Error: a.ns at a.d(3) conflicts with b.ns at b.d(3) a.ns.bar(); // works, but requires superfluous `a`, even though
                // `ns` already makes it unambiguous
}


Of course, it's because of how name lookup works in D, and we understand that. But it still diminishes the usability of this feature considerably, as the above situation is extremely likely to run into if you're porting a sufficiently large C++ library.

Reply via email to