On 9/22/14, 2:39 AM, Don wrote:
On Sunday, 21 September 2014 at 18:09:26 UTC, Andrei Alexandrescu wrote:
On 9/21/14, 8:29 AM, ketmar via Digitalmars-d wrote:
On Sun, 21 Sep 2014 08:15:29 -0700
Andrei Alexandrescu via Digitalmars-d <digitalmars-d@puremagic.com>
wrote:

alias Int1 = Typedef!(int, "a.Int1");
alias Int2 = Typedef!(int, "b.Int2");
ah, now that's cool. module system? wut? screw it, we have time-proven
manual prefixing!

Use __MODULE__. -- Andrei


Yes, but you're advocating a hack.

Oh but I very much disagree.

The original premise does seem to be
correct: library Typedefs are fundamentally broken. The semantics of
templates does not match what one expects from a typedef: ie, declaring
a new, unique type.

If you have to pass __MODULE__ in, it's not really a library solution.
The user code needs to pass in a nasty implementation detail in order to
get a unique type.

How many libraries did you use that came with no idioms for their usage?

And it does seem to me, that because it isn't possible to do a proper
library typedef, you've attempted to redefine what a Typedef is supposed
to do. And sure, it you remove the requirement to create a unique type,
Typedef isn't broken.

You're two paragraphs away from "library Typedefs are fundamentally broken". Now which one is it?

But then it isn't very useful, either. You can't,
for example, use it to define the various Windows HANDLEs (HMENU, etc),
which was one of the most successful use cases for D1's typedef.

alias HMENU = Typedef!(void*, __MODULE__ ~ ".HMENU");

So please s/can't/can't the same exact way built-in typedef would have done it/.

Having said that, though, the success of 'alias this' does raise some
interesting questions about how useful the concept of a typedef is.
Certainly it's much less useful than when Typedef was created.

My feeling is that almost every time when you want to create a new type
from an existing one, you actually want to restrict the operations which
can be performed on it. (Eg if you have  typedef money = double; then
money*money doesn't make much sense). For most typedefs I think you're
better off with 'alias this'.

When control is needed, yah. I had some thoughts on adding policies to Typedef (convert to base type etc) but as it seems it's already unusable, I won't bring them up :o).


Andrei

Reply via email to