220 24089 <20160130173553.4898897.39320.4122@gmail.com> article
Path: news.gmane.org!not-for-mail
From: Tony V E <tvaneerd@gmail.com>
Newsgroups: gmane.comp.lang.c++.isocpp.proposals
Subject: Re: Re: RFC: Unpacking tuples to value sequences
Date: Sat, 30 Jan 2016 12:35:53 -0500
Lines: 385
Approved: news@gmane.org
Message-ID: <20160130173553.4898897.39320.4122@gmail.com>
References: <n7jlvp$c44$1@ger.gmane.org>
 <CADvuK0+ecVzhSbXo-1Yr-Awp2OGgR53vqe+6oCigA1wS+nVk1w@mail.gmail.com>
 <n7qu59$1sg$1@ger.gmane.org>
 <29e7b2a0-05fb-46e2-92bc-2a83f8a1e53c@isocpp.org>
 <n85baf$hvg$1@ger.gmane.org>
 <CAFk2RUaAbAJPgNZcCBHKEeKO16WTNK2dzHby=8aD1Sra-HpnUA@mail.gmail.com>
 <n85f6j$lh1$1@ger.gmane.org>
 <CAFk2RUbp=SEBZa_T+KUDqOiEt0T-jid4MxkuLJQK=_=_g3pPng@mail.gmail.com>
 <n85lg5$3jl$1@ger.gmane.org>
 <CADvuK0K1frMJcBik1+wV0HXMQX-+YcfF_X8aV9cm20dgNyFcQg@mail.gmail.com>
Reply-To: std-proposals@isocpp.org
NNTP-Posting-Host: plane.gmane.org
Mime-Version: 1.0
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
X-Trace: ger.gmane.org 1454175379 21592 80.91.229.3 (30 Jan 2016 17:36:19 GMT)
X-Complaints-To: usenet@ger.gmane.org
NNTP-Posting-Date: Sat, 30 Jan 2016 17:36:19 +0000 (UTC)
To: Arthur O'Dwyer <std-proposals@isocpp.org>, std-proposals@isocpp.org
Original-X-From: std-proposals+bncBCUZ5QWKNQIPZ2FTWUCRUBDVMQ5UO@isocpp.org Sat Jan 30 18:36:02 2016
Return-path: <std-proposals+bncBCUZ5QWKNQIPZ2FTWUCRUBDVMQ5UO@isocpp.org>
Envelope-to: gclcip-std-proposals@m.gmane.org
Original-Received: from mail-oi0-f72.google.com ([209.85.218.72])
	by plane.gmane.org with esmtp (Exim 4.69)
	(envelope-from <std-proposals+bncBCUZ5QWKNQIPZ2FTWUCRUBDVMQ5UO@isocpp.org>)
	id 1aPZRG-0005dK-Qy
	for gclcip-std-proposals@m.gmane.org; Sat, 30 Jan 2016 18:35:59 +0100
Original-Received: by mail-oi0-f72.google.com with SMTP id i14sf136050405oig.2
        for <gclcip-std-proposals@m.gmane.org>; Sat, 30 Jan 2016 09:35:58 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=isocpp-org.20150623.gappssmtp.com; s=20150623;
        h=content-type:mime-version:content-transfer-encoding:message-id:date
         :subject:from:in-reply-to:references:to:x-original-sender
         :x-original-authentication-results:reply-to:precedence:mailing-list
         :list-id:x-spam-checked-in-group:list-post:list-help:list-archive
         :list-subscribe:list-unsubscribe;
        bh=Zo6uS5smKQ4dHKBqQ0N6rFHLs2Jilf3K0BtYEKZAqpE=;
        b=fBHH0XA6UMJe4GcKHshIw5o+zpprIZmnoh4Npo+zDYA60MsHNVd41y1/UHB80REDMv
         l0nYIIvDj7gMIWfCLycADeEpoXK+DBW/84PjWfiJYpdvzBK/1F8a1P+5LKCuMBz432yN
         yI70gljfuZsBcHaofuEMiaYm6kAfWHTUJsrMVpXVb6FzBK/jSNj+3QObH68ZwDyxNz9L
         Nip7RR0XgjDiJJeeYBkQpaeVTQIKUH7VArdy+LZ8YiHurOnz1MDvX9GFPJwmCW75p/HE
         nXDhmsXFu5YLkOJUQsDN8R6Dkjv5YEfK8Csti5dBSiDo8J/Fv2dbHq4cBsWkgHeyYl8Z
    
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20130820;
        h=x-gm-message-state:content-type:mime-version
         :content-transfer-encoding:message-id:date:subject:from:in-reply-to
         :references:to:x-original-sender:x-original-authentication-results
         :reply-to:precedence:mailing-list:list-id:x-spam-checked-in-group
         :list-post:list-help:list-archive:list-subscribe:list-unsubscribe;
        bh=Zo6uS5smKQ4dHKBqQ0N6rFHLs2Jilf3K0BtYEKZAqpE=;
        b=MzpJBeS412IQAZRrlAx6WCnC4/lhDzmRx4/2DKdSMGhN2VacI6N+usJvhN8CntFkpi
         t7c4G4q8VRQ9xEa7C16P5FWZle0u10jMnVAVn+H7VRz2QQcjnyPi528BRiVwUwxBD9P1
         LOlJaZHJ2iGt2VYOZ7WMr7HwXpzWI3X/KFsSF+Yf0m7xtTSwUs9P3+1cVOZnHwRVu/6S
         TprjWO6DbVO+83LLgU4gs7vINFizKHcc/Ockm7detkDZp/KQRDReCmk5oY2g7uVP7mTf
         o+5K+Md4CePWFZjY0mp2rRJUbA/X5U8V2YjPc8P5dQs/oXcqXWd6ktq4yAjDtZObXIEs 
