Peter Alexander: > As Michel pointed out, a..b:c is ambiguous. > > auto foo = [ 1..10 : 2, 2..20 : 3 ]; > > Is foo an AA of ranges to ints, or an array of stepped ranges?
Lazy strided intervals as associative array keys is not a common need. But there are few other situations: auto r = pred ? 1..10 : 2 : 2..20 : 3; Where the range syntax is not usable you may use the function from Phobos as fall-back: auto r = pred ? iota(1,10,2) : iota(2,20,3); A possible alternative is to require parentheses where the syntax is ambiguous: auto foo = [(1..10 : 2), (2..20 : 3)]; auto r = pred ? (1..10 : 2) : (2..20 : 3); Another alternative is to use .. to separate the stride too: auto foo = [1..10..2, 2..20..3]; auto r = pred ? 1..10..2 : 2..20..3; In this post I have assumed that the interval syntax is usable on integral values only. For floating point ones you use iota again: iota(1.0, 10.0, 0.5) Bye, bearophile
