220 26327 <a7bcde4a-19e9-4916-b292-b48adf2345a4@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: Re: statement folding on variadic templates
 parameters pack
Date: Mon, 13 Jun 2016 12:00:52 -0700 (PDT)
Lines: 161
Approved: news@gmane.org
Message-ID: <a7bcde4a-19e9-4916-b292-b48adf2345a4@isocpp.org>
References: <1e3daa7c-e10a-4589-8118-26f47bc1a0df@isocpp.org>
 <f11d3266-3407-4c00-a578-5d07beeb1071@isocpp.org> <CAOfiQq=hhVBJAQ3Ekeo6mkWxPasnURXOW6r8zNo8oOk93ptbAQ@mail.gmail.com>
 <CADvuK0K+_d_h1eby+nFE0wmdK+3+B=zFOG5nLp1H15jRTo0Jgg@mail.gmail.com>
 <2d8458f8-27b2-464f-a16e-fc866ccfd2cd@isocpp.org> <b448d4b9-c76d-4d27-8b16-0e005478320f@isocpp.org>
 <d90bb3eb-e1d4-4a29-bb7e-63c097f49f96@isocpp.org> <bf02cde4-5da6-4a0b-903f-8b9230d4869c@isocpp.org>
 <CALbYwOymuWcO0WO6aSGCd1iv-dTUxPXP1BMYDdv5Pfcafw_xcQ@mail.gmail.com>
 <CAJnLdOZ5L0P6qdoer6jntOjtYwCTpV_VEGJv6bZUmGk6zmoQ2g@mail.gmail.com> <a731ae2e-9519-4d03-81ec-506b7bbda8b5@isocpp.org>
 <CAFk2RUZBSMsJOkjDaU=9xz4iJ9qNadygbPiB004oCh2p3jfgFg@mail.gmail.com>
 <8dc1e665-42a3-4ef0-a2d2-3773afab170c@isocpp.org>
Reply-To: std-proposals@isocpp.org
NNTP-Posting-Host: plane.gmane.org
Mime-Version: 1.0
Content-Type: multipart/mixed; 
	boundary="----=_Part_582_2101369963.1465844452217"
X-Trace: ger.gmane.org 1465844457 19963 80.91.229.3 (13 Jun 2016 19:00:57 GMT)
X-Complaints-To: usenet@ger.gmane.org
NNTP-Posting-Date: Mon, 13 Jun 2016 19:00:57 +0000 (UTC)
Cc: inkwizytoryankes@gmail.com
To: ISO C++ Standard - Future Proposals <std-proposals@isocpp.org>
Original-X-From: std-proposals+bncBCB6HO5JRMARBZMF7S5AKGQE2S5QQVA@isocpp.org Mon Jun 13 21:00:56 2016
Return-path: <std-proposals+bncBCB6HO5JRMARBZMF7S5AKGQE2S5QQVA@isocpp.org>
Envelope-to: gclcip-std-proposals@m.gmane.org
Original-Received: from mail-it0-f70.google.com ([209.85.214.70])
	by plane.gmane.org with esmtp (Exim 4.69)
	(envelope-from <std-proposals+bncBCB6HO5JRMARBZMF7S5AKGQE2S5QQVA@isocpp.org>)
	id 1bCX6V-0006t5-9h
	for gclcip-std-proposals@m.gmane.org; Mon, 13 Jun 2016 21:00:55 +0200
