Explicitly Instantiated Function Template won't work as Array
HOSOKAWA Kenchi
hskwk at inter7.jp
Mon Oct 27 01:47:39 PDT 2008
Moritz Warning Wrote:
> On Sat, 25 Oct 2008 02:19:05 -0400, HOSOKAWA Kenchi wrote:
>
> > import std.algorithm;
> > [0,1,2,3].reverse!(int[]); // fails
> > [0,1,2,3].reverse; // works
> >
> >
> > Please let me know the former expression fails due to the language
> > limitation or not.
> >
> >
> > thanks,
>
> http://www.digitalmars.com/d/2.0/phobos/std_algorithm.html#reverse
>
> reverse is no template.
std.algorithm.reverse is a Function template.
definition of std.algorithm.reverse is :
void reverse(alias iterSwap = .iterSwap, Range)(Range r);
thus it is a template, according to "Function Templates" in
http://www.digitalmars.com/d/2.0/template.html
please note these codes are working (and failing) in dmd 2.020
int[] arr = [ 1, 2, 3 ];
reverse!(std.algorithm.iterSwap, int[])(arr); // works.
arr.reverse!(std.algorithm.iterSwap, int[]); // fails
assert(arr == [ 3, 2, 1 ]);
More information about the Digitalmars-d
mailing list