220 30172 <bb835a83-0f69-4a76-97df-581c2a2ae8d8@isocpp.org> article
Path: news.gmane.org!.POSTED!not-for-mail
From: m.cencora@gmail.com
Newsgroups: gmane.comp.lang.c++.isocpp.proposals
Subject: Re: enum_cast proposal
Date: Tue, 3 Jan 2017 07:06:10 -0800 (PST)
Lines: 200
Approved: news@gmane.org
Message-ID: <bb835a83-0f69-4a76-97df-581c2a2ae8d8@isocpp.org>
References: <efdf2357-00a6-408a-8772-12f99135a880@isocpp.org>
 <1483532086.2yCkjVBYWJ@tjmaciei-mobl1>
Reply-To: std-proposals@isocpp.org
NNTP-Posting-Host: blaine.gmane.org
Mime-Version: 1.0
Content-Type: multipart/mixed; 
	boundary="----=_Part_20_332083105.1483455970154"
X-Trace: blaine.gmane.org 1483455984 25888 195.159.176.226 (3 Jan 2017 15:06:24 GMT)
X-Complaints-To: usenet@blaine.gmane.org
NNTP-Posting-Date: Tue, 3 Jan 2017 15:06:24 +0000 (UTC)
To: ISO C++ Standard - Future Proposals <std-proposals@isocpp.org>
Original-X-From: std-proposals+bncBD7YFUMJRYMBBYX3V3BQKGQEH6MA3GY@isocpp.org Tue Jan 03 16:06:15 2017
Return-path: <std-proposals+bncBD7YFUMJRYMBBYX3V3BQKGQEH6MA3GY@isocpp.org>
Envelope-to: gclcip-std-proposals@m.gmane.org
Original-Received: from mail-it0-f71.google.com ([209.85.214.71])
	by blaine.gmane.org with esmtp (Exim 4.84_2)
	(envelope-from <std-proposals+bncBD7YFUMJRYMBBYX3V3BQKGQEH6MA3GY@isocpp.org>)
	id 1cOQf9-0004pR-CN
	for gclcip-std-proposals@m.gmane.org; Tue, 03 Jan 2017 16:06:07 +0100
Original-Received: by mail-it0-f71.google.com with SMTP id b123sf437542692itb.3
        for <gclcip-std-proposals@m.gmane.org>; Tue, 03 Jan 2017 07:06:11 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=isocpp-org.20150623.gappssmtp.com; s=20150623;
        h=date:from:to: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=e14ApKMZ/KAD5j6QzDTx5W5o0PKrEmyqnxB5SRJ33fM=;
        b=uVUAuP5MihEjHOVzK+zb/kDLP+qYggAZspVWHtd9tivh7wk9KrxCfLCuPh2FmykPPV
         XrStrzS3bNC0JICoaSn8snMoPHd7ttVoz3+Ix8/NSZI1SJuctp4QBYX6MDL7DEslrU79
         KTUC+/f05GqgAnjMEw7qZ9JofuN5tXMBS41v3F+V4RLFv9xJy0eNcmPMNy91lPyRXhwN
         H0CYSyBOmXuEKJtQ5xZXqDNglcytZNWAQYk85WUXx51BjeGse2WFutR9pQMd+JFCkMKG
         lMt57vIsyNHc+79cqWW9ScQLRq5G7IHWBQ/sQOIut03XXVTRVPptMwwTCaSboUuTUeKO
         MQEw==
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=date:from:to: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=e14ApKMZ/KAD5j6QzDTx5W5o0PKrEmyqnxB5SRJ33fM=;
        b=Bf4y4UkH+iFigxiMTGaQkqT3doPBstTsgfXPP7jjNwXKE2FljuUHBGOJ749b3+zuBF
         5cPdUCqGWksBD/L/1IZrPSobM5apPflGMHASxS3TbI5Cw3AGYRPCfbhJqK2NYIu2M9EC
         Xf7L3AfCTflUjVlkW5GfbAJ+swevyfAiCtw9RfQ4Zpk0S0XNlYdw8OA8VZlvJZq8zXe7
         gbDsE96bzrqro+/tGRGf95E2mpsQ7rejyqZnT/RAuUx5zKnejmH3mgCzF8r6T8/DyRQ3
         0SfItx/vPHexpFBtXFeOmruz/7DfHqkI7fpJc05SRu3EPbGew6BJxQUZdDr0infx5N4o
         CAVg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:date:from:to: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=e14ApKMZ/KAD5j6QzDTx5W5o0PKrEmyqnxB5SRJ33fM=;
        b=n7LWnT3ho09Lr8U56xeLcYWSDBMYO813c3SPF5slZirYlQ1rcITnPIbOTbzJrgbx5J
         DA6WqMEWJf0ySYhhyqKMjbkKMmLYBo16m/suVb9PsgS6XnvzCJQ0bvIEOX7HTtDAzS7N
         EplFXhJEJpwI2SKFQLPyRpMiiEhhwdL9hPiAzxj15Af4EFkOYwbsnfcqhJYqltQ4pfb1
         XCIjdFOA6eTR0NddetjrqpYRf5pXPiL+Z7EpXzV0KYml2Z7/JG1j6XldJ1G2Xgs7UcDV
         vgKL0zQO/JFCXHHddixD3235Zk6Q3+yQV6+ci2RNUYMTUcUMEwdfO0mK6rv3w22IiJgi
         BQbQ==