Original-Received: by mail-it0-f70.google.com with SMTP id b126sf116044791ite.3
        for <gclcip-std-proposals@m.gmane.org>; Mon, 13 Jun 2016 12:00:55 -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=v7EbYnCv4ae/9rWCYuhtb2jVxRDm7APy+Ov/3pvjH0c=;
        b=aMtEGGfuInCv2ECPlqMUqTX4B7vBatfXgfclhiZjaa69xgreYGWEK8z0zSu5c8dOeG
         Ll2lYvVyGQbgsfslanb4lFP5QrsTrPjgxlFrrvIRbBYMCTlJ9oCv2kOLQdRBuv/NuaGU
         7IUAhrkSbxpb13ZwrVwePjyOdaI4KTNBrPxsdcpDh1L33qw3/vogZ0YA6o1dQMp6Z5Cn
         HhGSvdxggvFOsvu3PVcn/KZkiPeS9KBUGT5dVSTwNca6XPOoFuaKZcfISaobBrZypeWH
         JaN2+/H6g/9INuY4XRLD2Fhibf96eLTi4VX57hR/J9VssWl6z7rixVKO7wktCX59WxEy
         wLmQ==
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=v7EbYnCv4ae/9rWCYuhtb2jVxRDm7APy+Ov/3pvjH0c=;
        b=hUAwVW+5bP4IvhxUF5l4Pv1dWeeV7xAVNXMDyMyffKoGbgPzEF85r1vHa+NCwPzz1f
         yaK8RBgMB6rbltJJeQa9gD5uZxix4b0s+miOsOVICzf5v3qFCMulJ76mk3QKKoMwDIor
         EulhHgWC3oHkOcbraxzZApffhi4V7MqwQfFaW607os/H685dHbolQpfhLZJsuH/DpX7Z
         n7dQLUyKI+n/f7Ol9thFqHpn1nGwyIrKn++GRjJaskEYaMF1gknE8sPbj5wEfsgax20O
         rqIZJwt4CQ/np/awFjtMRUZqELvSDYwuwqueiOj/ZHa6Qn/nD4OQAMsz7SH3Wlnw1LcY
         t6AQ==
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=v7EbYnCv4ae/9rWCYuhtb2jVxRDm7APy+Ov/3pvjH0c=;
        b=A5ReeUIP7/Lf/rP2lC6i/C1GeTYfeRS441WJ5izIb36nHkl8HmkeSOKuhWdqxcx5F6
         EEm2OBSpbzFo3JzgdbxhvsjwNRmMiUUKc7IAaVUis2vG1TUouG6rP7gAIwiJ71uMUmrw
         0HgOiM5HEzSb6tXQ+4H5TYlpM3iAKsm7dj5dpYWTQsOSsnlDgmIZbMw7JvGSlyLyQhkK
         uPs6YGOYy+hi+aj/08lq4wbJEz4aqwNkLARfqJ1Jtx/kOQtOpbRotXykI511rfTry9rI
         gmCC+MOfF4xouaMqTymYxrwkhp0jv/X+c1RvMwYTWwpTKIROZedYt/GsmMad6leERbMT
         RKWQ==
X-Gm-Message-State: ALyK8tLJUlIGxE/4VAlnmI2EmRFmdSeaRWfy/RNgMJwmgBbGujg/19Owau5vH51oHvyVzA==
X-Received: by 10.36.125.147 with SMTP id b141mr11371636itc.12.1465844454402;
        Mon, 13 Jun 2016 12:00:54 -0700 (PDT)
X-BeenThere: std-proposals@isocpp.org
Original-Received: by 10.36.50.146 with SMTP id j140ls975658ita.21.gmail; Mon, 13 Jun
 2016 12:00:53 -0700 (PDT)
X-Received: by 10.36.103.134 with SMTP id u128mr295425itc.5.1465844453326;
        Mon, 13 Jun 2016 12:00:53 -0700 (PDT)
In-Reply-To: <8dc1e665-42a3-4ef0-a2d2-3773afab170c@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:26327
Archived-At: <http://permalink.gmane.org/gmane.comp.lang.c++.isocpp.proposals/26327>

------=_Part_582_2101369963.1465844452217
Content-Type: multipart/alternative; 
	boundary="----=_Part_583_567470926.1465844452218"

------=_Part_583_567470926.1465844452218
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

