Should we add `a * b` for vectors?
Jacob Carlborg
doob at me.com
Thu Oct 5 06:44:27 UTC 2017
On 2017-10-05 00:59, Walter Bright wrote:
> An example would be appreciated. Timon's example requires guesswork as
> to what he intended, because it does not compile in ways unrelated to
> his point.
It's supposed to not compile, because D doesn't have ADL.
$ cat foo.d
module foo;
import std.range: isInputRange;
auto sum(R)(R r)if(isInputRange!R){
typeof(r.front) result;
for(auto t=r.save;!t.empty;t.popFront())
result+=t.front;
return result;
}
$ cat main.d
import foo;
import std.range;
void main(){
int[] a = [1,2,3,4];
import std.stdio: writeln;
writeln(a.front); // ok
writeln(sum(a)); // error, the type is an input range, yet has no front
}
$ dmd foo.d main.d
foo.d(5): Error: no property 'front' for type 'int[]'
foo.d(6): Error: no property 'save' for type 'int[]'
main.d(8): Error: template instance foo.sum!(int[]) error instantiating
Adding the following line to the "foo" module fixes the problem:
import std.range : front, save, empty, popFront;
$ cat foo.d
module foo;
import std.range: isInputRange;
import std.range : front, save, empty, popFront;
auto sum(R)(R r)if(isInputRange!R){
typeof(r.front) result;
for(auto t=r.save;!t.empty;t.popFront())
result+=t.front;
return result;
}
$ dmd foo.d -run main.d
1
10
--
/Jacob Carlborg
More information about the Digitalmars-d
mailing list