X-Gm-Message-State: AG10YOSLX3nGkReChltnkSJO9GA09wrh+itvi5yq/P9jI5llfkd6lW30SsdKKmcziBtWjg==
X-Received: by 10.107.14.141 with SMTP id 135mr15447790ioo.22.1454175357830;
        Sat, 30 Jan 2016 09:35:57 -0800 (PST)
X-BeenThere: std-proposals@isocpp.org
Original-Received: by 10.140.40.164 with SMTP id x33ls3045406qgx.8.gmail; Sat, 30 Jan
 2016 09:35:56 -0800 (PST)
X-Received: by 10.140.166.198 with SMTP id m189mr18719824qhm.35.1454175356464;
        Sat, 30 Jan 2016 09:35:56 -0800 (PST)
Original-Received: from mail-qk0-x22e.google.com (mail-qk0-x22e.google.com. [2607:f8b0:400d:c09::22e])
        by mx.google.com with ESMTPS id e5si23206465qga.29.2016.01.30.09.35.56
        for <std-proposals@isocpp.org>
        (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
        Sat, 30 Jan 2016 09:35:56 -0800 (PST)
Received-SPF: pass (google.com: domain of tvaneerd@gmail.com designates 2607:f8b0:400d:c09::22e as permitted sender) client-ip=2607:f8b0:400d:c09::22e;
Original-Received: by mail-qk0-x22e.google.com with SMTP id x1so36388194qkc.1
        for <std-proposals@isocpp.org>; Sat, 30 Jan 2016 09:35:56 -0800 (PST)
X-Received: by 10.55.82.137 with SMTP id g131mr18468592qkb.66.1454175356273;
        Sat, 30 Jan 2016 09:35:56 -0800 (PST)
Original-Received: from [127.0.0.1] ([24.114.52.72])
        by smtp.gmail.com with ESMTPSA id 63sm9631304qgy.45.2016.01.30.09.35.54
        for <std-proposals@isocpp.org>
        (version=TLSv1/SSLv3 cipher=OTHER);
        Sat, 30 Jan 2016 09:35:54 -0800 (PST)
X-Mailer: BlackBerry Email (10.3.2.2876)
In-Reply-To: <CADvuK0K1frMJcBik1+wV0HXMQX-+YcfF_X8aV9cm20dgNyFcQg@mail.gmail.com>
X-Original-Sender: tvaneerd@gmail.com
X-Original-Authentication-Results: mx.google.com;       spf=pass (google.com:
 domain of tvaneerd@gmail.com designates 2607:f8b0:400d:c09::22e as permitted
 sender) smtp.mailfrom=tvaneerd@gmail.com;       dkim=pass header.i=@gmail.com;
       dmarc=pass (p=NONE dis=NONE) header.from=gmail.com
Precedence: list
Mailing-list: list std-proposals@isocpp.org; contact std-proposals+owners@isocpp.org
List-ID: <std-proposals.isocpp.org>
X-Spam-Checked-In-Group: std-proposals@isocpp.org
X-Google-Group-Id: 399137483710
List-Post: <https://groups.google.com/a/isocpp.org/group/std-proposals/post>, <mailto:std-proposals@isocpp.org>
List-Help: <https://support.google.com/a/isocpp.org/bin/topic.py?topic=25838>, <mailto:std-proposals+help@isocpp.org>
List-Archive: <https://groups.google.com/a/isocpp.org/group/std-proposals/>
List-Subscribe: <https://groups.google.com/a/isocpp.org/group/std-proposals/subscribe>,
 <mailto:std-proposals+subscribe@isocpp.org>
List-Unsubscribe: <mailto:googlegroups-manage+399137483710+unsubscribe@googlegroups.com>,
 <https://groups.google.com/a/isocpp.org/group/std-proposals/subscribe>
Xref: news.gmane.org gmane.comp.lang.c++.isocpp.proposals:24089
Archived-At: <http://permalink.gmane.org/gmane.comp.lang.c++.isocpp.proposals/24089>

<html><head></head><body lang=3D"en-US" style=3D"background-color: rgb(255,=
 255, 255); line-height: initial;">                                        =
                                              <div style=3D"width: 100%; fo=
nt-size: initial; font-family: Calibri, 'Slate Pro', sans-serif, sans-serif=
; color: rgb(31, 73, 125); text-align: initial; background-color: rgb(255, =
255, 255);">IMO</div><div style=3D"width: 100%; font-size: initial; font-fa=
mily: Calibri, 'Slate Pro', sans-serif, sans-serif; color: rgb(31, 73, 125)=
; text-align: initial; background-color: rgb(255, 255, 255);"><br></div><di=
v style=3D"width: 100%; font-size: initial; font-family: Calibri, 'Slate Pr=
o', sans-serif, sans-serif; color: rgb(31, 73, 125); text-align: initial; b=
ackground-color: rgb(255, 255, 255);">mpl::vector is a "type-list"</div><di=
v style=3D"width: 100%; font-size: initial; font-family: Calibri, 'Slate Pr=
o', sans-serif, sans-serif; color: rgb(31, 73, 125); text-align: initial; b=
ackground-color: rgb(255, 255, 255);">std::tuple is a "tuple-like"=E2=80=8E=
 (and also a type-list) - a typelist with values</div><div style=3D"width: =
