220 26329 <0e2ea7f0-ee5e-44be-bade-413381bbb12b@isocpp.org> article
Path: news.gmane.org!not-for-mail
From: Sergey Vidyuk <sir.vestnik@gmail.com>
Newsgroups: gmane.comp.lang.c++.isocpp.proposals
Subject: Re: statement folding on variadic templates
 parameters pack
Date: Mon, 13 Jun 2016 22:02:03 -0700 (PDT)
Lines: 266
Approved: news@gmane.org
Message-ID: <0e2ea7f0-ee5e-44be-bade-413381bbb12b@isocpp.org>
References: <1e3daa7c-e10a-4589-8118-26f47bc1a0df@isocpp.org>
 <f11d3266-3407-4c00-a578-5d07beeb1071@isocpp.org>
 <b967b669-6c28-4295-b5c8-6a2f2ed7a174@isocpp.org>
 <9c425e18-e592-4cfd-9e41-b37b212a6b9d@isocpp.org>
 <1015518c-c0e4-4397-b946-df7834a2c3c0@isocpp.org>
 <71f9f321-59e4-452e-84d1-74d2c476c2de@isocpp.org>
Reply-To: std-proposals@isocpp.org
NNTP-Posting-Host: plane.gmane.org
Mime-Version: 1.0
Content-Type: multipart/mixed; 
	boundary="----=_Part_2311_1309869163.1465880523561"
X-Trace: ger.gmane.org 1465880528 19081 80.91.229.3 (14 Jun 2016 05:02:08 GMT)
X-Complaints-To: usenet@ger.gmane.org
NNTP-Posting-Date: Tue, 14 Jun 2016 05:02:08 +0000 (UTC)
Cc: inkwizytoryankes@gmail.com
To: ISO C++ Standard - Future Proposals <std-proposals@isocpp.org>
Original-X-From: std-proposals+bncBCB6HO5JRMARBTM7725AKGQEZF3RCQY@isocpp.org Tue Jun 14 07:02:08 2016
Return-path: <std-proposals+bncBCB6HO5JRMARBTM7725AKGQEZF3RCQY@isocpp.org>
Envelope-to: gclcip-std-proposals@m.gmane.org
Original-Received: from mail-io0-f200.google.com ([209.85.223.200])
	by plane.gmane.org with esmtp (Exim 4.69)
	(envelope-from <std-proposals+bncBCB6HO5JRMARBTM7725AKGQEZF3RCQY@isocpp.org>)
	id 1bCgUJ-0003Sh-38
	for gclcip-std-proposals@m.gmane.org; Tue, 14 Jun 2016 07:02:07 +0200
