On Mon, 12 Jul 2010 11:05:33 -0400, Andrei Alexandrescu
<seewebsiteforem...@erdani.org> wrote:
On 07/12/2010 09:59 AM, Steven Schveighoffer wrote:
If I always have to do something like this in order to append a single
element:
put(r, (&elem)[0..1]);
No, the library does that. Look here:
http://www.dsource.org/projects/phobos/browser/trunk/phobos/std/range.d#L306
So you're saying it's not ok for an output range to support appending a
single element, but it's ok for put to support appending a single element?
Well, all that will end up happening is cases where appending a single
element is the only possibility will produce overloaded add functions, one
that takes a single element, and one that takes an array. The one that
takes an array will look like this:
foreach(e; arr)
add(e);
I can tell you this for sure, because it's exactly what's in many
dcollections classes.
So what happens when you call put(r, e) for one of these output classes?
Instead of just calling add(e), it calls (add((&e)[0..1])) which in turn
goes through some needless loop, which then ends up calling add(e). I
don't see why this is preferable.
-Steve