220 16984 <04b687bc-2cf5-402f-bb27-0365f77169b5@isocpp.org> article
Path: news.gmane.org!not-for-mail
From: inkwizytoryankes@gmail.com
Newsgroups: gmane.comp.lang.c++.isocpp.proposals
Subject: Re: Token based access to private members in reflection
Date: Fri, 13 Mar 2015 14:25:11 -0700 (PDT)
Lines: 274
Approved: news@gmane.org
Message-ID: <04b687bc-2cf5-402f-bb27-0365f77169b5@isocpp.org>
References: <d1d01ce0-cac0-4177-b5cf-f3352591f278@isocpp.org>
 <104b02bf-a3bc-495a-870e-9af9e1ec1fdf@isocpp.org>
Reply-To: std-proposals@isocpp.org
NNTP-Posting-Host: plane.gmane.org
Mime-Version: 1.0
Content-Type: multipart/mixed; 
	boundary="----=_Part_837_985633932.1426281911699"
X-Trace: ger.gmane.org 1426281915 17389 80.91.229.3 (13 Mar 2015 21:25:15 GMT)
X-Complaints-To: usenet@ger.gmane.org
NNTP-Posting-Date: Fri, 13 Mar 2015 21:25:15 +0000 (UTC)
Cc: inkwizytoryankes@gmail.com
To: std-proposals@isocpp.org
Original-X-From: std-proposals+bncBDDLTAGNTIBBBOFLRWUAKGQEAH5M7IQ@isocpp.org Fri Mar 13 22:25:15 2015
Return-path: <std-proposals+bncBDDLTAGNTIBBBOFLRWUAKGQEAH5M7IQ@isocpp.org>
Envelope-to: gclcip-std-proposals@m.gmane.org
Original-Received: from mail-qc0-f199.google.com ([209.85.216.199])
	by plane.gmane.org with esmtp (Exim 4.69)
	(envelope-from <std-proposals+bncBDDLTAGNTIBBBOFLRWUAKGQEAH5M7IQ@isocpp.org>)
	id 1YWX50-00039G-6l
	for gclcip-std-proposals@m.gmane.org; Fri, 13 Mar 2015 22:25:14 +0100
Original-Received: by qcwr17 with SMTP id r17sf90823571qcw.0
        for <gclcip-std-proposals@m.gmane.org>; Fri, 13 Mar 2015 14:25:13 -0700 (PDT)
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:content-type:x-original-sender:reply-to:precedence
         :mailing-list:list-id:list-post:list-help:list-archive
         :list-subscribe:list-unsubscribe;
        bh=mErgeXrUTn4kCwBzwr8nLYC1TITIdbbgbYNjBd6brlY=;
        b=PiF6igq8+1i9q2djL3EkkXLnJX0dqpiQSmSa1oGDCa4ceKZf/6mLN9ykgNLI+ABJ7U
         Vv4Z8eboIuZzJWOZuSiVRTwT60cFwR5bMXy7wBnMuPL9K/M+YflCFhBiCOi5l7t4C4Fe
         7tjBeLH9JXLG71S0lpBV1Ovzuw4sFdSkyV3t0WrdDX7qf+dwyVMN8gALtzQAHoueUqA1
         ecMCHO1+Di/usVBKybyb43N1wijPemGfrz8syoHF1sVrVzwU7oWuckWRktnbsopsX9Pj
         JBDh+OYcd0CG3oPi5zJOKD1+u/cR0rlIDP6HtxO0SxbLiUerQ35kCZ9lNqobRZdoKk+6
         oJ+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:content-type:x-original-sender
         :reply-to:precedence:mailing-list:list-id:list-post:list-help
         :list-archive:list-subscribe:list-unsubscribe;
        bh=mErgeXrUTn4kCwBzwr8nLYC1TITIdbbgbYNjBd6brlY=;
        b=b+sh15e826puiGfmG+tw08bn9do/6ZYoSyPt8bJG64BCZk4RCbQHlyIhPtrgn1xoUN
         ewqQHCxaaMvO7+jxvA57O44dGNBSZjcalqpwIWsxB+K1WUrQJIbXeeoCDOUp7RU2Kb7H
         ZzWGIavGyUG7FJFb1o9pN2ghcUqw8gd3+YBYCnzmg/87V5Caiiyka2uidMEuiCsv0T2W
         4BrnSSU4qKbKOz5DrKqwWWEJwrTIJGuJNuPuhR8yCmIm/TzL4N37FBNFg4zmG4xvYLU9
         9Lqps5dxBetXomt+jzXWMj3OBdbze+ONKxPAxhWuDQv8/Fo+cGG6NQLz4M50af7v0zVR
         yyfQ==
