DIP61: redone to do extern(C++,N) syntax

Walter Bright via Digitalmars-d digitalmars-d at puremagic.com
Mon Apr 28 13:41:28 PDT 2014


On 4/28/2014 12:18 AM, Sergei Nosov wrote:
> On Sunday, 27 April 2014 at 19:54:50 UTC, Walter Bright wrote:
>> http://wiki.dlang.org/DIP61
>
> Quote:
>
>> Unlike C++, namespaces in D will be 'closed' meaning that new declarations
>> cannot be inserted into a namespace after the closing }. C++ Argument
>> Dependent Lookup (aka "Koenig Lookup") will not be supported.
>
> Do I understand it correctly, that if I have namespace members defined in
> different files, like
>
> // a.cpp
> namespace ns { int foo(); }
> // b.cpp
> namespace ns { int bar(); }
>
> I have the only option to put those in a single D file, like
>
> // c.d
> extern (C++, ns) { int foo(); int bar(); }
>
> ?

That is incorrect. As far as D is concerned, a.ns and b.ns are separate and 
distinct declarations, even if C++ members of those scopes may mangle to the 
same name.


> And the only way it's more flexible than the hypothetical extern(C++) module ns;
> is that you can put several namespaces to a single file?

People who write namespaces in C++ do not pay much attention to what .h files 
they are in. People writing D imports for such C++ code should not have to 
re-engineer the layout of the files.


More information about the Digitalmars-d mailing list