hi,
i am still struggling getting to grips with tuples, especially typetuples. i
got into this when trying module introspection and the surprise discovery that
__traits(allMembers, .) seems to return a typetuple of strings. (the tuple
article on dlang and philippe's template tutorial do help a bit, but only so
much.)
typetuples seem to live in a shadow world and quite obscurely should be referred
to/passed around via aliases. even though we have alias a = b now i regard this as an
irregularity/oddity of the language, i.e. that they are not treated the same way as
variables/aggregates. anyhow, i started playing a bit putting them in enums anyway.
surprisingly, "storing" tuples and typetuples in enums is accepted by the
compiler. however, while enum tuples seem to behave normal/useful at compile time and run
time, enum'ed typetuples don't like compile time, but seem to behave at runtime. (i
rather would have expected the other way around). examples further below.
so i guess my questions are
a) if we are not allowed to put typetuples in enums, why is it not an error?
b) if enums are supposed to handle typetuples, why is it not working at compile
time?
/det
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
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
}