X-Gm-Message-State: ALoCoQlUaaZWI/htxIl1WDzSfNtxLZH0rR2x6Og9iq2MdqGYOBEnBhTivRchmhtgeDkIUEojZz6Q
X-Received: by 10.52.166.77 with SMTP id ze13mr50392633vdb.9.1426281913076;
        Fri, 13 Mar 2015 14:25:13 -0700 (PDT)
X-BeenThere: std-proposals@isocpp.org
Original-Received: by 10.140.84.198 with SMTP id l64ls1798946qgd.96.gmail; Fri, 13 Mar
 2015 14:25:12 -0700 (PDT)
X-Received: by 10.140.93.132 with SMTP id d4mr113378qge.9.1426281912335;
        Fri, 13 Mar 2015 14:25:12 -0700 (PDT)
In-Reply-To: <104b02bf-a3bc-495a-870e-9af9e1ec1fdf@isocpp.org>
X-Original-Sender: inkwizytoryankes@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: <http://groups.google.com/a/isocpp.org/group/std-proposals/post>, <mailto:std-proposals@isocpp.org>
List-Help: <http://support.google.com/a/isocpp.org/bin/topic.py?topic=25838>, <mailto:std-proposals+help@isocpp.org>
List-Archive: <http://groups.google.com/a/isocpp.org/group/std-proposals/>
List-Subscribe: <http://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>,
 <http://groups.google.com/a/isocpp.org/group/std-proposals/subscribe>
Xref: news.gmane.org gmane.comp.lang.c++.isocpp.proposals:16984
Archived-At: <http://permalink.gmane.org/gmane.comp.lang.c++.isocpp.proposals/16984>

------=_Part_837_985633932.1426281911699
Content-Type: multipart/alternative; 
	boundary="----=_Part_838_2008125813.1426281911699"

------=_Part_838_2008125813.1426281911699
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

Do you know why people was against this approach?

On Friday, March 13, 2015 at 12:22:15 AM UTC+1, Cleiton Santoia wrote:
>
>
>
>
>     In this document http://random.m-ou.se/reflectionfeedbackurbana.html =
you=20
> will find :
>
>
> Opt-in to unsafe reflection from the class under reflection:
> SFFNASA543102
>
>
>
> Em quinta-feira, 12 de mar=C3=A7o de 2015 19:46:29 UTC-3, inkwizyt...@gma=
il.com=20
> escreveu:
>>
>> I have idea of system that could be used of handling private data in=20
>> reflection.
>>
>> First one, we add new template
>> template<typename T>
>> class private_access_token
>> {
>>     using type =3D /* undefined */;
>>     friend T;
>> };
>>
>>
>> And we add to `class_member::pointer` (like from n4113) new default=20
>> parameter:
>> template<typename T, size_t I, token =3D void>
>> struct pointer
>> {
>> private: //this line depend if I'th member is private
>>     constexpr static SomeType T::* value =3D /* something */;
>>     friend T;
>> };
>>
>> template<typename T, size_t I>
>> struct pointer<T, I, typename private_access_token<T>::type >
>> {
>> public: //always public with token
>>     constexpr static SomeType T::* value =3D /* something */;
>>     friend T;
>> };
>>
>>
>>
>>
>> Thanks to that, class implementation can have control over private acces=
s=20
>> and allow sharing it to third party libraries without exposing private=
=20
>> fields to the wild.
>> Some class designer could even allow every one using it by exposing type=
=20
>> form token:
>> class A
>> {
>>     int a;
>> public:
>>     using PrivateToken =3D private_access_token<A>::type;
>> };
>>
>> class B
>> {
>>     int a;
>>     int b;
>> public:
>>     std::string to_string() { return third_party_func<
>> private_access_token<B>::type>(this); }
>> };
>>
>>
>>
>> Do you think that could be good solution for that?
>>
>>
>>

--=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.
Visit this group at http://groups.google.com/a/isocpp.org/group/std-proposa=
ls/.