100%; font-size: initial; font-family: Calibri, 'Slate Pro', sans-serif, sa=
ns-serif; color: rgb(31, 73, 125); text-align: initial; background-color: r=
gb(255, 255, 255);"><br></div><div style=3D"width: 100%; font-size: initial=
; font-family: Calibri, 'Slate Pro', sans-serif, sans-serif; color: rgb(31,=
 73, 125); text-align: initial; background-color: rgb(255, 255, 255);">Can =
we use those terms going forward?</div><div style=3D"width: 100%; font-size=
: initial; font-family: Calibri, 'Slate Pro', sans-serif, sans-serif; color=
: rgb(31, 73, 125); text-align: initial; background-color: rgb(255, 255, 25=
5);"><br></div><div style=3D"width: 100%; font-size: initial; font-family: =
Calibri, 'Slate Pro', sans-serif, sans-serif; color: rgb(31, 73, 125); text=
-align: initial; background-color: rgb(255, 255, 255);"><br></div><div styl=
e=3D"width: 100%; font-size: initial; font-family: Calibri, 'Slate Pro', sa=
ns-serif, sans-serif; color: rgb(31, 73, 125); text-align: initial; backgro=
und-color: rgb(255, 255, 255);">Any place you are doing meta-programming an=
d need a type-list you _could_ use std::tuple, and the value part of tuple =
is ignored without penalty, as you are just doing compile-time type stuff. =
</div><div style=3D"width: 100%; font-size: initial; font-family: Calibri, =
'Slate Pro', sans-serif, sans-serif; color: rgb(31, 73, 125); text-align: i=
nitial; background-color: rgb(255, 255, 255);"><br></div><div style=3D"widt=
h: 100%; font-size: initial; font-family: Calibri, 'Slate Pro', sans-serif,=
 sans-serif; color: rgb(31, 73, 125); text-align: initial; background-color=
: rgb(255, 255, 255);">HOWEVER, it is confusing to the reader. We need an a=
ctual std::typelist</div><div style=3D"width: 100%; font-size: initial; fon=
t-family: Calibri, 'Slate Pro', sans-serif, sans-serif; color: rgb(31, 73, =
125); text-align: initial; background-color: rgb(255, 255, 255);"><br></div=
><div style=3D"width: 100%; font-size: initial; font-family: Calibri, 'Slat=
e Pro', sans-serif, sans-serif; color: rgb(31, 73, 125); text-align: initia=
l; background-color: rgb(255, 255, 255);">At which point mpl::vector become=
s "typelist-like" :-(</div><div style=3D"width: 100%; font-size: initial; f=
ont-family: Calibri, 'Slate Pro', sans-serif, sans-serif; color: rgb(31, 73=
, 125); text-align: initial; background-color: rgb(255, 255, 255);">(ie we =
need to be careful about naming our types and our concepts the same thing o=
r not)</div><div style=3D"width: 100%; font-size: initial; font-family: Cal=
ibri, 'Slate Pro', sans-serif, sans-serif; color: rgb(31, 73, 125); text-al=
ign: initial; background-color: rgb(255, 255, 255);"><br></div><div style=
=3D"width: 100%; font-size: initial; font-family: Calibri, 'Slate Pro', san=
s-serif, sans-serif; color: rgb(31, 73, 125); text-align: initial; backgrou=
nd-color: rgb(255, 255, 255);">And I hate std::get. I wish it was called tu=
ple_get. Particularly if we start to use it as a syntax-sugar extension poi=
nt (like range-for and begin/end)</div><div style=3D"width: 100%; font-size=
: initial; font-family: Calibri, 'Slate Pro', sans-serif, sans-serif; color=
: rgb(31, 73, 125); text-align: initial; background-color: rgb(255, 255, 25=
5);"><br></div><div style=3D"width: 100%; font-size: initial; font-family: =
Calibri, 'Slate Pro', sans-serif, sans-serif; color: rgb(31, 73, 125); text=
-align: initial; background-color: rgb(255, 255, 255);">=E2=80=8EJust my tw=
o cents. Carry on.&nbsp;</div><div style=3D"width: 100%; font-size: initial=
; font-family: Calibri, 'Slate Pro', sans-serif, sans-serif; color: rgb(31,=
 73, 125); text-align: initial; background-color: rgb(255, 255, 255);">Tony=
</div><div style=3D"width: 100%; font-size: initial; font-family: Calibri, =
'Slate Pro', sans-serif, sans-serif; color: rgb(31, 73, 125); text-align: i=
nitial; background-color: rgb(255, 255, 255);"><br></div>                  =
                                                                           =
                                        <div style=3D"width: 100%; font-siz=
e: initial; font-family: Calibri, 'Slate Pro', sans-serif, sans-serif; colo=
r: rgb(31, 73, 125); text-align: initial; background-color: rgb(255, 255, 2=
55);"><br style=3D"display:initial"></div>                                 =
                                                                           =
                                                                           =
            <div style=3D"font-size: initial; font-family: Calibri, 'Slate =
Pro', sans-serif, sans-serif; color: rgb(31, 73, 125); text-align: initial;=
 background-color: rgb(255, 255, 255);">Sent&nbsp;from&nbsp;my&nbsp;BlackBe=
