dmd 1.057 and 2.041 release
bearophile
bearophileHUGS at lycos.com
Mon Mar 8 14:03:50 PST 2010
> 2) What's the best way to translate this to the new operator regime?
>
> T foo(T)(T s) if (__traits(hasMember, T, "opAdd")) {
> return s + s;
> }
I have not found a good solution yet. This solution looks buggy (also because fixed-sized arrays have a buggy .init):
import std.stdio: writeln;
struct Foo {
int x;
this(int xx) { this.x = xx; }
Foo opBinary(string s:"+")(Foo other) {
return Foo(this.x * other.x);
}
}
T foo(T)(T s) if (__traits(compiles, {return T.init + T.init;})) {
return s + s; // line 14
}
void main() {
auto f1 = Foo(2);
auto f2 = Foo(3);
writeln(f1 + f2);
writeln(foo(f1));
int[2] a = [1, 2];
writeln(typeid(typeof(a.init))); // prints: int
writeln(foo(a)); // test.d(14): Error: Array operation s + s not implemented
}
Bye,
bearophile
More information about the Digitalmars-d-announce
mailing list