On Mon, 08 Aug 2011 15:47:36 -0400, Christian Manning <[email protected]> wrote:

Philippe Sigaud wrote:

Hi Chris,

import std.typecons;
void main() {
auto x = 1;
Tuple!(int,short) a;
a[0] = 1;
a[x] = 2;
}

If I use a value instead of a variable ie. a[1] = 2; it compiles fine.

The index need to be a compile-time constant, you cannot index a tuple
with a runtime value.
Try using

enum x = 1;


Philippe

Ah I didn't know this, thanks. That makes a tuple pretty useless for what I was doing now as I was reading the "index" in from a file. Guess I'll find
another way round it.

You still can do it, but you have to do it by still using compile-time constants as indexes:

auto x = 1;
Tuple!(int, short) a;

a[0] = 1;
switch(x)
{
case 0:
   a[0] = 2;
   break;
case 1:
   a[1] = 2;
   break;
default:
   assert(0, "does not compute!");
}

the point is, the compiler has no idea what the lvalue expression's type should be when you do:

a[x] = 1;

is it short or int?

so the compiler must *know* what type x is at compile time in order for this to be valid.

-Steve

Reply via email to