On Sunday, 8 February 2015 at 19:59:40 UTC, Meta wrote:
On Sunday, 8 February 2015 at 13:06:08 UTC, Marc Schütz wrote:
No, `alias this` convert from the type it is declared in to another type. `opImplicitCast` would be declared in the destination type.

So like this?

struct Type1
{
    string str;
}

struct Type2
{
    string str;

    Type2 opImplicitCast(Type1 t)
    {
        return Type2(t.str);
    }
}

void main()
{
    Type2 t2 = Type1("Hello, World!");
}

Instead of the opposite?

Yes. It's almost like a constructor, but would be called wherever an explicit call to the constructor is required today:

    struct S {
        this(int x) {}
    }

    S test1() {
        return 10;    // not ok
        return S(10); // works
    }

    struct T {
        static typeof(this) opImplicitCast(int x) {
            return typeof(this)(x);
        }
    }

    T test1() {
        return 10;    // ok
        return T(10); // not sure whether this should
                      // work or not
    }

Because it's so similar to a constructor (it always needs to be static and return `typeof(this)`), maybe a special syntax can be used:

    struct S {
        @implicit this(int x) {}
    }

Reply via email to