=D0=B2=D0=BE=D1=81=D0=BA=D1=80=D0=B5=D1=81=D0=B5=D0=BD=D1=8C=D0=B5, 12 =D0=
=B8=D1=8E=D0=BD=D1=8F 2016 =D0=B3., 17:13:48 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=20
inkwizyt...@gmail.com =D0=BD=D0=B0=D0=BF=D0=B8=D1=81=D0=B0=D0=BB:
>
> I was referring to switch after applying `for constexpr`. Some thing like=
=20
> that:
> switch (x)
> {
>     for constexpr (typename T : Op...)
>     {
>     case T::OpId: T::OpFunc(); break;
>     }
>     break;
> }
> //After `for constexpr` "unroll"
> switch (x)
> {
>     case Op0::OpId: Op0::OpFunc(); break;
>     case Op1::OpId: Op1::OpFunc(); break;
>     case Op2::OpId: Op2::OpFunc(); break;
>     case Op3::OpId: Op3::OpFunc(); break;
> }
> And in second switch today compilers do that I mentioned (if `OpId` creat=
e=20
> proper range). `for constexpr` is not trivial but if it support `case` th=
en=20
> getting jump table from `switch` and `for constexpr` will be trivial.
>
>
Maybe it's better to have syntax to expand parameters pack into set of case=
=20
statements. Posibility to mix switch with loops is one of the most=20
confusing and dangerous part of the language. I fill it's better to avoid=
=20
adding for constexpr as a common practice to unpack parameters pack into=20
cases.

-- Sergey=20
=20

--=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/a7bcde4a-19e9-4916-b292-b48adf2345a4%40isocpp.or=
g.

