IMHO I believe this could be implemented either in the compiler, druntime or phobos.
Example enum I { a=3,b=4,c=5 } int[I] x = [3,4,5]; assert(x[I.a] == 3); assert(x[I.b] == 4); assert(x[I.c] == 5); Iteration through foreach (i, e; x) {} where i is of type I and e is of type int