www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - Uniform call syntax for operator overloads

reply Tomek =?UTF-8?B?U293acWEc2tp?= <just ask.me> writes:
This doesn't work:

int opIndex(int[][] m, uint i, uint j) { return m[i][j]; }

unittest {
    auto m = [[9,8], [2,3]];
    auto a = m[0,1];
}

It's so by design or by bug?


Tomek

p.s. Where on D page is uniform call syntax documented? Couldn't find it in 
functions section.
Jul 25 2010
parent reply bearophile <bearophileHUGS lycos.com> writes:
Tomek S.:

 This doesn't work:
 int opIndex(int[][] m, uint i, uint j) { return m[i][j]; }
That's cute, but in D overloaded operator can be defined inside structs/classes/unions only (this is different from C++). Bye, bearophile
Jul 25 2010
parent reply Tomek =?UTF-8?B?U293acWEc2tp?= <just ask.me> writes:
bearophile wrote:

 Tomek S.:
 
 This doesn't work:
 int opIndex(int[][] m, uint i, uint j) { return m[i][j]; }
That's cute, but in D overloaded operator can be defined inside structs/classes/unions only (this is different from C++).
Yeah, I know, but why? What bad would happen if operators could be written down with functions-as-members syntax? Tomek
Jul 25 2010
parent Daniel Keep <daniel.keep.lists gmail.com> writes:
Tomek SowiƄski wrote:
 bearophile wrote:
 
 Tomek S.:

 This doesn't work:
 int opIndex(int[][] m, uint i, uint j) { return m[i][j]; }
That's cute, but in D overloaded operator can be defined inside structs/classes/unions only (this is different from C++).
Yeah, I know, but why? What bad would happen if operators could be written down with functions-as-members syntax? Tomek
Universal Call Syntax is actually just a really old bug in method lookup for arrays that was never fixed on account of being useful. That it doesn't work for operators is hardly surprising.
Jul 27 2010