> On 02/08/2012 02:29 AM, H. S. Teoh wrote: >> >> Hi all, >> >> I'm trying to reverse a character array. Why doesn't the following work? >> >> import std.algorithm; >> void main() { >> char[] array = ['a', 'b', 'c']; >> reverse(array); >> } >> >> I get: >> >> Error: template std.algorithm.reverse(Range) if >> (isBidirectionalRange!(Range)&& hasSwappableElements!(Range)) does not >> match any function template declaration >> Error: template std.algorithm.reverse(Range) if >> (isBidirectionalRange!(Range)&& hasSwappableElements!(Range)) cannot deduce >> template function from argument types !()(char[]) >> >> >> T >> > > char[] is handled by Phobos as a range of dchar, ergo it does not have > swappable elements. Apparently there is no template specialisation of > 'reverse' that handles narrow strings, you might want to file an enhancement > request.
That seems correct, the `reverse' function tests for `isBidirectionalRange' and `hasSwappableElements' The following code shows the results import std.range; import std.stdio; import std.conv; void main() { char[] char_array = ['a','b','c']; ubyte[] ubyte_array = ['a','b','c']; writefln("isBidirectonalRange char_array:\t%s", to!string(isBidirectionalRange!(typeof(char_array)))); writefln("isBidirectonalRange ubyte_array:\t%s", to!string(isBidirectionalRange!(typeof(ubyte_array)))); writefln("hasSwappableElements char_array:\t%s", to!string(hasSwappableElements!(typeof(char_array)))); writefln("hasSwappableElements ubyte_array:\t%s", to!string(hasSwappableElements!(typeof(ubyte_array)))); } The output is isBidirectonalRange char_array: true isBidirectonalRange ubyte_array: true hasSwappableElements char_array: false hasSwappableElements ubyte_array: true So if just just need an array of bytes and the `char' semantics are unimportant, then you can just use a ubyte instead. However Timon is correct that there should probably be a narrow string version of `reverse'. James Miller