+ * This assumes the array was previously sorted. The "cmp" template
+ * argument can be used to specify a custom comparison expression as "a"
+ * string (where a is the element in the array and "b" is the element
+ * passed as a parameter "x"). Using a template to specify the comparison
+ * method is a hack to cope with compilers that have trouble inlining
+ * a delegate (i.e. DMD).
+ *
+ * This can trigger an allocation if the array is not big enough and moves
+ * memory around, so you have to be specially careful if you are taking
+ * pointers into the array's data.