* "At the AliasThis declaration semantic stage, the compiler can
perform the initial checks and reject the obviously incorrect
AliasThis declarations." -> it might be simpler (for the sake of simplifying generic code) to just delay all error checking to the
first use.

I disagree with that. Current check is not recursive and prevent you
code from a silly errors:

struct X(T, V)
{
   T t;
   V v;
   alias t this;
   alias v this; //Error if is(T == V). However this code is
fundamentally broken, and this error should be raised as soon as possible.
}

The code is not fundamentally broken if alias this is never used. I agree rejecting the code compulsively is also sensible, ONLY if there is a simple way to write a static if condition to make the code work. Meaning:

struct X(T, V)
{
    T t;
    V v;
    static if (please_fill_this)
        alias t this;
    static if (please_fill_this_too)
        alias v this;
}

If the two conditions are too hard to write then it would be difficult to argue this point successfully.

This code can be rewritten as:

struct X(T, V)
{
    T t;
    V v;
    alias t this;
    static if (!is(V == T))
        alias v this;
}

The code is not fundamentally broken if alias this is never
used.

I meant that when you say that X is a subtype of T and X is a subtype of V where you don't know what T and V are, it means you don't really know what you're doing. And that is an error and the compiler should inform you about it as soon as possible. However I may be mistaken.

Understood. All: okay to make alias this + opDispach applicable to the
same expression an error?

I think it will be nice.

I'm sending this now with these points, will make one more pass through
the DIP when I'm online again.

Ok, I'll wait.

And please, answer the question about the is-expression.

Reply via email to