enum and tuples

Jonathan M Davis jmdavisProg at gmx.com
Fri Aug 9 11:29:24 PDT 2013


On Friday, August 09, 2013 01:16:12 captaindet wrote:
> module demo;
> import std.stdio, std.typetuple, std.typecons;
> 
> enum ok = tuple("one", "two", "three");
> pragma(msg, ok, ", ", ok[0]);
> // Tuple("one", "two", "three"), one
> enum er = TypeTuple!("one", "two", "three");
> // pragma(msg, er);
> // Error: variable _er_field_0,1,2 cannot be read at compile time

I'm pretty sure that this is just a bad error message.

> void main(){
> writeln("ok: ", ok, " ok[0]: ", ok[0]);
> // ok: Tuple!(string, string, string)("one", "two", "three") ok[0]: 
one
> writeln("er: ", er, " er[0]: ", er[0]);
> // er: onetwothree er[0]: one
> }

What I expect is happening is that TypeTuples don't convert to string, so the 
pragma fails, but in the writeln, because writeln is variadic, it unrolls the 
TypeTuple, giving you

writeln("er: ", er[0], er[1], er[2]], "er[0]: ", er[0]);

and that works just fine, as each individual element in er converts to string 
just fine (particularly since they actually _are_ strings in this case).

- Jonathan M Davis


More information about the Digitalmars-d-learn mailing list