On Thu, 24 Sep 2009 14:36:01 -0400, Aenigmatic <proc...@adam-dott-com.au>
wrote:
No further response to any responses to my previous post's responses is
a both swift and non-invasive.
Now my deeply thought question is ...
Is typedef (in D) a C/C++ legacy or is the dear orphan now adopted as a
first-class citizen in the US of D?
-- Yours truly, Justin Johansson
typedef is different from alias -- but has some issues.
typedef creates a new *incompatible* type. By incompatible, I mean that
it doesn't implicitly cast back to the type you created it from.
e.g.:
typedef int mytype;
mytype x;
int y = x; // ok, mytype implicitly casts to x
x = y; // error, can't implicitly cast.
typedef is a distinct type, so it can be used to overload a function:
foo(mytype m);
foo(int i);
mytype x;
foo(x); // calls foo(mytype) version
You can also set the default value different from the original type:
typedef int mytype=5;
mytype x; // set to 5.
However, there are issues, such as operations don't "just work."
i.e.:
mytype x = 5;
mytype y = x + 5; // error, x + 5 results in an int! Need a cast
My experience is that 99% of the time, alias is what you want. I haven't
yet encountered a good case for using typedef.
But it's abilities certainly are not covered by any other construct, so
I'd say it's a first class citizen.
-Steve