class foo { foo(foo f) : x(f.x) { } foo(int y) : x(y) { } int x; }; class bar { bar(bar b) : x(b.x) { } bar(int y) : x(y) { } int x; }; fun operator+(foo a, foo b) -> foo@ { return @foo(a.x + b.x); } fun operator+(bar a, bar b) -> bar@ { return @bar(a.x + b.x); } fun main() -> int@ { let f = @foo(2); let g = @foo(4); let h = @bar(2); let k = @bar(4); return (f + g).x - (h + k).x + 1 - 1; }