On Wed, 12 Jun 2013 10:01:59 +0200, Zhenya <zh...@list.ru> wrote:

Hi!

I was just surprised when realized, that this code compiles and runs:

import std.typetuple;
import std.stdio;

void main()
{
  auto foo = TypeTuple!("foo","bar");
writeln(typeid(typeof(foo)));
  writeln(foo);
}

If I were compiler expert,I'd say that it's a bug.But I am not)
So, can anybody explain why it's work?

It is the equivalent of:

  TypeTuple!(string, string) foo;
  foo[0] = "foo";
  foo[1] = "bar";

The ability to have a tupetuple as a variable is very useful - if that
had not been possible one would need something akin to this:

struct Tuple(T...) {
    T[0] head;
    static if (T.length) {
        Tuple!(T[1..$]) tail;
    }
}

And to access the third element of a tuple one'd need to write:

    myTuple.tail.tail.head = "foo";

Clearly this is suboptimal, so D has better ways of doing such things.

--
Simen

Reply via email to