Limitations of C++ range proposal

Ali Çehreli acehreli at
Mon Sep 16 21:47:08 UTC 2019

On 09/16/2019 12:53 PM, jmh530 wrote:
 > I ran across this blog post on limitations of the C++ range proposal [1]
 > and wrote up a simple D version in virtually no time.

I had fun implementing the following version, which should not create 
any array:

import std.stdio;
import std.range;

auto interspersed(R, D)(R r, D delim) {
   struct MyRoundRobin {
     bool doDelim = false;

     auto empty() {
       return r.empty;

     auto front() {
       return (doDelim ? delim : r.front);

     auto popFront() {
       if (!doDelim) {
       doDelim = !doDelim;

   return MyRoundRobin();

void main(){
   auto r = 10.iota.interspersed(42);
   writefln("%(%s %)", r);

std.range.roundRobin came close but it does not support 'StoppingPolicy' 
like 'zip' and 'lockstep' do.


P.S. I ran into a checked format string issue and created the following 
bug report:

More information about the Digitalmars-d mailing list