rry&nbsp;portable&nbsp;Babbage&nbsp;Device</div>                           =
                                                                           =
                                                                           =
 <table width=3D"100%" style=3D"background-color:white;border-spacing:0px;"=
> <tbody><tr><td colspan=3D"2" style=3D"font-size: initial; text-align: ini=
tial; background-color: rgb(255, 255, 255);">                           <di=
v style=3D"border-style: solid none none; border-top-color: rgb(181, 196, 2=
23); border-top-width: 1pt; padding: 3pt 0in 0in; font-family: Tahoma, 'BB =
Alpha Sans', 'Slate Pro'; font-size: 10pt;">  <div><b>From: </b>Arthur O'Dw=
yer</div><div><b>Sent: </b>Monday, January 25, 2016 2:37 PM</div><div><b>To=
: </b>std-proposals@isocpp.org</div><div><b>Reply To: </b>std-proposals@iso=
cpp.org</div><div><b>Subject: </b>Re: [std-proposals] Re: RFC: Unpacking tu=
ples to value sequences</div></div></td></tr></tbody></table><div style=3D"=
border-style: solid none none; border-top-color: rgb(186, 188, 209); border=
-top-width: 1pt; font-size: initial; text-align: initial; background-color:=
 rgb(255, 255, 255);"></div><br><div id=3D"_originalContent" style=3D""><di=
v dir=3D"ltr">On Mon, Jan 25, 2016 at 9:20 AM, Matthew Woehlke <span dir=3D=
"ltr">&lt;<a href=3D"mailto:mwoehlke.floss@gmail.com" target=3D"_blank">mwo=
ehlke.floss@gmail.com</a>&gt;</span> wrote:<br><div class=3D"gmail_extra"><=
div class=3D"gmail_quote"><blockquote class=3D"gmail_quote" style=3D"margin=
:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204)=
;border-left-style:solid;padding-left:1ex"><span class=3D"">On 2016-01-25 1=
1:25, Ville Voutilainen wrote:<br>
&gt; On 25 January 2016 at 17:32, Matthew Woehlke &lt;<a href=3D"mailto:mwo=
ehlke.floss@gmail.com">mwoehlke.floss@gmail.com</a>&gt; wrote:<br>&gt;&gt; =
On 2016-01-20 18:13, Arthur O'Dwyer wrote:<br>
&gt;&gt;&gt; would [mpl::vector] *not* be "tuple-like" because you couldn't=
 use<br>
