On 06.09.2016 17:23, Steven Schveighoffer wrote:
On 9/6/16 10:17 AM, Timon Gehr wrote:
On 06.09.2016 16:12, Steven Schveighoffer wrote:
I'm not sure I agree with the general principal of the DIP though. I've
never liked comma expressions, and this seems like a waste of syntax.
Won't tuples suffice here when they take over the syntax? e.g. (x, y,
z)[$-1]
(Does not work if x, y or z is of type 'void'.)
Let's first stipulate that z cannot be void here, as the context is you
want to evaluate to the result of some expression.
But why wouldn't a tuple of type (void, void, T) be valid?
Because 'void' is special. (Language design error imported from C.)
struct S{
void x; // does not work.
}
There can be no field (or variables) of type 'void'. (void,void,T) has
two fields of type 'void'.
Just fixing the limitations is also not really possible, as e.g. void*
and void[] exploit that 'void' is special and have a non-compositional
meaning.
It could also auto-reduce to just (T).
-Steve
That would fix the limitation, but it is also quite surprising behaviour.