Original-Received: by mail-io0-f200.google.com with SMTP id o127sf126393941iod.1
        for <gclcip-std-proposals@m.gmane.org>; Mon, 13 Jun 2016 22:02:06 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=isocpp-org.20150623.gappssmtp.com; s=20150623;
        h=date:from:to:cc:message-id:in-reply-to:references:subject
         :mime-version:x-original-sender:reply-to:precedence:mailing-list
         :list-id:x-spam-checked-in-group:list-post:list-help:list-archive
         :list-subscribe:list-unsubscribe;
        bh=VFM0rlXnFbMi2ivBahqnMTKXVD8fHWPKL/49ZM4mdBs=;
        b=eWMoQEsxVFVmXWIxu8tT3pEZ4HOQl49egCAqBWrdr/sqifNFxBC9UjEjOYo7olsRf4
         SyAhxd9p/D2ycMotH11CInE8qV2rjOJAtENVQLk7tqSOZsbkbm/dMsLOW7wGyQFzWC/v
         LZxndeZCYGRIKtdjg0Kl89KS7Ef0CXO2+S4hNFxjcpH/HDAqnCmcj+CKYo4iNqrCdkrP
         XXYaXsRh3EFWlyQbIcql2IDhe30tF2PRvQHloOnWmF3Mnwm6+Ttp58XqAZ4KwxeTm8Xo
         EpOnlq+Ol7Ye/BiAIE6qyPIp2uVD5ZDa1wKXMBzsOrbhSImbtds4vNneU+kAC600UV7x
         QUpA==
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20120113;
        h=date:from:to:cc:message-id:in-reply-to:references:subject
         :mime-version:x-original-sender:reply-to:precedence:mailing-list
         :list-id:x-spam-checked-in-group:list-post:list-help:list-archive
         :list-subscribe:list-unsubscribe;
        bh=VFM0rlXnFbMi2ivBahqnMTKXVD8fHWPKL/49ZM4mdBs=;
        b=ysQn8woOD9gFm2RlMBJcACEvtFUJtIxWs+MoBbOKIqJxQO2T5G+QAQKmt1gYZ+vzsb
         CtugFvrX/h6x7+pgWcObFpnaEErgJyVtfM4lRKMpqq4GzuwauaMKMe9Vs6Xcx9g93yOM
         rF3s347QTtuhe3rj0CQ8IvIAwMrH4+SpJVRTQ6FvNNpw19ffnPznpLzCSEG2t7G5Uudc
         bI0WWUbepmFkomFu9gyYoRNvvL7vDBFrMrhRBkL2kHuuuPMp8FPFwI1puSa7jHnzWzmx
         KwlPnmmOt8B1vr90NKa7XChtbfMiassrtPU0hR1lxp8pfZA6VgVgU5iyZuwt5X+twlpD
         1L+g==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20130820;
        h=x-gm-message-state:date:from:to:cc:message-id:in-reply-to
         :references:subject:mime-version:x-original-sender:reply-to
         :precedence:mailing-list:list-id:x-spam-checked-in-group:list-post
         :list-help:list-archive:list-subscribe:list-unsubscribe;
        bh=VFM0rlXnFbMi2ivBahqnMTKXVD8fHWPKL/49ZM4mdBs=;
        b=g3sz8bHTpOR3tj42aMwTyGEdrThHqwfkTpV7RQvG0WdCkniMSBEFP+kkaHupmaZ6m5
         8Qxa1v645sAdMLPs/6pZl1bkCpvs6T65KvgDhaM+qsaFBmSgqo2SenoJrX3RwNod1hJ4
         53U0sC6fRO2cBxwmP0XVKgGysoRp2ZexU+Tx+xdhqZaFZti8Tdr0h4MtMoxBE0+Wpv+5
         CZAy9XzNmwRGa9ooIYKE7sxGtfTS6f5hhpcwidTsY1YQc9RRZelK0HVnOm/ZoESxiqQb
         uEmjaIaZFS9PTSjsylPAWIQzIuwEq35C73t+snIVgbsvkCxqvB2AmlnEuHFbUJr8E6A/
         kADg==
X-Gm-Message-State: ALyK8tKJEnhnuNsXK7a7Uma5P+p7PnLeUu8IUuWWo8bmkmR2Y4a2GoI6S85f+h33eSSUMw==
X-Received: by 10.157.35.77 with SMTP id k13mr14563824otd.17.1465880526007;
        Mon, 13 Jun 2016 22:02:06 -0700 (PDT)
X-BeenThere: std-proposals@isocpp.org
Original-Received: by 10.107.148.19 with SMTP id w19ls1990126iod.2.gmail; Mon, 13 Jun
 2016 22:02:04 -0700 (PDT)
X-Received: by 10.36.87.213 with SMTP id u204mr79178ita.10.1465880524855;
        Mon, 13 Jun 2016 22:02:04 -0700 (PDT)
In-Reply-To: <71f9f321-59e4-452e-84d1-74d2c476c2de@isocpp.org>
X-Original-Sender: sir.vestnik@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:26329
Archived-At: <http://permalink.gmane.org/gmane.comp.lang.c++.isocpp.proposals/26329>

------=_Part_2311_1309869163.1465880523561
Content-Type: multipart/alternative; 
	boundary="----=_Part_2312_420184387.1465880523564"

------=_Part_2312_420184387.1465880523564
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable



