extern(C++, NS)

Jonathan M Davis via Digitalmars-d digitalmars-d at puremagic.com
Sun Nov 29 04:36:56 PST 2015


On Sunday, 29 November 2015 at 10:58:48 UTC, Manu wrote:
> On 29 November 2015 at 20:17, Iain Buclaw via Digitalmars-d 
> <digitalmars-d at puremagic.com> wrote:
>> I think your idea with aliases was just wishful thinking, 
>> aliases themselves never worked like that.
>
> I thought aliases did produce a symbol in the scope they are 
> declared?
> Or do you mean with the private thing? Yeah...
> Aliases are often used to sort out these sorts of 
> scope/namespacing
> issues, I've seen it come up lots of times.

Aliases usually seem to work a lot like copy-pasting. If you do 
something like

alias New = Orig;

then everywhere that New is used in the code, it's effectively 
replaced with Orig, and you never even see it in any error 
messages. It's pretty much just for the programmer's benefit - 
e.g. avoiding having to type out the entire import path for a 
symbol over and over:

alias foo = some.pkg.somewhere.foo;

But there's still really only one symbol that the compiler is 
dealing with. It's kind of like how the C/C++ compiler never 
really sees macros, though it's more controlled than that. For 
instance, try compiling this code on a 32-bit system:

long val;
size_t i = val;

You'll get an error message complaining about trying to convert a 
long to a uint, just like if the code looked like

long val;
uint i = val;

The only places that I can think of where aliases don't act quite 
like this are when they're not used to replace one symbol with 
another - e.g. with alias this or with using alias to bring a 
base class overload into the scope of a derived class.

- Jonathan M Davis


More information about the Digitalmars-d mailing list