Overhauling the notion of output range

Steven Schveighoffer schveiguy at yahoo.com
Mon Jul 12 05:44:41 PDT 2010


On Mon, 12 Jul 2010 02:21:25 -0400, Andrei Alexandrescu  
<SeeWebsiteForEmail at erdani.org> wrote:

> On 07/12/2010 12:45 AM, Philippe Sigaud wrote:
>> On Mon, Jul 12, 2010 at 03:17, Andrei Alexandrescu
>> <SeeWebsiteForEmail at erdani.org <mailto:SeeWebsiteForEmail at erdani.org>>
>> wrote:
>>
>>     In related news, there's been this burning desire regarding a
>>     lightweight output range defined as simply a delegate that accepts
>>     const(char)[]. That range is an output range all right, and the way
>>     you output to it is by simply calling the delegate!
>>     <http://www.dsource.org/projects/phobos/browser/trunk/phobos/std/range.d#L227>
>>
>>     http://www.dsource.org/projects/phobos/browser/trunk/phobos/std/range.d#L227
>>
>>
>> It's still early where I live, but... For the callable case, why just
>> accepting E[] instead of any range with E as element? Though, thinking
>> about it, I right now have no idea how to put that into a template
>> constraint, given only R and E.
>>
>> Hmm...
>
> Good point. I haven't thought of it that way - I used arrays as a lingua  
> franca buffer. Your suggestion is interesting. I see a risk of infinite  
> regression in writing the constraint, but the idea warrants more  
> discussion.

Wait, isn't a delegate that accepts a type T an output range of type T?   
Why does the argument have to be an array/range?

For example, a delegate that accepts a string is a range of strings, is it  
not?  Or do you consider it a range of immutable(char)?

For example, I'd expect to be able to use a push_back delegate on an  
array-type of integers as an output range.

-Steve


More information about the Digitalmars-d mailing list