=D0=B2=D1=82=D0=BE=D1=80=D0=BD=D0=B8=D0=BA, 14 =D0=B8=D1=8E=D0=BD=D1=8F 201=
6 =D0=B3., 5:18:24 UTC+6 =D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=
=D1=82=D0=B5=D0=BB=D1=8C inkwizyt...@gmail.com=20
=D0=BD=D0=B0=D0=BF=D0=B8=D1=81=D0=B0=D0=BB
>
>
> My idea was that we have concrete template type with some parameters. The=
n=20
> `for constexpr` will extract parameters of this template. This is why=20
> template alias are skipped. They can never by concrete. They more like ty=
pe=20
> to type functions that templates.=20
>

Ok. Got the point on alias templates. But it actually means that this=20
feature is only usable when it's strong guarantie that template you are=20
using not an alias to nontrivial implementation. For example there might be=
=20
some problems with your examples if std::tuple is defined in such way:

template<typename... L>
using tuple =3D detail::tuple_impl<sizeof...(L), L...>;

grbbing template by for constexpr seems only be usable together with some=
=20
template class designed to be used for grabbing parameters. Something like:

template<typename... L>
struct types_list {};

which has strong guarantie that no extra types or nontype argument will=20
apear when it's used in "for constexpr". I think that D-like code I've=20
posted above solves the same issue in much better way:


> template<typename... L>
> struct test {
>     using params =3D L;
> };
>
> int main() {
>     for constexpr (typename T, test<char, int>::params) {
>         std::cout << sizeof(T) << std::endl;
>     }
> }
>
> =20
Thre are two different language constructs designed for their own purpuses=
=20
which allows to have type list to iterate over in nontemplate function when=
=20
those features are used together. From my personal point of view this way=
=20
is much better than grabbing template parameters unless there are some use=
=20
cases which are not just "some way to have iterable typelist in=20
non-template code". Do you have some example usecases for the feature?

-- Sergey

--=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/0e2ea7f0-ee5e-44be-bade-413381bbb12b%40isocpp.or=
g.

------=_Part_2312_420184387.1465880523564
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><br><br>=D0=B2=D1=82=D0=BE=D1=80=D0=BD=D0=B8=D0=BA, 14 =D0=
=B8=D1=8E=D0=BD=D1=8F 2016 =D0=B3., 5:18:24 UTC+6 =D0=BF=D0=BE=D0=BB=D1=8C=
=D0=B7=D0=BE=D0=B2=D0=B0=D1=82=D0=B5=D0=BB=D1=8C inkwizyt...@gmail.com =D0=
=BD=D0=B0=D0=BF=D0=B8=D1=81=D0=B0=D0=BB<blockquote class=3D"gmail_quote" st=
yle=3D"margin: 0;margin-left: 0.8ex;border-left: 1px #ccc solid;padding-lef=
t: 1ex;"><div dir=3D"ltr"><div><br>My idea was that we have concrete templa=
te type with some parameters. Then `for constexpr` will extract parameters =
of this template. This is why template alias are skipped. They can never by=
 concrete. They more like type to type functions that templates. </div></di=
v></blockquote><div><br>Ok. Got the point on alias templates. But it actual=
ly means that this feature is only usable when it&#39;s strong guarantie th=
at template you are using not an alias to nontrivial implementation. For ex=
ample there might be some problems with your examples if std::tuple is defi=
ned in such way:<br><br><div class=3D"prettyprint" style=3D"background-colo=
r: rgb(250, 250, 250); border-color: rgb(187, 187, 187); border-style: soli=
d; border-width: 1px; word-wrap: break-word;"><code class=3D"prettyprint"><=
div class=3D"subprettyprint"><span style=3D"color: #008;" class=3D"styled-b=
y-prettify">template</span><span style=3D"color: #660;" class=3D"styled-by-=
prettify">&lt;</span><span style=3D"color: #008;" class=3D"styled-by-pretti=
fy">typename</span><span style=3D"color: #660;" class=3D"styled-by-prettify=
">...</span><span style=3D"color: #000;" class=3D"styled-by-prettify"> L</s=
pan><span style=3D"color: #660;" class=3D"styled-by-prettify">&gt;</span><s=
pan style=3D"color: #000;" class=3D"styled-by-prettify"><br></span><span st=
yle=3D"color: #008;" class=3D"styled-by-prettify">using</span><span style=
=3D"color: #000;" class=3D"styled-by-prettify"> tuple </span><span style=3D=
"color: #660;" class=3D"styled-by-prettify">=3D</span><span style=3D"color:=
 #000;" class=3D"styled-by-prettify"> detail</span><span style=3D"color: #6=
