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;
}