On 1/3/2016 7:02 AM, Jacob Carlborg wrote:
On 2016-01-03 06:40, Walter Bright wrote:
I do not understand what difficulty you are having with this.
I think what Manu is finding difficult is that "extern(C++, ns)" creates a
symbol at the D side. Which is kind of unexpected as no other for of "extern"
works like that.
I originally implemented the feature as 'namespace ns'. But nobody liked that,
as it would encourage people to use namespaces for non-C++ interfacing purposes.
That also makes it impossible to use the same namespace in
different file, which is very common in C++.
It is not at all impossible, any more than it is impossible to declare C names
in multiple files. But you do have to follow C/C++'s "One Definition Rule" or
you'll get link errors.
I think that code like:
int x;
extern (C++, ns) { char x; }
Is less common than the using the same namespace in different files. It's also
not very practical to create bindings for a complete library in a single module,
if the library is big.
I agree it is not very practical to put it all in one file. But it isn't any
more necessary than putting all the C declarations in one file, for the same reason.