60;" class=3D"styled-by-prettify">::</span><span style=3D"color: #000;" cla=
ss=3D"styled-by-prettify">tuple_impl</span><span style=3D"color: #660;" cla=
ss=3D"styled-by-prettify">&lt;</span><span style=3D"color: #008;" class=3D"=
styled-by-prettify">sizeof</span><span style=3D"color: #660;" class=3D"styl=
ed-by-prettify">...(</span><span style=3D"color: #000;" class=3D"styled-by-=
prettify">L</span><span style=3D"color: #660;" class=3D"styled-by-prettify"=
>),</span><span style=3D"color: #000;" class=3D"styled-by-prettify"> L</spa=
n><span style=3D"color: #660;" class=3D"styled-by-prettify">...&gt;;</span>=
<span style=3D"color: #000;" class=3D"styled-by-prettify"><br></span></div>=
</code></div><br>grbbing template by for constexpr seems only be usable tog=
ether with some template class designed to be used for grabbing parameters.=
 Something like:<br><br><div class=3D"prettyprint" style=3D"background-colo=
r: rgb(250, 250, 250); border-color: rgb(187, 187, 187); border-style: soli=
d; border-width: 1px; word-wrap: break-word;"><code class=3D"prettyprint"><=
div class=3D"subprettyprint"><span style=3D"color: #008;" class=3D"styled-b=
y-prettify">template</span><span style=3D"color: #660;" class=3D"styled-by-=
prettify">&lt;</span><span style=3D"color: #008;" class=3D"styled-by-pretti=
fy">typename</span><span style=3D"color: #660;" class=3D"styled-by-prettify=
">...</span><span style=3D"color: #000;" class=3D"styled-by-prettify"> L</s=
pan><span style=3D"color: #660;" class=3D"styled-by-prettify">&gt;</span><s=
pan style=3D"color: #000;" class=3D"styled-by-prettify"><br></span><span st=
yle=3D"color: #008;" class=3D"styled-by-prettify">struct</span><span style=
=3D"color: #000;" class=3D"styled-by-prettify"> types_list </span><span sty=
le=3D"color: #660;" class=3D"styled-by-prettify">{};</span><span style=3D"c=
olor: #000;" class=3D"styled-by-prettify"><br></span></div></code></div><br=
>which has strong guarantie that no extra types or nontype argument will ap=
ear when it&#39;s used in &quot;for constexpr&quot;. I think that D-like co=
de I&#39;ve posted above solves the same issue in much better way:<br><br><=
blockquote style=3D"margin: 0px 0px 0px 0.8ex; border-left: 1px solid rgb(2=
04, 204, 204); padding-left: 1ex;" class=3D"gmail_quote"><br><div class=3D"=
prettyprint" style=3D"background-color: rgb(250, 250, 250); border-color: r=
gb(187, 187, 187); border-style: solid; border-width: 1px; word-wrap: break=
-word;"><code class=3D"prettyprint"><div class=3D"subprettyprint"><div styl=
e=3D"background-color:rgb(250,250,250);border-color:rgb(187,187,187);border=
-style:solid;border-width:1px;word-wrap:break-word"><code><div><span style=
=3D"color:#008"><span style=3D"color: #008;" class=3D"styled-by-prettify">t=
emplate</span></span><span style=3D"color:#660"><span style=3D"color: #660;=
" class=3D"styled-by-prettify">&lt;</span></span><span style=3D"color:#008"=
><span style=3D"color: #008;" class=3D"styled-by-prettify">typename</span><=
/span><span style=3D"color:#660"><span style=3D"color: #660;" class=3D"styl=
ed-by-prettify">...</span></span><span style=3D"color:#000"><span style=3D"=
color: #000;" class=3D"styled-by-prettify"> L</span></span><span style=3D"c=
olor:#660"><span style=3D"color: #660;" class=3D"styled-by-prettify">&gt;</=
span></span><span style=3D"color:#000"><span style=3D"color: #000;" class=
=3D"styled-by-prettify"><br></span></span><span style=3D"color:#008"><span =
style=3D"color: #008;" class=3D"styled-by-prettify">struct</span></span><sp=
an style=3D"color:#000"><span style=3D"color: #000;" class=3D"styled-by-pre=
ttify"> test </span></span><span style=3D"color:#660"><span style=3D"color:=
 #660;" class=3D"styled-by-prettify">{</span></span><span style=3D"color:#0=