&gt;&gt;&gt; std::get&lt;I&gt; on it at runtime?<br>
&gt;&gt;<br>
&gt;&gt; ...but then, I don't understand why that would be true?<br>
&gt;&gt;<br>
&gt;&gt; Back to that question, yes, the idea as I understand it is that<br=
>
&gt;&gt; "tuple-like" &lt;=3D&gt; "can use get&lt;N&gt;". Why is that an is=
sue?<br>&gt;<br>
&gt; mpl::vector is a container of types, not values. get&lt;N&gt; is a val=
ue-getter.<br>
<br>
</span>Ah. Um... how would you then *use* an mpl::vector in any context tha=
t<br>
you would use a tuple-like? A std::tuple is certainly a value<br>
collection. By extension, a tuple-like is also a value collection.<br></blo=
ckquote><div><br></div><div>As I explained in my original post, it seems ob=
vious that we'd define</div><div><br></div><div><span class=3D"" style=3D"l=
ine-height:1.1em;margin:0px;padding:0px;color:rgb(0,0,221);font-family:Deja=
VuSansMono,'DejaVu Sans Mono',courier,monospace;font-size:13px;white-space:=
nowrap">template</span><span class=3D"" style=3D"line-height:1.1em;margin:0=
px;padding:0px;color:rgb(0,0,128);font-family:DejaVuSansMono,'DejaVu Sans M=
ono',courier,monospace;font-size:13px;white-space:nowrap">&lt;</span><span =
style=3D"color:rgb(0,0,0);font-family:DejaVuSansMono,'DejaVu Sans Mono',cou=
rier,monospace;font-size:13px;white-space:nowrap">&nbsp;</span><span class=
=3D"" style=3D"line-height:1.1em;margin:0px;padding:0px;color:rgb(0,0,221);=
font-family:DejaVuSansMono,'DejaVu Sans Mono',courier,monospace;font-size:1=
3px;white-space:nowrap">class</span><span style=3D"color:rgb(0,0,0);font-fa=
mily:DejaVuSansMono,'DejaVu Sans Mono',courier,monospace;font-size:13px;whi=
te-space:nowrap">...&nbsp;</span><span class=3D"" style=3D"line-height:1.1e=
m;margin:0px;padding:0px;color:rgb(0,0,0);font-family:DejaVuSansMono,'DejaV=
u Sans Mono',courier,monospace;font-size:13px;white-space:nowrap">Types</sp=
an><span style=3D"color:rgb(0,0,0);font-family:DejaVuSansMono,'DejaVu Sans =
Mono',courier,monospace;font-size:13px;white-space:nowrap">&nbsp;</span><sp=
an class=3D"" style=3D"line-height:1.1em;margin:0px;padding:0px;color:rgb(0=
,0,128);font-family:DejaVuSansMono,'DejaVu Sans Mono',courier,monospace;fon=
t-size:13px;white-space:nowrap">&gt;</span><br style=3D"color:rgb(0,0,0);fo=
nt-family:DejaVuSansMono,'DejaVu Sans Mono',courier,monospace;font-size:13p=
x;white-space:nowrap"><p style=3D"margin:0px;line-height:1.1em;padding:0px;=
color:rgb(0,0,0);font-family:DejaVuSansMono,'DejaVu Sans Mono',courier,mono=
space;font-size:13px;white-space:nowrap"><span class=3D"" style=3D"line-hei=
ght:1.1em;margin:0px;padding:0px;color:rgb(0,0,221)">class</span>&nbsp;tupl=
e_size<span class=3D"" style=3D"line-height:1.1em;margin:0px;padding:0px;co=
lor:rgb(0,0,128)">&lt;</span>&nbsp;<span class=3D"" style=3D"text-decoratio=
n:none;color:rgb(0,48,128);background-image:none;line-height:1.1em;margin:0=
px;padding:0px"><a href=3D"http://en.cppreference.com/w/cpp/utility/tuple" =
style=3D"text-decoration:none;color:rgb(0,48,128);background-image:none">mp=
l::<span class=3D"" style=3D"line-height:1.1em;margin:0px;padding:0px">v</s=
pan></a>ector</span><span class=3D"" style=3D"line-height:1.1em;margin:0px;=
padding:0px;color:rgb(0,0,128)">&lt;</span>Types...<span class=3D"" style=
=3D"line-height:1.1em;margin:0px;padding:0px;color:rgb(0,0,128)">&gt;</span=
>&nbsp;<span class=3D"" style=3D"line-height:1.1em;margin:0px;padding:0px;c=
olor:rgb(0,0,128)">&gt;</span><br></p><span style=3D"color:rgb(0,0,0);font-=
family:DejaVuSansMono,'DejaVu Sans Mono',courier,monospace;font-size:13px;w=
hite-space:nowrap">&nbsp;</span><span class=3D"" style=3D"line-height:1.1em=
;margin:0px;padding:0px;color:rgb(0,128,128);font-family:DejaVuSansMono,'De=
jaVu Sans Mono',courier,monospace;font-size:13px;white-space:nowrap">:</spa=
n><span style=3D"color:rgb(0,0,0);font-family:DejaVuSansMono,'DejaVu Sans M=
ono',courier,monospace;font-size:13px;white-space:nowrap">&nbsp;</span><spa=
n class=3D"" style=3D"line-height:1.1em;margin:0px;padding:0px;color:rgb(0,=
0,221);font-family:DejaVuSansMono,'DejaVu Sans Mono',courier,monospace;font=
-size:13px;white-space:nowrap">public</span><span style=3D"color:rgb(0,0,0)=
;font-family:DejaVuSansMono,'DejaVu Sans Mono',courier,monospace;font-size:=
13px;white-space:nowrap">&nbsp;</span><a href=3D"http://en.cppreference.com=
/w/cpp/types/integral_constant" style=3D"text-decoration:none;color:rgb(0,4=
8,128);background-image:none;font-family:DejaVuSansMono,'DejaVu Sans Mono',=
courier,monospace;font-size:13px;white-space:nowrap"><span class=3D"" style=
=3D"line-height:1.1em;margin:0px;padding:0px">std::<span class=3D"" style=
=3D"line-height:1.1em;margin:0px;padding:0px">integral_constant</span></spa=
n></a><span class=3D"" style=3D"line-height:1.1em;margin:0px;padding:0px;co=
lor:rgb(0,0,128);font-family:DejaVuSansMono,'DejaVu Sans Mono',courier,mono=
space;font-size:13px;white-space:nowrap">&lt;</span><a href=3D"http://en.cp=
preference.com/w/cpp/types/size_t" style=3D"text-decoration:none;color:rgb(=
0,48,128);background-image:none;font-family:DejaVuSansMono,'DejaVu Sans Mon=
o',courier,monospace;font-size:13px;white-space:nowrap"><span class=3D"" st=
yle=3D"line-height:1.1em;margin:0px;padding:0px">std::<span class=3D"" styl=
e=3D"line-height:1.1em;margin:0px;padding:0px">size_t</span></span></a><spa=
n style=3D"color:rgb(0,0,0);font-family:DejaVuSansMono,'DejaVu Sans Mono',c=
ourier,monospace;font-size:13px;white-space:nowrap">, sizeof...</span><span=
 class=3D"" style=3D"line-height:1.1em;margin:0px;padding:0px;color:rgb(0,1=
