[Issue 24570] printing a range of ranges consumes sub-ranges
    d-bugmail at puremagic.com 
    d-bugmail at puremagic.com
       
    Tue May 28 06:05:31 UTC 2024
    
    
  
https://issues.dlang.org/show_bug.cgi?id=24570
Salih Dincer <salihdb at hotmail.com> changed:
           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |salihdb at hotmail.com
--- Comment #2 from Salih Dincer <salihdb at hotmail.com> ---
(In reply to Steven Schveighoffer from comment #1)
> A further note is that an array of arrays is not consumed when printed --
> because formatValue has a specialized case for that.
If you do the following instead of `auto save() => return this;`, the problem
is solved:
```
struct R
{
  wchar* ptr;
  size_t len;
  this(T)(T[] range)
  {
    ptr = cast(wchar*)range.ptr;
    len = range.length;
  }
  auto empty() => len == 0;
  auto front() => *ptr++;
  auto popFront() => len--;
  auto save()
  {
    auto r = R([]);
    r.len = len;
    r.ptr = ptr;
    return r;
  }
}
void main()
{
  auto c = ['€', '₺', '₽'];
  auto r = R(c);
  auto arr = [r, r, r];
  assert(!arr.empty);
  import std.conv : text;
  auto str = arr.text; // "€₺₽"
  assert(!arr.empty);
}
```
--
    
    
More information about the Digitalmars-d-bugs
mailing list