https://issues.dlang.org/show_bug.cgi?id=16302
Issue ID: 16302 Summary: Add opStaticIndex that takes compile-time indices Product: D Version: D2 Hardware: All URL: http://dlang.org/ OS: All Status: NEW Severity: enhancement Priority: P3 Component: dmd Assignee: nob...@puremagic.com Reporter: e...@weka.io Wanted to implement a RefTuple which keeps pointers to elements inside, and allows tuple[index] to return a different type for each index, while converting an internally-stored pointer to a result ref. However, opIndex currently takes only runtime indices. I suggest having: x[i] where 'i' is a compile-time value, compile to: x.opStaticIndex!i() and if this fails to resolve to a method, fall back to x.opIndex(i) (similar to the way foreach method resolution uses fallbacks from opApply to range interface). Of course if 'i' is a run-time value, it compiles to x.opIndex(i) as before. The compiler could disallow defining both an opStaticIndex and an opIndex simultaneously to guarantee saner behavior: int x = 1; enum y = 1; assert(foo[x] == foo[y]); This makes tuples less magical, and allows enriching the library with interesting tuple-like types. --