28,0);font-family:DejaVuSansMono,'DejaVu Sans Mono',courier,monospace;font-=
size:13px;white-space:nowrap">(</span><span style=3D"color:rgb(0,0,0);font-=
family:DejaVuSansMono,'DejaVu Sans Mono',courier,monospace;font-size:13px;w=
hite-space:nowrap">Types</span><span class=3D"" style=3D"line-height:1.1em;=
margin:0px;padding:0px;color:rgb(0,128,0);font-family:DejaVuSansMono,'DejaV=
u Sans Mono',courier,monospace;font-size:13px;white-space:nowrap">)</span><=
span class=3D"" style=3D"line-height:1.1em;margin:0px;padding:0px;color:rgb=
(0,0,128);font-family:DejaVuSansMono,'DejaVu Sans Mono',courier,monospace;f=
ont-size:13px;white-space:nowrap">&gt;</span><span style=3D"color:rgb(0,0,0=
);font-family:DejaVuSansMono,'DejaVu Sans Mono',courier,monospace;font-size=
:13px;white-space:nowrap">&nbsp;</span><span class=3D"" style=3D"line-heigh=
t:1.1em;margin:0px;padding:0px;color:rgb(0,128,0);font-family:DejaVuSansMon=
o,'DejaVu Sans Mono',courier,monospace;font-size:13px;white-space:nowrap">{=
</span><span style=3D"color:rgb(0,0,0);font-family:DejaVuSansMono,'DejaVu S=
ans Mono',courier,monospace;font-size:13px;white-space:nowrap">&nbsp;</span=
><span class=3D"" style=3D"line-height:1.1em;margin:0px;padding:0px;color:r=
gb(0,128,0);font-family:DejaVuSansMono,'DejaVu Sans Mono',courier,monospace=
;font-size:13px;white-space:nowrap">}</span><span class=3D"" style=3D"line-=
height:1.1em;margin:0px;padding:0px;color:rgb(0,128,128);font-family:DejaVu=
SansMono,'DejaVu Sans Mono',courier,monospace;font-size:13px;white-space:no=
wrap">;</span><br></div><div><br></div><div>and also</div><div><br></div><p=
re class=3D"" style=3D"padding:0px;border:0px none white;color:rgb(0,0,0);l=
ine-height:1.2em;border-top-left-radius:5px;border-top-right-radius:5px;bor=
der-bottom-right-radius:5px;border-bottom-left-radius:5px;margin-top:0px;ma=
rgin-bottom:0px;width:55em;overflow:auto;font-size:13px;background-image:no=
ne;vertical-align:top;font-family:DejaVuSansMono,'DejaVu Sans Mono',courier=
,monospace!important"><span class=3D"" style=3D"color:rgb(144,144,144)">// =
recursive case</span>
<span class=3D"" style=3D"color:rgb(0,0,221)">template</span><span class=3D=
"" style=3D"color:rgb(0,0,128)">&lt;</span> <a href=3D"http://en.cppreferen=
ce.com/w/cpp/types/size_t" style=3D"text-decoration:none;color:rgb(0,48,128=
);background-image:none"><span class=3D"">std::<span class=3D"">size_t</spa=
n></span></a> I, <span class=3D"" style=3D"color:rgb(0,0,221)">class</span>=
 Head, <span class=3D"" style=3D"color:rgb(0,0,221)">class</span>... <span =
class=3D"">Tail</span> <span class=3D"" style=3D"color:rgb(0,0,128)">&gt;</=
span>
<span class=3D"" style=3D"color:rgb(0,0,221)">struct</span> tuple_element<s=
pan class=3D"" style=3D"color:rgb(0,0,128)">&lt;</span>I, <a href=3D"http:/=
/en.cppreference.com/w/cpp/utility/tuple" style=3D"color:rgb(0,48,128);whit=
e-space:nowrap;text-decoration:none;background-image:none">mpl::<span class=
=3D"" style=3D"line-height:1.1em;margin:0px;padding:0px">v</span></a><span =
style=3D"color:rgb(0,48,128);white-space:nowrap">ector</span><span class=3D=
"" style=3D"color:rgb(0,0,128)">&lt;</span>Head, Tail...<span class=3D"" st=
yle=3D"color:rgb(0,0,128)">&gt;&gt;</span>
    <span class=3D"" style=3D"color:rgb(0,128,128)">:</span> std<span class=
=3D"" style=3D"color:rgb(0,128,128)">::</span><span class=3D"">tuple_elemen=
t</span><span class=3D"" style=3D"color:rgb(0,0,128)">&lt;</span>I<span cla=
ss=3D"" style=3D"color:rgb(0,0,64)">-</span><span class=3D"" style=3D"color=
:rgb(0,0,128)">1</span>, <a href=3D"http://en.cppreference.com/w/cpp/utilit=
y/tuple" style=3D"color:rgb(0,48,128);white-space:nowrap;text-decoration:no=
ne;background-image:none">mpl::<span class=3D"" style=3D"line-height:1.1em;=
margin:0px;padding:0px">v</span></a><span style=3D"color:rgb(0,48,128);whit=
e-space:nowrap">ector</span><span class=3D"" style=3D"color:rgb(0,0,128)">&=
lt;</span>Tail...<span class=3D"" style=3D"color:rgb(0,0,128)">&gt;&gt;</sp=
an> <span class=3D"" style=3D"color:rgb(0,128,0)">{</span> <span class=3D""=
 style=3D"color:rgb(0,128,0)">}</span><span class=3D"" style=3D"color:rgb(0=
,128,128)">;</span>

<span class=3D"" style=3D"color:rgb(144,144,144)">// base case</span>
<span class=3D"" style=3D"color:rgb(0,0,221)">template</span><span class=3D=
"" style=3D"color:rgb(0,0,128)">&lt;</span> <span class=3D"" style=3D"color=
:rgb(0,0,221)">class</span> Head, <span class=3D"" style=3D"color:rgb(0,0,2=
21)">class</span>... <span class=3D"">Tail</span> <span class=3D"" style=3D=
"color:rgb(0,0,128)">&gt;</span>
<span class=3D"" style=3D"color:rgb(0,0,221)">struct</span> tuple_element<s=
pan class=3D"" style=3D"color:rgb(0,0,128)">&lt;</span><span class=3D"" sty=
le=3D"color:rgb(0,0,128)">0</span>, <a href=3D"http://en.cppreference.com/w=
/cpp/utility/tuple" style=3D"color:rgb(0,48,128);white-space:nowrap;text-de=
coration:none;background-image:none">mpl::<span class=3D"" style=3D"line-he=
ight:1.1em;margin:0px;padding:0px">v</span></a><span style=3D"color:rgb(0,4=
8,128);white-space:nowrap">ector</span><span class=3D"" style=3D"color:rgb(=
0,0,128)">&lt;</span>Head, Tail...<span class=3D"" style=3D"color:rgb(0,0,1=
28)">&gt;&gt;</span> <span class=3D"" style=3D"color:rgb(0,128,0)">{</span>
   <span class=3D"" style=3D"color:rgb(0,0,221)">typedef</span> Head type<s=
