On Wednesday, 23 May 2018 at 03:44:36 UTC, Manu wrote:
Okay, I'm still really angry about the stupid stupid decision to make C++ namespaces into scopes rather than just a detail used for mangling, with absolutely no consultation of the community, in particular the target audience, who are unanimously annoyed as far as I can tell...

I'm unsatisfied by the work-arounds to make the situation not-suck, but I think I have an idea that would pacify me...

If we can use `alias this` to mirror an entire C++ namespace into the location we want (ie, the scope immediately outside the C++ namespace!!), then one sanitary line would make the problem quite more tolerable:

extern(C++, FuckOff)
{
  void bah();
  void humbug();
}
alias this FuckOff; // <-- symbols are now aliased where they should
have been all along



(count the seconds until the reply that says to use reflection to scan the scope, and use a mixin to... blah blah)

Would there be any use for this other than working around this problem with extern(C++) ?

If not then perhaps changing the behavior to be what is desired would be better. If we change extern(C++, Namespace) to work only for mangling and not as a struct, then existing code would only need to create a new module with "Namespace" and statically import it to work with existing code. I'd rather the actual problem be fixed than having some work around for it. We don't even have multiple "alias this" in structs. If a new feature were to be added I'd rather it'd be that, which was "approved" but has yet to be included.

Reply via email to