On Wednesday, 25 May 2016 at 19:07:32 UTC, Era Scarecrow wrote:
On Wednesday, 25 May 2016 at 13:27:28 UTC, Chris wrote:
Why can the tuple be iterated with foreach, as in my quick fix, and indexed with tuple[0..], but is not accepted as a range? What are the differences? Is there a way to rangify a tuple?

The tuple is identified/used at compile-time, as such it's a compiler primitive and not a range. Foreach in this case will unroll the loop regardless how it looks. So...

  test(Args...)(Args args) {
  ...
  foreach (const ref i; items)
    itemstrings ~= i.to!string;

Will become: (const and ref are pointless in this example, unless the args are referenced)

  test(int arg1, int arg2, int arg3, int arg4) {
  ...
    itemstrings ~= arg1.to!string;
    itemstrings ~= arg2.to!string;
    itemstrings ~= arg3.to!string;
    itemstrings ~= arg4.to!string;


Trying to use map on it was literally expanding the entire input to map.

Ah, I didn't know that it was just unrolled. That makes sense, of course.

[snip]

Reply via email to