Is there any good reason why C++ namespaces are "closed" in D?
Atila Neves
atila.neves at gmail.com
Mon Jul 30 14:20:05 UTC 2018
On Sunday, 29 July 2018 at 07:45:35 UTC, Walter Bright wrote:
> On 7/28/2018 9:23 PM, Manu wrote:
>> Don't troll me on this one, this is a very sensitive topic!
>> I could have a legit mental breakdown ;)
>
>
> Here's another method:
>
> ------
> extern (C++, ns) { int foo() { return 1; } }
>
> mixin template X()
> {
> extern (C++, ns) { int bar() { return 2; } }
> }
>
> mixin X!() x;
>
> -------
void main() {
pragma(msg, __traits(allMembers, ns));
foo;
bar;
}
$ dmd foo.d
tuple("foo")
foo.d(15): Error: undefined identifier bar
That method doesn't compile.
> and another:
>
> -----
> extern (C++, ns) { int foo(); }
>
> struct S
> {
> extern (C++, ns) { int bar(); }
> }
> ----
void main() {
foo;
bar;
}
I changed them to be only declarations, since the goal is to call
existing C++ code, not to define it in a D file. `foo` works as
expected, but `bar`...
foo.o:foo.d:function _Dmain: error: undefined reference to
'S::ns::bar()'
collect2: error: ld returned 1 exit status
Neither method works.
More information about the Digitalmars-d
mailing list