------=_Part_583_567470926.1465844452218
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">=D0=B2=D0=BE=D1=81=D0=BA=D1=80=D0=B5=D1=81=D0=B5=D0=BD=D1=
=8C=D0=B5, 12 =D0=B8=D1=8E=D0=BD=D1=8F 2016 =D0=B3., 17:13:48 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" style=3D"margin: 0;margin-left: 0.8ex;border-left: 1px #cc=
c solid;padding-left: 1ex;"><div dir=3D"ltr">I was referring to switch afte=
r applying `for constexpr`. Some thing like that:<br><div><div style=3D"bac=
kground-color:rgb(250,250,250);border-color:rgb(187,187,187);border-style:s=
olid;border-width:1px;word-wrap:break-word"><code><div><span style=3D"color=
:#008">switch</span><span style=3D"color:#000"> </span><span style=3D"color=
:#660">(</span><span style=3D"color:#000">x</span><span style=3D"color:#660=
">)</span><span style=3D"color:#000"><br></span><span style=3D"color:#660">=
{</span><span style=3D"color:#000"><br>=C2=A0 =C2=A0 </span><span style=3D"=
color:#008">for</span><span style=3D"color:#000"> </span><span style=3D"col=
or:#008">constexpr</span><span style=3D"color:#000"> </span><span style=3D"=
color:#660">(</span><span style=3D"color:#008">typename</span><span style=
=3D"color:#000"> T </span><span style=3D"color:#660">:</span><span style=3D=
"color:#000"> </span><span style=3D"color:#606">Op</span><span style=3D"col=
or:#660">...)</span><span style=3D"color:#000"><br>=C2=A0 =C2=A0 </span><sp=
an style=3D"color:#660">{</span><span style=3D"color:#000"><br>=C2=A0 =C2=
=A0 </span><span style=3D"color:#008">case</span><span style=3D"color:#000"=
> T</span><span style=3D"color:#660">::</span><span style=3D"color:#606">Op=
Id</span><span style=3D"color:#660">:</span><span style=3D"color:#000"> T</=
span><span style=3D"color:#660">::</span><span style=3D"color:#606">OpFunc<=
/span><span style=3D"color:#660">();</span><span style=3D"color:#000"> </sp=
an><span style=3D"color:#008">break</span><span style=3D"color:#660">;</spa=
n><span style=3D"color:#000"><br>=C2=A0 =C2=A0 </span><span style=3D"color:=
#660">}</span><span style=3D"color:#000"><br>=C2=A0 =C2=A0 </span><span sty=
le=3D"color:#008">break</span><span style=3D"color:#660">;</span><span styl=
e=3D"color:#000"><br></span><span style=3D"color:#660">}</span><span style=
=3D"color:#000"><br></span><span style=3D"color:#800">//After `for constexp=
r` &quot;unroll&quot;</span><span style=3D"color:#000"><br></span><span sty=
le=3D"color:#008">switch</span><span style=3D"color:#000"> </span><span sty=
le=3D"color:#660">(</span><span style=3D"color:#000">x</span><span style=3D=
"color:#660">)</span><span style=3D"color:#000"><br></span><span style=3D"c=
olor:#660">{</span><span style=3D"color:#000"><br>=C2=A0 =C2=A0 </span><spa=
n style=3D"color:#008">case</span><span style=3D"color:#000"> </span><span =
style=3D"color:#606">Op0</span><span style=3D"color:#660">::</span><span st=
yle=3D"color:#606">OpId</span><span style=3D"color:#660">:</span><span styl=
e=3D"color:#000"> </span><span style=3D"color:#606">Op0</span><span style=
=3D"color:#660">::</span><span style=3D"color:#606">OpFunc</span><span styl=
e=3D"color:#660">();</span><span style=3D"color:#000"> </span><span style=
=3D"color:#008">break</span><span style=3D"color:#660">;</span><span style=
=3D"color:#000"><br>=C2=A0 =C2=A0 </span><span style=3D"color:#008">case</s=
pan><span style=3D"color:#000"> </span><span style=3D"color:#606">Op1</span=
><span style=3D"color:#660">::</span><span style=3D"color:#606">OpId</span>=
<span style=3D"color:#660">:</span><span style=3D"color:#000"> </span><span=
 style=3D"color:#606">Op1</span><span style=3D"color:#660">::</span><span s=
tyle=3D"color:#606">OpFunc</span><span style=3D"color:#660">();</span><span=
 style=3D"color:#000"> </span><span style=3D"color:#008">break</span><span =
style=3D"color:#660">;</span><span style=3D"color:#000"><br>=C2=A0 =C2=A0 <=
/span><span style=3D"color:#008">case</span><span style=3D"color:#000"> </s=
pan><span style=3D"color:#606">Op2</span><span style=3D"color:#660">::</spa=
n><span style=3D"color:#606">OpId</span><span style=3D"color:#660">:</span>=
<span style=3D"color:#000"> </span><span style=3D"color:#606">Op2</span><sp=
an style=3D"color:#660">::</span><span style=3D"color:#606">OpFunc</span><s=
pan style=3D"color:#660">();</span><span style=3D"color:#000"> </span><span=
 style=3D"color:#008">break</span><span style=3D"color:#660">;</span><span =
style=3D"color:#000"><br>=C2=A0 =C2=A0 </span><span style=3D"color:#008">ca=
se</span><span style=3D"color:#000"> </span><span style=3D"color:#606">Op3<=
/span><span style=3D"color:#660">::</span><span style=3D"color:#606">OpId</=
span><span style=3D"color:#660">:</span><span style=3D"color:#000"> </span>=
<span style=3D"color:#606">Op3</span><span style=3D"color:#660">::</span><s=
pan style=3D"color:#606">OpFunc</span><span style=3D"color:#660">();</span>=
<span style=3D"color:#000"> </span><span style=3D"color:#008">break</span><=
span style=3D"color:#660">;</span><span style=3D"color:#000"><br></span><sp=
an style=3D"color:#660">}</span><span style=3D"color:#000"><br></span></div=
></code></div>And in second switch today compilers do that I mentioned (if =
`OpId` create proper range). `for constexpr` is not trivial but if it suppo=
rt `case` then getting jump table from `switch` and `for constexpr` will be=
 trivial.<br><br></div></div></blockquote><div><br>Maybe it&#39;s better to=
 have syntax to expand parameters pack into set of case statements. Posibil=
ity to mix switch with loops is one of the most confusing and dangerous par=
t of the language. I fill it&#39;s better to avoid adding for constexpr as =
a common practice to unpack parameters pack into cases.<br><br>-- Sergey <b=
r></div><div>=C2=A0</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/a7bcde4a-19e9-4916-b292-b48adf2345a4%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/a7bcde4a-19e9-4916-b292-b48adf2345a4=
%40isocpp.org</a>.<br />

------=_Part_583_567470926.1465844452218--

------=_Part_582_2101369963.1465844452217--

.
