On 8/2/18 5:26 AM, Daniel N wrote:
On Thursday, 2 August 2018 at 08:31:28 UTC, Walter Bright wrote:
On 8/1/2018 10:06 PM, Johannes Pfau wrote:
I guess that would be acceptable if there is a real benefit, but I have
not seen a single argument for the current behavior in this thread.
Please read my postings in this thread, then.
I know you have been very patient with explaining this, but I've been
trying to read all threads on this topic and I'm still not sure, can you
please acknowledge if I understood you correctly or not?
Let's use a simple pseudo example? Let's assume we have two different
'any' implementations...
The current extern(c++) design allows us to bind to both of them in a
single file.
cpp_bindings.d
extern(c++, std) ...any-definition...
extern(c++, boost) ...any-definition...
Personally I would never *bind* to two different namespaces in a single
file, are there any other additional benefits to the current design
which I'm overlooking?
With a non-scoped extern(c++) we could simply use two files.
cppstd/any.d
extern(c++, std) ...any-definition...
boost/any.d
extern(c++, boost) ...any-definition...
My conclusion is that _if_ I understood you correctly, it must mean that
in the examples which you have in mind, it is common to *bind* to two
namespaces in the same file? Could you give a real-world examples of two
namespaces which you would like to mix like that in the same *bindings*
file? Is it for instance 'std' and 'std::experimental'?
The example that Walter keeps bringing up is one where the C++ code has
2 namespaces in the same header file. Not only that, but then
identically named functions in those namespaces. In that case, a direct
translation would cause problems with hijacking in D, where it doesn't
in C++ (as long as you don't ever use `using` declarations, or only use
one or the other).
So the difference from your example is that you're not trying to bind 2
different files with 2 different namespaces into one D module, but you
are translating a single C++ header file that's written with the 2
bindings as described. Not std and boost, but ns1 and ns2 inside the
same header file, which each have identical symbols.
I've never seen it, but it's certainly valid C++ and in the realm of
possibility.
-Steve