------=_Part_838_2008125813.1426281911699
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">Do you know why people was against this approach?<br><br>O=
n Friday, March 13, 2015 at 12:22:15 AM UTC+1, Cleiton Santoia wrote:<block=
quote class=3D"gmail_quote" style=3D"margin: 0;margin-left: 0.8ex;border-le=
ft: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"ltr"><div><br></div><div=
><br></div><div><br></div><div>&nbsp; &nbsp; In this document&nbsp;<a href=
=3D"http://random.m-ou.se/reflectionfeedbackurbana.html" target=3D"_blank" =
rel=3D"nofollow" onmousedown=3D"this.href=3D'http://www.google.com/url?q\75=
http%3A%2F%2Frandom.m-ou.se%2Freflectionfeedbackurbana.html\46sa\75D\46sntz=
\0751\46usg\75AFQjCNFE655tqFygttII-m54Ge_tnol1GA';return true;" onclick=3D"=
this.href=3D'http://www.google.com/url?q\75http%3A%2F%2Frandom.m-ou.se%2Fre=
flectionfeedbackurbana.html\46sa\75D\46sntz\0751\46usg\75AFQjCNFE655tqFygtt=
II-m54Ge_tnol1GA';return true;">http://random.m-ou.<wbr>se/reflectionfeedba=
ckurbana.<wbr>html</a>&nbsp;you will find :<br></div><div><br></div><div><b=
r></div><div><p style=3D"margin-left:4pc;margin-right:3pc;color:rgb(0,0,0);=
font-family:sans-serif;font-size:small;line-height:18.2000007629395px">Opt-=
in to unsafe reflection from the class under reflection:</p><table style=3D=
"margin-left:auto;margin-right:auto;border-collapse:collapse;color:rgb(0,0,=
0);font-family:sans-serif;font-size:small;line-height:18.2000007629395px"><=
thead><tr><th style=3D"text-align:center;font-weight:bold;border:1px solid =
rgb(211,211,211);padding:4pt;background:rgb(238,238,238)" align=3D"left">SF=
</th><th style=3D"text-align:center;font-weight:bold;border:1px solid rgb(2=
11,211,211);padding:4pt;background:rgb(238,238,238)" align=3D"left">F</th><=
th style=3D"text-align:center;font-weight:bold;border:1px solid rgb(211,211=
,211);padding:4pt;background:rgb(238,238,238)" align=3D"left">N</th><th sty=
le=3D"text-align:center;font-weight:bold;border:1px solid rgb(211,211,211);=
padding:4pt;background:rgb(238,238,238)" align=3D"left">A</th><th style=3D"=
text-align:center;font-weight:bold;border:1px solid rgb(211,211,211);paddin=
g:4pt;background:rgb(238,238,238)" align=3D"left">SA</th></tr></thead><tbod=
y><tr><td style=3D"border:1px solid rgb(211,211,211);padding:4pt" align=3D"=
left">5</td><td style=3D"border:1px solid rgb(211,211,211);padding:4pt" ali=
gn=3D"left">4</td><td style=3D"border:1px solid rgb(211,211,211);padding:4p=
t" align=3D"left">3</td><td style=3D"border:1px solid rgb(211,211,211);padd=
ing:4pt" align=3D"left">10</td><td style=3D"border:1px solid rgb(211,211,21=
1);padding:4pt" align=3D"left">2<br><br></td></tr></tbody></table></div><di=
v><br></div><div><br>Em quinta-feira, 12 de mar=C3=A7o de 2015 19:46:29 UTC=
-3, <a>inkwizyt...@gmail.com</a>  escreveu:<blockquote class=3D"gmail_quote=
" style=3D"margin:0;margin-left:0.8ex;border-left:1px #ccc solid;padding-le=
ft:1ex"><div dir=3D"ltr">I have idea of system that could be used of handli=
ng private data in reflection.<br><br>First one, we add new template<br><di=
v style=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">template</span><span style=3D"color:#660">&lt;</span><=
span style=3D"color:#008">typename</span><span style=3D"color:#000"> T</spa=
n><span style=3D"color:#660">&gt;</span><span style=3D"color:#000"><br></sp=
an><span style=3D"color:#008">class</span><span style=3D"color:#000"> priva=
te_access_token<br></span><span style=3D"color:#660">{</span><span style=3D=
"color:#000"><br>&nbsp; &nbsp; </span><span style=3D"color:#008">using</spa=
n><span style=3D"color:#000"> type </span><span style=3D"color:#660">=3D</s=
pan><span style=3D"color:#000"> </span><span style=3D"color:#800">/* undefi=
ned */</span><span style=3D"color:#660">;</span><span style=3D"color:#000">=
<br>&nbsp; &nbsp; </span><span style=3D"color:#008">friend</span><span styl=
e=3D"color:#000"> T</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></span></div></code></div><br><br>And we add to `class_memb=
er::pointer` (like from n4113) new default parameter:<br><div style=3D"back=
ground-color:rgb(250,250,250);border-color:rgb(187,187,187);border-style:so=
lid;border-width:1px;word-wrap:break-word"><code><div><span style=3D"color:=
#008">template</span><span style=3D"color:#660">&lt;</span><span style=3D"c=
olor:#008">typename</span><span style=3D"color:#000"> T</span><span style=
=3D"color:#660">,</span><span style=3D"color:#000"> size_t I</span><span st=
yle=3D"color:#660">,</span><span style=3D"color:#000"> token </span><span s=
tyle=3D"color:#660">=3D</span><span style=3D"color:#000"> </span><span styl=
e=3D"color:#008">void</span><span style=3D"color:#660">&gt;</span><span sty=
le=3D"color:#000"><br></span><span style=3D"color:#008">struct</span><span =
style=3D"color:#000"> pointer<br></span><span style=3D"color:#660">{</span>=
<span style=3D"color:#000"><br></span><span style=3D"color:#008">private</s=
pan><span style=3D"color:#660">:</span><span style=3D"color:#000"> </span><=
span style=3D"color:#800">//this line depend if I'th member is private</spa=
n><span style=3D"color:#000"><br>&nbsp; &nbsp; </span><span style=3D"color:=
#008">constexpr</span><span style=3D"color:#000"> </span><span style=3D"col=
or:#008">static</span><span style=3D"color:#000"> </span><span style=3D"col=
or:#606">SomeType</span><span style=3D"color:#000"> T</span><span style=3D"=
color:#660">::*</span><span style=3D"color:#000"> value </span><span style=
=3D"color:#660">=3D</span><span style=3D"color:#000"> </span><span style=3D=
"color:#800">/* something */</span><span style=3D"color:#660">;</span><span=
 style=3D"color:#000"><br>&nbsp; &nbsp; </span><span style=3D"color:#008">f=
riend</span><span style=3D"color:#000"> T</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><br></span><span style=3D"color:#008"=
>template</span><span style=3D"color:#660">&lt;</span><span style=3D"color:=
#008">typename</span><span style=3D"color:#000"> T</span><span style=3D"col=
or:#660">,</span><span style=3D"color:#000"> size_t I</span><span style=3D"=
color:#660">&gt;</span><span style=3D"color:#000"><br></span><span style=3D=
"color:#008">struct</span><span style=3D"color:#000"> pointer</span><span s=
tyle=3D"color:#660">&lt;</span><span style=3D"color:#000">T</span><span sty=
le=3D"color:#660">,</span><span style=3D"color:#000"> I</span><span style=
=3D"color:#660">,</span><span style=3D"color:#000"> </span><span style=3D"c=
olor:#008">typename</span><span style=3D"color:#000"> private_access_token<=
/span><span style=3D"color:#660">&lt;</span><span style=3D"color:#000">T</s=
pan><span style=3D"color:#660">&gt;::</span><span style=3D"color:#000">type=
 </span><span style=3D"color:#660">&gt;</span><span style=3D"color:#000"><b=
r></span><span style=3D"color:#660">{</span><span style=3D"color:#000"><br>=
</span><span style=3D"color:#008">public</span><span style=3D"color:#660">:=
</span><span style=3D"color:#000"> </span><span style=3D"color:#800">//alwa=
ys public with token</span><span style=3D"color:#000"><br>&nbsp; &nbsp; </s=
pan><span style=3D"color:#008">constexpr</span><span style=3D"color:#000"> =
</span><span style=3D"color:#008">static</span><span style=3D"color:#000"> =
</span><span style=3D"color:#606">SomeType</span><span style=3D"color:#000"=
> T</span><span style=3D"color:#660">::*</span><span style=3D"color:#000"> =
value </span><span style=3D"color:#660">=3D</span><span style=3D"color:#000=
"> </span><span style=3D"color:#800">/* something */</span><span style=3D"c=
olor:#660">;</span><span style=3D"color:#000"><br>&nbsp; &nbsp; </span><spa=
n style=3D"color:#008">friend</span><span style=3D"color:#000"> T</span><sp=
an style=3D"color:#660">;</span><span style=3D"color:#000"><br></span><span=
 style=3D"color:#660">};</span><span style=3D"color:#000"><br><br></span></=
div></code></div><br><br><br>Thanks to that, class implementation can have =
control over private access and allow sharing it to third party libraries w=
ithout exposing private fields to the wild.<br>Some class designer could ev=
en allow every one using it by exposing type form token:<br><div style=3D"b=
ackground-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"col=
or:#008">class</span><span style=3D"color:#000"> A<br></span><span style=3D=
"color:#660">{</span><span style=3D"color:#000"><br>&nbsp; &nbsp; </span><s=
pan style=3D"color:#008">int</span><span style=3D"color:#000"> a</span><spa=
n style=3D"color:#660">;</span><span style=3D"color:#000"><br></span><span =
style=3D"color:#008">public</span><span style=3D"color:#660">:</span><span =
style=3D"color:#000"><br>&nbsp; &nbsp; </span><span style=3D"color:#008">us=
ing</span><span style=3D"color:#000"> </span><span style=3D"color:#606">Pri=
vateToken</span><span style=3D"color:#000"> </span><span style=3D"color:#66=
0">=3D</span><span style=3D"color:#000"> private_access_token</span><span s=
tyle=3D"color:#660">&lt;</span><span style=3D"color:#000">A</span><span sty=
le=3D"color:#660">&gt;::</span><span style=3D"color:#000">type</span><span =
style=3D"color:#660">;</span><span style=3D"color:#000"><br></span><span st=
yle=3D"color:#660">};</span><span style=3D"color:#000"><br><br></span><span=
 style=3D"color:#008">class</span><span style=3D"color:#000"> B<br></span><=
span style=3D"color:#660">{</span><span style=3D"color:#000"><br>&nbsp; &nb=
sp; </span><span style=3D"color:#008">int</span><span style=3D"color:#000">=
 a</span><span style=3D"color:#660">;</span><span style=3D"color:#000"><br>=
&nbsp; &nbsp; </span><span style=3D"color:#008">int</span><span style=3D"co=
lor:#000"> b</span><span style=3D"color:#660">;</span><span style=3D"color:=
#000"><br></span><span style=3D"color:#008">public</span><span style=3D"col=
or:#660">:</span><span style=3D"color:#000"><br>&nbsp; &nbsp; std</span><sp=
an style=3D"color:#660">::</span><span style=3D"color:#008">string</span><s=
pan style=3D"color:#000"> to_string</span><span style=3D"color:#660">()</sp=
an><span style=3D"color:#000"> </span><span style=3D"color:#660">{</span><s=
pan style=3D"color:#000"> </span><span style=3D"color:#008">return</span><s=
pan style=3D"color:#000"> third_party_func</span><span style=3D"color:#660"=
>&lt;</span><span style=3D"color:#000">private_<wbr>access_token</span><spa=
n style=3D"color:#660">&lt;</span><span style=3D"color:#000">B</span><span =
style=3D"color:#660">&gt;::</span><span style=3D"color:#000">type</span><sp=
an style=3D"color:#660">&gt;(</span><span style=3D"color:#008">this</span><=
span style=3D"color:#660">);</span><span style=3D"color:#000"> </span><span=
 style=3D"color:#660">}</span><span style=3D"color:#000"><br></span><span s=
tyle=3D"color:#660">};</span><span style=3D"color:#000"><br><br></span></di=
v></code></div><br><br>Do you think that could be good solution for that?<b=
r><br><br></div></blockquote></div></div></blockquote></div>

<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"http://groups.google.com/a/isocpp.org/group/=
std-proposals/">http://groups.google.com/a/isocpp.org/group/std-proposals/<=
/a>.<br />

------=_Part_838_2008125813.1426281911699--
------=_Part_837_985633932.1426281911699--

.