X-Gm-Message-State: AIkVDXIOXdRItp7wvzSs8voeqQjtGGSVuhKsMc6EH5Gxejm0oBJvxW37yuJzIHrM7Bk6OA==
X-Received: by 10.36.26.6 with SMTP id 6mr13845012iti.31.1483455971301;
        Tue, 03 Jan 2017 07:06:11 -0800 (PST)
X-BeenThere: std-proposals@isocpp.org
Original-Received: by 10.157.59.34 with SMTP id z31ls25171511otb.21.gmail; Tue, 03 Jan
 2017 07:06:10 -0800 (PST)
X-Received: by 10.157.17.167 with SMTP id v36mr2848291otf.12.1483455970618;
        Tue, 03 Jan 2017 07:06:10 -0800 (PST)
In-Reply-To: <1483532086.2yCkjVBYWJ@tjmaciei-mobl1>
X-Original-Sender: m.cencora@gmail.com
Precedence: list
Mailing-list: list std-proposals@isocpp.org; contact std-proposals+owners@isocpp.org
List-ID: <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:30172
Archived-At: <http://permalink.gmane.org/gmane.comp.lang.c++.isocpp.proposals/30172>

------=_Part_20_332083105.1483455970154
Content-Type: multipart/alternative; 
	boundary="----=_Part_21_340188439.1483455970154"

------=_Part_21_340188439.1483455970154
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

W dniu wtorek, 3 stycznia 2017 15:25:25 UTC+1 u=C5=BCytkownik Thiago Maciei=
ra=20
napisa=C5=82:
>
> On ter=C3=A7a-feira, 3 de janeiro de 2017 01:56:05 BRST m.ce...@gmail.com=
=20
> <javascript:> wrote:=20
> > template <typename Enum, typename Int>=20
> > optional<Enum> enum_cast(Int value);=20
> >=20
> > requires: is_enum<Enum>, is_integral<Int>=20
> >=20
> > enum color=20
> > {=20
> >    red =3D 1,=20
> >    green =3D 200,=20
> >    blue =3D 3=20
> > };=20
>
> How do you see compilers implementing:=20
>
> void f(int x)=20
> {=20
>         enum_cast<color>(x);=20
> }=20
>
>

Compiler should synthesize a function like below:

optional<color> enum_cast(int x)
{
    switch(x)
    {
        case red:
        case green:
        case blue:
            return static_cast<color>(x);
        default:
            return nullopt;
    }
}

Of course it could implement it more efficently (as range check instead of=
=20
switch if all enumerators are consecutive integers).

Regards,
Maciej
=20

> --=20
> Thiago Macieira - thiago (AT) macieira.info - thiago (AT) kde.org=20
>    Software Architect - Intel Open Source Technology Center=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/bb835a83-0f69-4a76-97df-581c2a2ae8d8%40isocpp.or=
g.

