On Thursday, 18 December 2014 at 16:15:09 UTC, Steven Schveighoffer wrote:
On 12/18/14 10:44 AM, Dicebot wrote:
Have you seen my http://wiki.dlang.org/DIP63 ?

I admit this is somewhat over my head, but it seems to be more focused on types.

In D there is no special built-in value tuple concept. It is all same thing but emulating this behavior for symbols and types is much more difficult compared to values. This is the reason for such focus - rest is not really a problem.

I will note that your example:

struct Pack(T...)
{
   alias expand = T;
   alias expand this;
}

I don't think this would work, since you can't alias a value to a type?

Try this and be surprised :) `alias this` affects any symbol lookup and this pattern results in pretty interesting behavior. But it is still not good enough as described in the DIP.

But I don't use tuples regularly, so I am not sure where exactly expand is used. I thought it was to convert a concrete struct into a tuple of values, not a type tuple.

You can ignore expansion for now, it was motivating use case but DIP itself defines tools of defining user types that act like built-in tuples - which fits the theme of your original proposal. It also briefly speculates why adding such features to structs does not seem a good idea.

Also there is no difference between tuple of values and type tuple, it is same entity.

I don't disagree with the idea of having operators inside templates, I just don't know if it solves the problem I was looking at.

Your original snippet seems to implementable within proposed DIP if you replace struct with raw template. You will lose struct properties like having actual instance but those don't exist for built-in tuples either.

Reply via email to