00"><span style=3D"color: #000;" class=3D"styled-by-prettify"><br>=C2=A0 =
=C2=A0 </span></span><span style=3D"color:#008"><span style=3D"color: #008;=
" class=3D"styled-by-prettify">using</span></span><span style=3D"color:#000=
"><span style=3D"color: #000;" class=3D"styled-by-prettify"> </span></span>=
<span style=3D"color:#008"><span style=3D"color: #008;" class=3D"styled-by-=
prettify">params</span></span><span style=3D"color:#000"><span style=3D"col=
or: #000;" class=3D"styled-by-prettify"> </span></span><span style=3D"color=
:#660"><span style=3D"color: #660;" class=3D"styled-by-prettify">=3D</span>=
</span><span style=3D"color:#000"><span style=3D"color: #000;" class=3D"sty=
led-by-prettify"> L</span></span><span style=3D"color:#660"><span style=3D"=
color: #660;" class=3D"styled-by-prettify">;</span></span><span style=3D"co=
lor:#000"><span style=3D"color: #000;" class=3D"styled-by-prettify"><br></s=
pan></span><span style=3D"color:#660"><span style=3D"color: #660;" class=3D=
"styled-by-prettify">};</span></span><span style=3D"color:#000"><span style=
=3D"color: #000;" class=3D"styled-by-prettify"><br><br></span></span><span =
style=3D"color:#008"><span style=3D"color: #008;" class=3D"styled-by-pretti=
fy">int</span></span><span style=3D"color:#000"><span style=3D"color: #000;=
" class=3D"styled-by-prettify"> main</span></span><span style=3D"color:#660=
"><span style=3D"color: #660;" class=3D"styled-by-prettify">()</span></span=
><span style=3D"color:#000"><span style=3D"color: #000;" class=3D"styled-by=
-prettify"> </span></span><span style=3D"color:#660"><span style=3D"color: =
#660;" class=3D"styled-by-prettify">{</span></span><span style=3D"color:#00=
0"><span style=3D"color: #000;" class=3D"styled-by-prettify"><br>=C2=A0 =C2=
=A0 </span></span><span style=3D"color:#008"><span style=3D"color: #008;" c=
lass=3D"styled-by-prettify">for</span></span><span style=3D"color:#000"><sp=
an style=3D"color: #000;" class=3D"styled-by-prettify"> </span></span><span=
 style=3D"color:#008"><span style=3D"color: #008;" class=3D"styled-by-prett=
ify">constexpr</span></span><span style=3D"color:#000"><span style=3D"color=
: #000;" class=3D"styled-by-prettify"> </span></span><span style=3D"color:#=
660"><span style=3D"color: #660;" class=3D"styled-by-prettify">(</span></sp=
an><span style=3D"color:#008"><span style=3D"color: #008;" class=3D"styled-=
by-prettify">typename</span></span><span style=3D"color:#000"><span style=
=3D"color: #000;" class=3D"styled-by-prettify"> T</span></span><span style=
=3D"color:#660"><span style=3D"color: #660;" class=3D"styled-by-prettify">,=
</span></span><span style=3D"color:#000"><span style=3D"color: #000;" class=
=3D"styled-by-prettify"> test</span></span><span style=3D"color:#660"><span=
 style=3D"color: #660;" class=3D"styled-by-prettify">&lt;</span></span><spa=