------=_Part_21_340188439.1483455970154
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">W dniu wtorek, 3 stycznia 2017 15:25:25 UTC+1 u=C5=BCytkow=
nik Thiago Macieira napisa=C5=82:<blockquote class=3D"gmail_quote" style=3D=
"margin: 0;margin-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex=
;">On ter=C3=A7a-feira, 3 de janeiro de 2017 01:56:05 BRST <a href=3D"javas=
cript:" target=3D"_blank" gdf-obfuscated-mailto=3D"2RMVUOBxCwAJ" rel=3D"nof=
ollow" onmousedown=3D"this.href=3D&#39;javascript:&#39;;return true;" oncli=
ck=3D"this.href=3D&#39;javascript:&#39;;return true;">m.ce...@gmail.com</a>=
 wrote:
<br>&gt; template &lt;typename Enum, typename Int&gt;
<br>&gt; optional&lt;Enum&gt; enum_cast(Int value);
<br>&gt;=20
<br>&gt; requires: is_enum&lt;Enum&gt;, is_integral&lt;Int&gt;
<br>&gt;=20
<br>&gt; enum color
<br>&gt; {
<br>&gt; =C2=A0 =C2=A0red =3D 1,
<br>&gt; =C2=A0 =C2=A0green =3D 200,
<br>&gt; =C2=A0 =C2=A0blue =3D 3
<br>&gt; };
<br>
<br>How do you see compilers implementing:
<br>
<br>void f(int x)
<br>{
<br>=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0enum_cast&lt;color&gt;(=
x);
<br>}
<br>
<br></blockquote><div><br></div><div><br></div><div>Compiler should synthes=
ize a function like below:</div><div><br></div><div class=3D"prettyprint" s=
tyle=3D"border: 1px solid rgb(187, 187, 187); word-wrap: break-word; backgr=
ound-color: rgb(250, 250, 250);"><code class=3D"prettyprint"><div class=3D"=
subprettyprint"><span style=3D"color: #000;" class=3D"styled-by-prettify">o=
ptional</span><span style=3D"color: #080;" class=3D"styled-by-prettify">&lt=
;color&gt;</span><span style=3D"color: #000;" class=3D"styled-by-prettify">=
 enum_cast</span><span style=3D"color: #660;" class=3D"styled-by-prettify">=
