Le 27/03/10 18:18, so a écrit :
With this in mind, just one thing bugs me.---- import std.stdio; struct vector(T) { this(T m) { mm = m; } vector!T opBinary(string s)(T m) if(s=="*") { return vector!T(mm * m); } T mm; } void test(T)() { vector!T v = vector!T(0.5); vector!T u = v * 0.3; writeln("u: ", u.mm); } void main() { test!float(); test!double(); test!real(); } ----- This program compiles and runs just fine, but i feel dirty, you see I explicitly stated that opBinary takes a variable of type T, but it accepted 0.3 on all 3 tests, implicitly casted double to T. In C++ world this brings tons of trouble, especially performance problems,
In this case, when is(T==real), you could have a precision problem more than a performance problem. You lose less precision if you always use literals of the most precise type (eg 0.3L).
Performance problems could occur in C++ when your template type is 'long double' (?). But then if 'double' is the most efficient type and if you want performance, use it explictly everywhere.
