On Monday, 24 September 2012 at 10:20:01 UTC, Nick Sabalausky
wrote:
On Mon, 24 Sep 2012 10:47:38 +0200
"foobar" <[email protected]> wrote:
Nope.
One of the ways in math to "build" the positive numbers based
on set theory is via singletons:
n := |tuple of empty tuples|
so "1" is defined as { {} } whereas "0" is simply {}. That
does not work with the above suggestion. Now, I realize this
is an arguably convoluted math example but it does show that
the treating { {} } as {} is limiting the expressive power of
tuples.
And int's are limiting compared to mathematical integers. So
what?
So ok, maybe this is limiting from a theoretical standpoint. But
practically speaking? I dunno. We're not making tuples to
emulate
set theory here, we're just looking for ad-hoc anonymous
structs.
Besides, I only said they were logically the same thing, not
mechanically. I'm only suggesting that a one-element tuple be
implicitly
convertible to/from the type of its element. So there would
likely
still be the different types, it just makes sense that you
should be
able to use one as the other.
I'm a bit confused about what is specifically proposed here:
- Is the suggestion to limit tuples to >1 elements? *This* I'm
against for practical as well as completeness reasons. Andrei
already provided one example, and another would be a proper unit
type. e.g.
void foo(int a) {}
void bar (int b) { return foo(b); }
- Is the suggestion to allow implicit conversion between (T) and
T?
This brings almost no benefit - (you save two keystrokes?) and
adds a special case to the language. The added complexity really
does not justify this.