(</span><span style=3D"color: #008;" class=3D"styled-by-prettify">int</span=
><span style=3D"color: #000;" class=3D"styled-by-prettify"> x</span><span s=
tyle=3D"color: #660;" class=3D"styled-by-prettify">)</span><span style=3D"c=
olor: #000;" class=3D"styled-by-prettify"><br></span><span style=3D"color: =
#660;" class=3D"styled-by-prettify">{</span><span style=3D"color: #000;" cl=
ass=3D"styled-by-prettify"><br>=C2=A0 =C2=A0 </span><span style=3D"color: #=
008;" class=3D"styled-by-prettify">switch</span><span style=3D"color: #660;=
" class=3D"styled-by-prettify">(</span><span style=3D"color: #000;" class=
=3D"styled-by-prettify">x</span><span style=3D"color: #660;" class=3D"style=
d-by-prettify">)</span><span style=3D"color: #000;" class=3D"styled-by-pret=
tify"><br>=C2=A0 =C2=A0 </span><span style=3D"color: #660;" class=3D"styled=
-by-prettify">{</span><span style=3D"color: #000;" class=3D"styled-by-prett=
ify"><br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 </span><span style=3D"color: #008;" cl=
ass=3D"styled-by-prettify">case</span><span style=3D"color: #000;" class=3D=
"styled-by-prettify"> red</span><span style=3D"color: #660;" class=3D"style=
d-by-prettify">:</span><span style=3D"color: #000;" class=3D"styled-by-pret=
tify"><br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 </span><span style=3D"color: #008;" c=
lass=3D"styled-by-prettify">case</span><span style=3D"color: #000;" class=
=3D"styled-by-prettify"> green</span><span style=3D"color: #660;" class=3D"=
styled-by-prettify">:</span><span style=3D"color: #000;" class=3D"styled-by=
-prettify"><br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 </span><span style=3D"color: #00=
8;" class=3D"styled-by-prettify">case</span><span style=3D"color: #000;" cl=
ass=3D"styled-by-prettify"> blue</span><span style=3D"color: #660;" class=
=3D"styled-by-prettify">:</span><span style=3D"color: #000;" class=3D"style=
d-by-prettify"><br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 </span><span s=
tyle=3D"color: #008;" class=3D"styled-by-prettify">return</span><span style=
=3D"color: #000;" class=3D"styled-by-prettify"> </span><span style=3D"color=
: #008;" class=3D"styled-by-prettify">static_cast</span><span style=3D"colo=
r: #080;" class=3D"styled-by-prettify">&lt;color&gt;</span><span style=3D"c=
olor: #660;" class=3D"styled-by-prettify">(</span><span style=3D"color: #00=
0;" class=3D"styled-by-prettify">x</span><span style=3D"color: #660;" class=
=3D"styled-by-prettify">);</span><span style=3D"color: #000;" class=3D"styl=
ed-by-prettify"><br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 </span><span style=3D"color=
: #008;" class=3D"styled-by-prettify">default</span><span style=3D"color: #=
660;" class=3D"styled-by-prettify">:</span><span style=3D"color: #000;" cla=
ss=3D"styled-by-prettify"><br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 </s=
pan><span style=3D"color: #008;" class=3D"styled-by-prettify">return</span>=
<span style=3D"color: #000;" class=3D"styled-by-prettify"> nullopt</span><s=
pan style=3D"color: #660;" class=3D"styled-by-prettify">;</span><span style=
=3D"color: #000;" class=3D"styled-by-prettify"><br>=C2=A0 =C2=A0 </span><sp=
an style=3D"color: #660;" class=3D"styled-by-prettify">}</span><span style=
=3D"color: #000;" class=3D"styled-by-prettify"><br></span><span style=3D"co=
lor: #660;" class=3D"styled-by-prettify">}</span></div></code></div><div><b=
r></div><div>Of course it could implement it more efficently (as range chec=
k instead of switch if all enumerators are consecutive integers).</div><div=
><br></div><div>Regards,</div><div>Maciej</div><div>=C2=A0<br></div><blockq=
uote class=3D"gmail_quote" style=3D"margin: 0;margin-left: 0.8ex;border-lef=
t: 1px #ccc solid;padding-left: 1ex;">--=20
<br>Thiago Macieira - thiago (AT) <a href=3D"http://macieira.info" target=
=3D"_blank" rel=3D"nofollow" onmousedown=3D"this.href=3D&#39;http://www.goo=
gle.com/url?q\x3dhttp%3A%2F%2Fmacieira.info\x26sa\x3dD\x26sntz\x3d1\x26usg\=
x3dAFQjCNEswDUBNCNanbu7euhqLn_62FW8ag&#39;;return true;" onclick=3D"this.hr=
ef=3D&#39;http://www.google.com/url?q\x3dhttp%3A%2F%2Fmacieira.info\x26sa\x=
3dD\x26sntz\x3d1\x26usg\x3dAFQjCNEswDUBNCNanbu7euhqLn_62FW8ag&#39;;return t=
rue;">macieira.info</a> - thiago (AT) <a href=3D"http://kde.org" target=3D"=
_blank" rel=3D"nofollow" onmousedown=3D"this.href=3D&#39;http://www.google.=
com/url?q\x3dhttp%3A%2F%2Fkde.org\x26sa\x3dD\x26sntz\x3d1\x26usg\x3dAFQjCNH=
GRJdo5_JYG1DowztwAHAKs80XSA&#39;;return true;" onclick=3D"this.href=3D&#39;=
http://www.google.com/url?q\x3dhttp%3A%2F%2Fkde.org\x26sa\x3dD\x26sntz\x3d1=
\x26usg\x3dAFQjCNHGRJdo5_JYG1DowztwAHAKs80XSA&#39;;return true;">kde.org</a=
>
<br>=C2=A0 =C2=A0Software Architect - Intel Open Source Technology Center
<br>
<br></blockquote></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/bb835a83-0f69-4a76-97df-581c2a2ae8d8%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/bb835a83-0f69-4a76-97df-581c2a2ae8d8=
%40isocpp.org</a>.<br />

------=_Part_21_340188439.1483455970154--

------=_Part_20_332083105.1483455970154--

.
