On Thursday, 19 April 2012 at 06:56:21 UTC, Jonathan M Davis wrote:
On Thursday, April 19, 2012 08:25:13 Namespace wrote:
Wow, many thanks for your trouble. Now it works as aspected.
I only need

T opCast(T)() const if(isImplicitlyConvertible!(typeof(this), T))
{
        return this;
}

to work.

But if i try to cast to a const like this
const Vector2s vs_ = cast(Vector2s)(vf);

I get a long list of compiler errors.
Thereby it's petty if i have only

T opCast(T)() const if(isImplicitlyConvertible!(typeof(this), T))
{
        return this;
}

or additional the const variant

const(T) opCast(T)() const
if(isImplicitlyConvertible!(typeof(this), const T)) {
        return this;
}


Well, if the function is const (which makes this const), since you're returning this, the return type must be const. It can only return non-const if the function isn't const. That's why I suggested having both overloads.

- Jonathan M Davis

Yeah, but
const Vector2s vs_ = cast(Vector2s)(vf);

don't work even with

U opCast(U)() const if (is(Unqual!U == Vector2D!byte) ||
        is(Unqual!U == Vector2D!ubyte) ||
        is(Unqual!U == Vector2D!short) ||
        is(Unqual!U == Vector2D!ushort) ||
        is(Unqual!U == Vector2D!int) ||
        is(Unqual!U == Vector2D!uint) ||
        is(Unqual!U == Vector2D!long) ||
        is(Unqual!U == Vector2D!ulong) ||
        is(Unqual!U == Vector2D!float) ||
        is(Unqual!U == Vector2D!double) ||
        is(Unqual!U == Vector2D!real))
{
        return U(this.x, this.y);
}

T opCast(T)() if(isImplicitlyConvertible!(typeof(this), T)) {
        return this;
}

const(T) opCast(T)() const if(isImplicitlyConvertible!(typeof(this), const T)) {
        return this;
}

Reply via email to