I had a look at the new operator overloading and I can't seem to find
opAssign in opover.c.
http://www.digitalmars.com/d/2.0/operatoroverloading.html#Assignment
Seems like what I reported in the newsgroups (along with some other
potential bugs) is indeed a bug or the specs aren't up-to-date.
Vector2f _pos = Vector2f(0.f, 0.f); gets rewritten as
_pos.opBinary!("=")(...)
On March 8, 2010 20:01 Uhr, Trass3r wrote:
Guess it's better to post this here. Are these some bugs or is there
another problem?
the following code strangely yields:
dsfml\system\vector2.d(47): Error: variable
dsfml.system.vector2.Vector2!(float).Vector2.op only parameters or
foreach declarations can be ref
/// element-wise operations, +, -,
ref Vector2 opBinary(string op)(ref Vector2 v)
{
mixin("return Vector2!(T)( cast(T)(x " ~ op ~ " v.x), cast(T)(y
" ~ op ~ " v.y) );");
}
Removing ref from the return type makes it compile.
Furthermore the assignment operator seems to be rewritten as opBinary
instead of opAssign as the docs state:
Vector2f _pos = Vector2f(0.f, 0.f);
yields:
Error: template instance opBinary!("=") matches more than one template
declaration
This also shows another problem. It can't distinguish between these two:
Vector2 opBinary(string op)(ref Vector2 v)
if (op != "*")
{
mixin("return Vector2!(T)( cast(T)(x " ~ op ~ " v.x), cast(T)(y
" ~ op ~ " v.y) );");
}
Vector2 opBinary(string op)(int i)
{
mixin("return Vector2!(T) ( cast(T)(x " ~ op ~ " i), cast(T)(y "
~ op ~ " i) );");
}
even though vec1 + vec2 resp. vec + 5 is unambiguous.
_______________________________________________
dmd-internals mailing list
[email protected]
http://lists.puremagic.com/mailman/listinfo/dmd-internals