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

Reply via email to