n style=3D"color:#008"><span style=3D"color: #008;" class=3D"styled-by-pret=
tify">char</span></span><span style=3D"color:#660"><span style=3D"color: #6=
60;" class=3D"styled-by-prettify">,</span></span><span style=3D"color:#000"=
><span style=3D"color: #000;" class=3D"styled-by-prettify"> </span></span><=
span style=3D"color:#008"><span style=3D"color: #008;" class=3D"styled-by-p=
rettify">int</span></span><span style=3D"color:#660"><span style=3D"color: =
#660;" class=3D"styled-by-prettify">&gt;::</span></span><span style=3D"colo=
r:#008"><span style=3D"color: #008;" class=3D"styled-by-prettify">params</s=
pan></span><span style=3D"color:#660"><span style=3D"color: #660;" class=3D=
"styled-by-prettify">)</span></span><span style=3D"color:#000"><span style=
=3D"color: #000;" class=3D"styled-by-prettify"> </span></span><span style=
=3D"color:#660"><span style=3D"color: #660;" class=3D"styled-by-prettify">{=
</span></span><span style=3D"color:#000"><span style=3D"color: #000;" class=
=3D"styled-by-prettify"><br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 std</span></span><s=
pan style=3D"color:#660"><span style=3D"color: #660;" class=3D"styled-by-pr=
ettify">::</span></span><span style=3D"color:#000"><span style=3D"color: #0=
00;" class=3D"styled-by-prettify">cout </span></span><span style=3D"color:#=
660"><span style=3D"color: #660;" class=3D"styled-by-prettify">&lt;&lt;</sp=
an></span><span style=3D"color:#000"><span style=3D"color: #000;" class=3D"=
styled-by-prettify"> </span></span><span style=3D"color:#008"><span style=
=3D"color: #008;" class=3D"styled-by-prettify">sizeof</span></span><span st=
yle=3D"color:#660"><span style=3D"color: #660;" class=3D"styled-by-prettify=
">(</span></span><span style=3D"color:#000"><span style=3D"color: #000;" cl=
ass=3D"styled-by-prettify">T</span></span><span style=3D"color:#660"><span =
style=3D"color: #660;" class=3D"styled-by-prettify">)</span></span><span st=
yle=3D"color:#000"><span style=3D"color: #000;" class=3D"styled-by-prettify=
"> </span></span><span style=3D"color:#660"><span style=3D"color: #660;" cl=
ass=3D"styled-by-prettify">&lt;&lt;</span></span><span style=3D"color:#000"=
><span style=3D"color: #000;" class=3D"styled-by-prettify"> std</span></spa=
n><span style=3D"color:#660"><span style=3D"color: #660;" class=3D"styled-b=
y-prettify">::</span></span><span style=3D"color:#000"><span style=3D"color=
: #000;" class=3D"styled-by-prettify">endl</span></span><span style=3D"colo=
r:#660"><span style=3D"color: #660;" class=3D"styled-by-prettify">;</span><=
/span><span style=3D"color:#000"><span style=3D"color: #000;" class=3D"styl=
ed-by-prettify"><br>=C2=A0 =C2=A0 </span></span><span style=3D"color:#660">=
<span style=3D"color: #660;" class=3D"styled-by-prettify">}</span></span><s=
pan style=3D"color:#000"><span style=3D"color: #000;" class=3D"styled-by-pr=
ettify"><br></span></span><span style=3D"color:#660"><span style=3D"color: =
#660;" class=3D"styled-by-prettify">}</span></span><span style=3D"color:#00=
0"><span style=3D"color: #000;" class=3D"styled-by-prettify"><br></span></s=
pan></div></code></div></div></code></div><br></blockquote>=C2=A0<br>Thre a=
re two different language constructs designed for their own purpuses which =
allows to have type list to iterate over in nontemplate function when those=
 features are used together. From my personal point of view this way is muc=
h better than grabbing template parameters unless there are some use cases =
which are not just &quot;some way to have iterable typelist in non-template=
 code&quot;. Do you have some example usecases for the feature?<br><br>-- S=
ergey<br><br></div></div>

<p></p>

-- <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 />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/0e2ea7f0-ee5e-44be-bade-413381bbb12b%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/0e2ea7f0-ee5e-44be-bade-413381bbb12b=
%40isocpp.org</a>.<br />

------=_Part_2312_420184387.1465880523564--

------=_Part_2311_1309869163.1465880523561--

.