pan class=3D"" style=3D"color:rgb(0,128,128)">;&nbsp;</span>
</pre><div><span class=3D"" style=3D"font-family:DejaVuSansMono,'DejaVu San=
s Mono',courier,monospace;font-size:13px;color:rgb(0,128,0)">}</span><span =
class=3D"" style=3D"font-family:DejaVuSansMono,'DejaVu Sans Mono',courier,m=
onospace;font-size:13px;color:rgb(0,128,128)">;</span></div><div><br></div>=
<div>The "Sprout" C++14 library includes these definitions today.</div><div=
><a href=3D"https://github.com/bolero-MURAKAMI/Sprout/blob/master/sprout/ty=
pe/boost/mpl/vector.hpp">https://github.com/bolero-MURAKAMI/Sprout/blob/mas=
ter/sprout/type/boost/mpl/vector.hpp<br></a></div><div><br></div><div>Howev=
er, there's no such "obvious" definition for std::get.</div><div>The most p=
lausible one would be</div><div><br></div><div><pre class=3D"" style=3D"fon=
t-size:13px;padding:0px;border:0px none white;color:rgb(0,0,0);line-height:=
1.2em;border-top-left-radius:5px;border-top-right-radius:5px;border-bottom-=
right-radius:5px;border-bottom-left-radius:5px;margin-top:0px;margin-bottom=
:0px;width:55em;overflow:auto;background-image:none;vertical-align:top;font=
-family:DejaVuSansMono,'DejaVu Sans Mono',courier,monospace!important"><spa=
n class=3D"" style=3D"color:rgb(144,144,144)">// please stifle all irreleva=
nt comments re: overload sets and CV-qualifiers</span>
</pre><div><span class=3D"" style=3D"line-height:1.1em;margin:0px;padding:0=
px;color:rgb(0,0,221);font-family:DejaVuSansMono,'DejaVu Sans Mono',courier=
,monospace;font-size:13px;white-space:nowrap">template</span><span class=3D=
"" style=3D"line-height:1.1em;margin:0px;padding:0px;color:rgb(0,0,128);fon=
t-family:DejaVuSansMono,'DejaVu Sans Mono',courier,monospace;font-size:13px=
;white-space:nowrap">&lt;&nbsp;</span><span class=3D"" style=3D"font-family=
:DejaVuSansMono,'DejaVu Sans Mono',courier,monospace;font-size:13px;color:r=
gb(0,48,128);text-decoration:none;background-image:none"><a href=3D"http://=
en.cppreference.com/w/cpp/types/size_t" style=3D"font-family:DejaVuSansMono=
,'DejaVu Sans Mono',courier,monospace;font-size:13px;color:rgb(0,48,128);te=
xt-decoration:none;background-image:none">std::<span class=3D"">size_t</spa=
n></a></span><span class=3D"" style=3D"font-size:13px;line-height:1.1em;mar=
gin:0px;padding:0px;color:rgb(0,0,128);font-family:DejaVuSansMono,'DejaVu S=
ans Mono',courier,monospace;white-space:nowrap">&nbsp;<span style=3D"color:=
rgb(0,0,0)">I</span><span class=3D"" style=3D"line-height:1.1em;margin:0px;=
padding:0px">,</span><span style=3D"color:rgb(0,0,0)">&nbsp;</span><span cl=
ass=3D"" style=3D"line-height:1.1em;margin:0px;padding:0px;color:rgb(0,0,22=
1)">class</span><span style=3D"color:rgb(0,0,0)">...&nbsp;</span><span clas=
s=3D"" style=3D"line-height:1.1em;margin:0px;padding:0px;color:rgb(0,0,0)">=
Types</span><span style=3D"color:rgb(0,0,0)">&nbsp;</span><span class=3D"" =
style=3D"line-height:1.1em;margin:0px;padding:0px">&gt;</span><br></span></=
div><div><p style=3D"margin:0px;line-height:1.1em;padding:0px;font-family:D=
ejaVuSansMono,'DejaVu Sans Mono',courier,monospace;font-size:13px;white-spa=
ce:nowrap"><span style=3D"color:rgb(0,0,0)"><span class=3D"" style=3D"line-=
height:1.1em;margin:0px;padding:0px;color:rgb(0,0,221)">auto</span>&nbsp;ge=
t</span><font color=3D"#000080">(</font><font color=3D"#000000">const&nbsp;=
</font><span class=3D"" style=3D"color:rgb(0,48,128);background-image:none;=
line-height:1.1em;margin:0px;padding:0px"><a href=3D"http://en.cppreference=
..com/w/cpp/utility/tuple" style=3D"color:rgb(0,48,128);text-decoration:none=
;background-image:none">mpl::<span class=3D"" style=3D"line-height:1.1em;ma=
rgin:0px;padding:0px">v</span></a>ector</span><span class=3D"" style=3D"col=
or:rgb(0,0,128);line-height:1.1em;margin:0px;padding:0px">&lt;</span><font =
color=3D"#000000">Types...</font><span class=3D"" style=3D"color:rgb(0,0,12=
8);line-height:1.1em;margin:0px;padding:0px">&gt;&amp;</span><span class=3D=
"" style=3D"color:rgb(0,0,128);line-height:1.1em;margin:0px;padding:0px">)<=
/span></p><p style=3D"margin:0px;line-height:1.1em;padding:0px;font-family:=
DejaVuSansMono,'DejaVu Sans Mono',courier,monospace;font-size:13px;white-sp=
ace:nowrap"><span class=3D"" style=3D"color:rgb(0,0,128);line-height:1.1em;=
margin:0px;padding:0px">&nbsp; &nbsp;-&gt;&nbsp;</span><span class=3D"" sty=
le=3D"text-decoration:none;color:rgb(0,48,128);background-image:none;line-h=
eight:1.1em;margin:0px;padding:0px"><a href=3D"http://en.cppreference.com/w=
/cpp/types/add_reference" style=3D"text-decoration:none;color:rgb(0,48,128)=
;background-image:none">std::<span class=3D"" style=3D"line-height:1.1em;ma=
rgin:0px;padding:0px">add_rvalue_reference</span></a>_t</span><span class=
=3D"" style=3D"line-height:1.1em;margin:0px;padding:0px;color:rgb(0,0,128)"=
>&lt;</span><span class=3D"" style=3D"line-height:1.1em;margin:0px;padding:=
0px"><font color=3D"#000000">tuple_element_t&lt;I,</font></span><span class=
=3D"" style=3D"color:rgb(0,48,128);background-image:none;line-height:1.1em;=
margin:0px;padding:0px"><a href=3D"http://en.cppreference.com/w/cpp/utility=
/tuple" style=3D"color:rgb(0,48,128);text-decoration:none;background-image:=
none">mpl::<span class=3D"" style=3D"line-height:1.1em;margin:0px;padding:0=
px">v</span></a>ector</span><span class=3D"" style=3D"color:rgb(0,0,128);li=
ne-height:1.1em;margin:0px;padding:0px">&lt;</span><font color=3D"#000000">=
Types...</font><span class=3D"" style=3D"color:rgb(0,0,128);line-height:1.1=
em;margin:0px;padding:0px">&gt;</span><span class=3D"" style=3D"line-height=
:1.1em;margin:0px;padding:0px"><font color=3D"#000000">&gt;</font></span><s=
pan class=3D"" style=3D"line-height:1.1em;margin:0px;padding:0px;color:rgb(=
0,0,128)">&gt;</span><span class=3D"" style=3D"line-height:1.1em;margin:0px=
;padding:0px;color:rgb(0,0,0)">;</span></p><pre class=3D"" style=3D"font-si=
ze:13px;padding:0px;border:0px none white;color:rgb(0,0,0);line-height:1.2e=
m;border-top-left-radius:5px;border-top-right-radius:5px;border-bottom-righ=
t-radius:5px;border-bottom-left-radius:5px;margin-top:0px;margin-bottom:0px=
;width:55em;overflow:auto;background-image:none;vertical-align:top;font-fam=
ily:DejaVuSansMono,'DejaVu Sans Mono',courier,monospace!important"><span cl=
ass=3D"" style=3D"color:rgb(144,144,144)">// deliberately left with no impl=
ementation, a la std::declval</span>
</pre></div></div><div><span class=3D"" style=3D"color:rgb(144,144,144)"><b=
r></span></div><div>So what we're left with is: <font face=3D"monospace, mo=
nospace">mpl::vector</font> is "not tuple-like", but it <i>does</i> impleme=
nt <font face=3D"monospace, monospace">tuple_size_v</font> and <font face=
=3D"monospace, monospace">tuple_element_t</font>.</div><div>The only part o=
f the "tuple-like" contract that it fails to have an obvious implementation=
 for is the one part of the "tuple-like" contract <i>whose name doesn't inv=
olve the word "tuple"</i>.</div><div><i>That</i> is why the concept of "tup=
le-like" bothers me.</div><div><br></div><div>=E2=80=93Arthur</div></div></=
div></div>

<p></p>

-- <br>
<br>
--- <br>
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.<br>
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a href=3D"mailto:std-proposals+unsubscribe@isocpp.org">std-proposa=
ls+unsubscribe@isocpp.org</a>.<br>
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org">std-proposals@isocpp.org</a>.<br>
Visit this group at <a href=3D"https://groups.google.com/a/isocpp.org/group=
/std-proposals/">https://groups.google.com/a/isocpp.org/group/std-proposals=
/</a>.<br>
<br><!--end of _originalContent --></div></body></html>

<p></p>

-- <br />
<br />
--- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br />
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a href=3D"mailto:std-proposals+unsubscribe@isocpp.org">std-proposa=
ls+unsubscribe@isocpp.org</a>.<br />
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org">std-proposals@isocpp.org</a>.<br />
Visit this group at <a href=3D"https://groups.google.com/a/isocpp.org/group=
/std-proposals/">https://groups.google.com/a/isocpp.org/group/std-proposals=
/</a>.<br />

.
