On Saturday, 9 August 2014 at 19:26:46 UTC, Meta wrote:
On Saturday, 9 August 2014 at 16:39:34 UTC, Vlad Levenfeld
wrote:
I may be misunderstanding the intended semantics of the []
operator but I've come to interpret x[] to mean "give me x as
a range" and this is the meaning I intend when I overload it
in my own structs.
But -
auto z = tuple (1,1,1);
pragma (msg, typeof(z)); // Tuple!(int, int, int)
pragma (msg, typeof(z[])); // (int, int, int)
Tuples are special. Tuple internally keeps a compiler tuple
that it aliases to itself. Compiler tuples have a built-in
"static slice" operator that no other type has. Since Tuple
aliases a compiler tuple to itself internally, doing `z[]`
actually forwards to the compiler tuple's static slice operator
This DIP by Dicebot is relevant:
http://wiki.dlang.org/DIP63
If implemented, it can be used to overload Tuple's slice operator.