Well, i am having hard time explaining, it is not a surprise that you don't understand. To make things clearer, lets forget floats for a seconds and change your code to standard unsigned types.

import std.stdio: writeln;

struct Vector(T) {
    this(T m) { mm = m; }
    Vector opBinary(string op:"*", T2)(T2 m) if(is(T2 == T)) {
        return Vector(mm * m);
    }
    T mm;
}

void test(T)() {
    Vector!T v = Vector!T(5);
    Vector!T u = v * 3;
    writeln("u: ", u.mm);
}

void main() {
    test!ubyte();
    test!ushort();
    test!uint();
    test!ulong();
}

All the tests fail as they should, but check it out, what is wrong with the templates above? You can represent 3, and 5 with all these 4 types, but since 3, and 5 actually is an "int" it fails. Now think about it again with my proposal in mind. Where we add a generic literal, for this situation, which covers entire unsigned types, lets pick a generic literal for them, say... "gu"

void test(T)() {
    Vector!T v = Vector!T(5gu);
    Vector!T u = v * 3gu;
    writeln("u: ", u.mm);
}

Thanks!

On Sun, 28 Mar 2010 12:29:17 +0400, bearophile <[email protected]> wrote:

I don't understand your problem/needs, sorry.

Bye,
bearophile


--
Using Opera's revolutionary e-mail client: http://www.opera.com/mail/

Reply via email to