220 2312 <CAGRMWAnEs2MFoPT_JAoWCCkwocaUiJd+vLt5wEePX4=8gFDxzg@mail.gmail.com> article
Path: news.gmane.org!not-for-mail
From: Vladimir Batov <vb.mail.247@gmail.com>
Newsgroups: gmane.comp.lang.c++.isocpp.proposals
Subject: Re: optional<T>, one more value or two states
Date: Sun, 27 Jan 2013 08:02:20 +1100
Lines: 332
Approved: news@gmane.org
Message-ID: <CAGRMWAnEs2MFoPT_JAoWCCkwocaUiJd+vLt5wEePX4=8gFDxzg@mail.gmail.com>
References: <CAGsORuC1ADLXgS9AZZiTo=knmhT-+9Yj+82v+b8Nq_WJpb1fOg@mail.gmail.com>
	<CAFk2RUZyZA0LLUNuVNcnibv+qBF69jMytWQL3tkp-Kp21oEU+A@mail.gmail.com>
	<CAGsORuB-Qkx-LaXj2jO4yLrwN524kiJONSg7oczkQZHYaJ6ASg@mail.gmail.com>
	<d360a952-28ae-4d57-bb20-96fd08725a0b@isocpp.org>
	<CAPXezF_JggyMaXjGS9r1EAGVu1NhQBEyGEXB8tKmVqgFfjoCeg@mail.gmail.com>
	<CALJmx62zJd_tZ=XYL7TaSkRN6432SObwH9YS87eLX-h_pMuFYQ@mail.gmail.com>
	<CAOHCbivAK0ypmMhrhJ3zKpF8BHu3h_rUNzeao-HnibJkC-qqGw@mail.gmail.com>
	<ef15483d-5665-4da3-9b79-aefd3c725e1b@isocpp.org>
	<CAOHCbithEUfm+w_06V71=hpkqGUJvqiyDFqD7fesfgLy4uUieg@mail.gmail.com>
	<2c2b9360-8e5e-422d-9b85-124bd947b004@isocpp.org>
	<CAOHCbivJzdQbe22URgRuahCYYDPG8Ygsc4VG7f61zRBWXogekg@mail.gmail.com>
	<4f505b21-669a-4ef0-95b9-edf9e5afa22d@isocpp.org>
	<36691ed8-3c44-4eb5-885f-27067fce7f40@isocpp.org>
	<0eea8a86-edef-4115-ac35-5f303bb77b45@isocpp.org>
Reply-To: std-proposals@isocpp.org
NNTP-Posting-Host: plane.gmane.org
Mime-Version: 1.0
Content-Type: multipart/alternative; boundary=14dae93403471dcfa804d4375c95
X-Trace: ger.gmane.org 1359234204 14777 80.91.229.3 (26 Jan 2013 21:03:24 GMT)
X-Complaints-To: usenet@ger.gmane.org
NNTP-Posting-Date: Sat, 26 Jan 2013 21:03:24 +0000 (UTC)
To: std-proposals@isocpp.org
Original-X-From: std-proposals+bncBCE7XWGGWIOBBXMISGEAKGQEQOHMN2Q@isocpp.org Sat Jan 26 22:03:44 2013
Return-path: <std-proposals+bncBCE7XWGGWIOBBXMISGEAKGQEQOHMN2Q@isocpp.org>
Envelope-to: gclcip-std-proposals@m.gmane.org
Original-Received: from mail-ia0-f199.google.com ([209.85.210.199])
	by plane.gmane.org with esmtp (Exim 4.69)
	(envelope-from <std-proposals+bncBCE7XWGGWIOBBXMISGEAKGQEQOHMN2Q@isocpp.org>)
	id 1TzCud-0006fa-P8
	for gclcip-std-proposals@m.gmane.org; Sat, 26 Jan 2013 22:03:44 +0100
Original-Received: by mail-ia0-f199.google.com with SMTP id u20sf4722190iag.2
        for <gclcip-std-proposals@m.gmane.org>; Sat, 26 Jan 2013 13:03:22 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20120113;
        h=x-received:x-beenthere:x-received:x-received:received-spf
         :mime-version:x-received:in-reply-to:references:date:message-id
         :subject:from:to:x-original-sender:x-original-authentication-results
         :reply-to:precedence:mailing-list:list-id:x-google-group-id
         :list-post:list-help:list-archive:list-subscribe:list-unsubscribe
         :content-type;
        bh=KA8KLU5NsbvVJIIEehaIwjBNoUXZ26ByPhMn8ADGlJY=;
        b=NHA75Lgd331V/nz288pY4IoY9P2mq3Ql0NfhMWKDKZrMkbZYDQD8fjhuGhccJmwCVv
         k3DM1rZXzUx8Zy4B7tK3ELMeZ6EWCewEf7TBclMak9mnQDoL+zC5mP2DYjtO09x2TvEo
         jT8P7uGZXsJkMpC85utyKaJuQggQ8g+suysVLXeF+P3UsGqqHjq5Lv2jgFDxqomZbcJD
         LlXndEEOUn61AjAR+JC74OXfWsPSEAhreOSp3m9tTwYKl40sJnHdj8vgWY36nIX8/vba
         A7h6sIrbDfiWt8EqH/xn4QmmUIYQ6hY0R0F9pSs8odley1bA1 
X-Received: by 10.50.237.73 with SMTP id va9mr2342044igc.4.1359234141589;
        Sat, 26 Jan 2013 13:02:21 -0800 (PST)
X-BeenThere: std-proposals@isocpp.org
Original-Received: by 10.50.152.166 with SMTP id uz6ls1158855igb.17.gmail; Sat, 26 Jan
 2013 13:02:20 -0800 (PST)
X-Received: by 10.50.42.232 with SMTP id r8mr1678165igl.100.1359234140808;
        Sat, 26 Jan 2013 13:02:20 -0800 (PST)
X-Received: by 10.50.42.232 with SMTP id r8mr1678163igl.100.1359234140768;
        Sat, 26 Jan 2013 13:02:20 -0800 (PST)
Original-Received: from mail-ia0-x22c.google.com (ia-in-x022c.1e100.net [2607:f8b0:4001:c02::22c])
        by mx.google.com with ESMTPS id pl6si4460347icb.92.2013.01.26.13.02.20
        (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128);
        Sat, 26 Jan 2013 13:02:20 -0800 (PST)
Received-SPF: pass (google.com: domain of vb.mail.247@gmail.com designates 2607:f8b0:4001:c02::22c as permitted sender) client-ip=2607:f8b0:4001:c02::22c;
Original-Received: by mail-ia0-f172.google.com with SMTP id u8so2402230iag.17
        for <std-proposals@isocpp.org>; Sat, 26 Jan 2013 13:02:20 -0800 (PST)
X-Received: by 10.50.179.99 with SMTP id df3mr1681539igc.94.1359234140589;
 Sat, 26 Jan 2013 13:02:20 -0800 (PST)
Original-Received: by 10.42.212.15 with HTTP; Sat, 26 Jan 2013 13:02:20 -0800 (PST)
In-Reply-To: <0eea8a86-edef-4115-ac35-5f303bb77b45@isocpp.org>
X-Original-Sender: vb.mail.247@gmail.com
X-Original-Authentication-Results: mx.google.com;       spf=pass (google.com:
 domain of vb.mail.247@gmail.com designates 2607:f8b0:4001:c02::22c as
 permitted sender) smtp.mail=vb.mail.247@gmail.com;       dkim=pass header.i=@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?hl=en>,
 <mailto:std-proposals@isocpp.org>
List-Help: <http://support.google.com/a/isocpp.org/bin/topic.py?hl=en&topic=25838>,
 <mailto:std-proposals+help@isocpp.org>
List-Archive: <http://groups.google.com/a/isocpp.org/group/std-proposals/?hl=en>
List-Subscribe: <http://groups.google.com/a/isocpp.org/group/std-proposals/subscribe?hl=en>,
 <mailto:std-proposals+subscribe@isocpp.org>
List-Unsubscribe: <http://groups.google.com/a/isocpp.org/group/std-proposals/subscribe?hl=en>,
 <mailto:googlegroups-manage+399137483710+unsubscribe@googlegroups.com>
Xref: news.gmane.org gmane.comp.lang.c++.isocpp.proposals:2312
Archived-At: <http://permalink.gmane.org/gmane.comp.lang.c++.isocpp.proposals/2312>

--14dae93403471dcfa804d4375c95
Content-Type: text/plain; charset=ISO-8859-1

On Sat, Jan 26, 2013 at 11:54 PM, Nicol Bolas <jmckesson@gmail.com> wrote:

> On Saturday, January 26, 2013 2:09:36 AM UTC-8, Vladimir Batov wrote:
>>
>> On Saturday, January 26, 2013 10:22:11 AM UTC+11, Nicol Bolas wrote:
>>>
>>> On Friday, January 25, 2013 2:09:20 PM UTC-8, Tony V E wrote:
>>>>
>>>> On Fri, Jan 25, 2013 at 3:20 PM, Nicol Bolas <jmck...@gmail.com>
>>>> wrote:
>>>> > ...
>>>> Do you think we should back away from all the pointer-ish interface
>>>> parts and move more towards container-ish?
>>>>
>>>
>> "We" are reading the 3rd revision of the document describing the facility
>> which has been in heavy use for a while and which has already been
>> submitted for standardization. "we should back away from all the
>> pointer-ish interface"... Is it a serious question or a tease?
>>
>>
>>
>>> No it should not. I'm not particularly enamoured with `operator*`, but
>>> `operator[]` makes no sense at all. Why not just `value` (or `get` for
>>> those who like that)? Do we really need an operator at all?
>>>
>>
>> Uhm, because we need to dereference 'optional' and the language has a
>> dereferencing operator (op*) which happens to be used everywhere else to
>> dereference.
>>
>
> That's called "assuming the conclusion" or "begging the question".
>

Why beg the question when you can ask the question you are begging for? :-)
Seriously though I was trying to convey my impression that the thread
(which I considered the question to be the culmination of) went on such a
tangent that it somewhat lost *practical* value for the class under
consideration/discussion taking into account its current state progress so
far. I might be wrong as usual.

The question in this case being whether `optional` should be thought of as
> being like a pointer. IE: that optional is a thing that can be dereferenced.
>

I fail to see the practical value of trying so hard and squeezing
'optional' into Procrustean bed of some other concept be that a container,
a pointer, or anything else. We can debate endlessly similarities and
differences. However, 'optional' serves a certain need and exists for a
reason. If 'optional' was a container, then an existing container would do
just fine. If 'optional' was a pointer, then an existing pointer would be
used instead. Jack and Jill are similar from one angle and different from
another. Do we *have* to label Jack "a Jill with a dongle" and force him to
wear dress? I hope you get my drift.


> You don't dereference an optional any more than you dereference a
> std::vector. You only dereference *references* (it's right there in the
> name),
>

Uhm, I strongly feel that you treat naming and the language wa-a-a-y to
rigidly. You are not only "derail rails" and "debunk bunks". As for
"dereferencing" then it assumes indirection. In fact, Microsoft even
lists/names op* as ans indirection operator:

http://msdn.microsoft.com/en-us/library/fw63e3c3%28v=vs.71%29.aspx

Obviously, one can apply dereferencing/indirection everywhere it makes
sense. Most notably the proxy pattern which 'optional' is a representative
of.


> and one of the most important aspects of optional is that it has *value*semantics, not reference semantics. Optional is not a reference, so it
> doesn't make sense to use reference-like operations on it.
>

Well, again, I feel that for one reason or another you are forcing yourself
in a black&white world when real life is multi-faceted and multi-colored.


> Dereferencing an optional makes no more sense than dereferencing an
> integer.
>

Uhm, how does comparison with an 'integer' prove anything? Do 'optional'
and 'integer' have much in common? A real, say, horse has more in common
with a plastic figurine mimicking a horse. Still, I do not dare to say that
feeding a horse makes no more sense than feeding a plastic figurine.



>
> There is no "all the pointer-ish interface"; there's only `operator*.
>>> That's the only part of optional that is like a pointer (OK, the `explicit
>>> operator bool` too, but that's hardly unique to pointers); everything else
>>> works differently from pointers.
>>>
>>
>> There is nothing "pointer-ish" about the operator called a dereferencing
>> operator.
>>
>
> There is only one C++ type upon which applying uniary operator* results in
> guaranteed dereferencing. And those are pointers.
>

I am not sure how to respond to this one. I am quite lost about
"guaranteed" dereferencing and the statement is plain wrong in the context
of C++.



> Pointers may not be the only things you can use uniary operator* on, but
> the user expectation of it is very clear: dereferencing a reference type.
> std::ref is a reference type. std::unique_ptr is a reference type.
>

"user expectation of it is very clear"... I usually throw in the towel when
people start speaking for the whole humanity or considerable chunks of it.
I have no crystal ball or mystic powers to represent such a wide audience
and, therefore, cannot argue on such a high level. So, regretfully, I have
to give up arguing my point. It was fun though.



>
> std::optional is not.
>
> Customization (oveloading) of that op* together with the other
>> dereferencing op->() is "important to a class of interesting programs" (as
>> Stroustrup puts it).
>>
>
> No, the ability to fetch the value from an optional is important. Exactly
> how you do that is dealer's choice.
>
> --
>
> ---
> You received this message because you are subscribed to the Google Groups
> "ISO C++ Standard - Future Proposals" group.
> To post to this group, send email to std-proposals@isocpp.org.
> To unsubscribe from this group, send email to
> std-proposals+unsubscribe@isocpp.org.
>
> Visit this group at
> http://groups.google.com/a/isocpp.org/group/std-proposals/?hl=en.
>
>
>

-- 

--- 
You received this message because you are subscribed to the Google Groups "ISO C++ Standard - Future Proposals" group.
To post to this group, send email to std-proposals@isocpp.org.
To unsubscribe from this group, send email to std-proposals+unsubscribe@isocpp.org.
Visit this group at http://groups.google.com/a/isocpp.org/group/std-proposals/?hl=en.



--14dae93403471dcfa804d4375c95
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

<div class=3D"gmail_quote">On Sat, Jan 26, 2013 at 11:54 PM, Nicol Bolas <s=
pan dir=3D"ltr">&lt;<a href=3D"mailto:jmckesson@gmail.com" target=3D"_blank=
">jmckesson@gmail.com</a>&gt;</span> wrote:<br><blockquote class=3D"gmail_q=
uote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1e=
x">
<div class=3D"im">On Saturday, January 26, 2013 2:09:36 AM UTC-8, Vladimir =
Batov wrote:<blockquote class=3D"gmail_quote" style=3D"margin:0;margin-left=
:0.8ex;border-left:1px #ccc solid;padding-left:1ex">On Saturday, January 26=
, 2013 10:22:11 AM UTC+11, Nicol Bolas wrote:<blockquote class=3D"gmail_quo=
te" style=3D"margin:0;margin-left:0.8ex;border-left:1px #ccc solid;padding-=
left:1ex">
On Friday, January 25, 2013 2:09:20 PM UTC-8, Tony V E wrote:<blockquote cl=
ass=3D"gmail_quote" style=3D"margin:0;margin-left:0.8ex;border-left:1px #cc=
c solid;padding-left:1ex">On Fri, Jan 25, 2013 at 3:20 PM, Nicol Bolas &lt;=
<a>jmck...@gmail.com</a>&gt; wrote:
<br>&gt; ...
<br>
Do you think we should back away from all the pointer-ish interface
<br>parts and move more towards container-ish?=A0 <br></blockquote></blockq=
uote><div><br>&quot;We&quot; are reading the 3rd revision of the document d=
escribing the facility which has been in heavy use for a while and which ha=
s already been submitted for standardization. &quot;we should back away fro=
m all the pointer-ish interface&quot;...
Is it a serious question or a tease?<br>=A0<br></div><div>=A0</div><blockqu=
ote class=3D"gmail_quote" style=3D"margin:0;margin-left:0.8ex;border-left:1=
px #ccc solid;padding-left:1ex"><blockquote class=3D"gmail_quote" style=3D"=
margin:0;margin-left:0.8ex;border-left:1px #ccc solid;padding-left:1ex">
</blockquote><div>No it should not. I&#39;m not particularly enamoured with=
 `operator*`, but `operator[]` makes no sense at all. Why not just `value` =
(or `get` for those who like that)? Do we really need an operator at all?<b=
r>
</div></blockquote><div><br>Uhm, because we need to dereference &#39;option=
al&#39; and the language has a dereferencing operator (op*) which happens t=
o be used everywhere else to dereference.<br></div></blockquote></div><div>
<br>That&#39;s called &quot;assuming the conclusion&quot; or &quot;begging =
the question&quot;. </div></blockquote><div><br>Why beg the question when y=
ou can ask the question you are begging for? :-) Seriously though I was try=
ing to convey my impression that the thread (which I considered the questio=
n to be the culmination of) went on such a tangent that it somewhat lost *p=
ractical* value for the class under consideration/discussion taking into ac=
count its current state progress so far. I might be wrong as usual.<br>
<br></div><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;bord=
er-left:1px #ccc solid;padding-left:1ex"><div>The question in this case bei=
ng whether `optional` should be thought of as being like a pointer. IE: tha=
t optional is a thing that can be dereferenced.<br>
</div></blockquote><div><br>I fail to see the practical value of trying so =
hard and squeezing &#39;optional&#39; into Procrustean bed of some other co=
ncept be that a container, a pointer, or anything else. We can debate endle=
ssly similarities and differences. However, &#39;optional&#39; serves a cer=
tain need and exists for a reason. If &#39;optional&#39; was a container, t=
hen an existing container would do just fine. If &#39;optional&#39; was a p=
ointer, then an existing pointer would be used instead. Jack and Jill are s=
imilar from one angle and different from another. Do we *have* to label Jac=
k &quot;a Jill with a dongle&quot; and force him to wear dress? I hope you =
get my drift.<br>
=A0</div><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;borde=
r-left:1px #ccc solid;padding-left:1ex"><div>You don&#39;t dereference an o=
ptional any more than you dereference a std::vector. You only dereference <=
i>references</i> (it&#39;s right there in the name), </div>
</blockquote><div><br>Uhm, I strongly feel that you treat naming and the la=
nguage wa-a-a-y to rigidly. You are not only &quot;derail rails&quot; and &=
quot;debunk bunks&quot;. As for &quot;dereferencing&quot; then it assumes i=
ndirection. In fact, Microsoft even lists/names op* as ans indirection oper=
ator:<br>
<br><a href=3D"http://msdn.microsoft.com/en-us/library/fw63e3c3%28v=3Dvs.71=
%29.aspx">http://msdn.microsoft.com/en-us/library/fw63e3c3%28v=3Dvs.71%29.a=
spx</a><br><br>Obviously, one can apply dereferencing/indirection everywher=
e it makes sense. Most notably the proxy pattern which &#39;optional&#39; i=
s a representative of.<br>
=A0<br></div><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;b=
order-left:1px #ccc solid;padding-left:1ex"><div>and one of the most import=
ant aspects of optional is that it has <i>value</i> semantics, not referenc=
e semantics. Optional is not a reference, so it doesn&#39;t make sense to u=
se reference-like operations on it.<br>
</div></blockquote><div><br>Well, again, I feel that for one reason or anot=
her you are forcing yourself in a black&amp;white world when real life is m=
ulti-faceted and multi-colored.=A0 <br>=A0</div><blockquote class=3D"gmail_=
quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1=
ex">
<div>Dereferencing an optional makes no more sense than dereferencing an in=
teger.<br></div></blockquote><div><br>Uhm, how does comparison with an &#39=
;integer&#39; prove anything? Do &#39;optional&#39; and &#39;integer&#39; h=
ave much in common? A real, say, horse has more in common with a plastic fi=
gurine mimicking a horse. Still, I do not dare to say that feeding a horse =
makes no more sense than feeding a plastic figurine.=A0 =A0 <br>
<br>=A0</div><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;b=
order-left:1px #ccc solid;padding-left:1ex"><div><br></div><div class=3D"im=
"><blockquote class=3D"gmail_quote" style=3D"margin:0;margin-left:0.8ex;bor=
der-left:1px #ccc solid;padding-left:1ex">
<div></div><blockquote class=3D"gmail_quote" style=3D"margin:0;margin-left:=
0.8ex;border-left:1px #ccc solid;padding-left:1ex"><div>There is no &quot;a=
ll the pointer-ish interface&quot;; there&#39;s only `operator*. That&#39;s=
 the only part of optional that is like a pointer (OK, the `explicit operat=
or bool` too, but that&#39;s hardly unique to pointers); everything else wo=
rks differently from pointers.<br>
</div></blockquote><div><br>There is nothing &quot;pointer-ish&quot; about =
the operator called a dereferencing operator.</div></blockquote></div><div>=
<br>There is only one C++ type upon which applying uniary operator* results=
 in guaranteed dereferencing. And those are pointers.<br>
</div></blockquote><div><br>I am not sure how to respond to this one. I am =
quite lost about &quot;guaranteed&quot; dereferencing and the statement is =
plain wrong in the context of C++.<br><br>=A0</div><blockquote class=3D"gma=
il_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-lef=
t:1ex">
<div>Pointers may not be the only things you can use uniary operator* on, b=
ut the user expectation of it is very clear: dereferencing a reference type=
.. std::ref is a reference type. std::unique_ptr is a reference type.<br>
</div></blockquote><div><br>&quot;user expectation of it is very clear&quot=
;... I usually throw in the towel when people start speaking for the whole =
humanity or considerable chunks of it. I have no crystal ball or mystic pow=
ers to represent such a wide audience and, therefore, cannot argue on such =
a high level. So, regretfully, I have to give up arguing my point. It was f=
un though.<br>
<br>=A0</div><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;b=
order-left:1px #ccc solid;padding-left:1ex"><div><br>std::optional is not.<=
br><br></div><div class=3D"im"><blockquote class=3D"gmail_quote" style=3D"m=
argin:0;margin-left:0.8ex;border-left:1px #ccc solid;padding-left:1ex">
<div>Customization (oveloading) of that op* together with the other derefer=
encing op-&gt;() is &quot;important to a class of interesting programs&quot=
; (as Stroustrup puts it).</div></blockquote></div><div><br>No, the ability=
 to fetch the value from an optional is important. Exactly how you do that =
is dealer&#39;s choice.</div>
<div class=3D"im">

<p></p>

-- <br>
=A0<br>
--- <br>
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br></div><div class=
=3D"im">
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" target=3D"_blank">std-proposals@isocpp.org</a>.<br></div>
To unsubscribe from this group, send email to <a href=3D"mailto:std-proposa=
ls%2Bunsubscribe@isocpp.org" target=3D"_blank">std-proposals+unsubscribe@is=
ocpp.org</a>.<div class=3D"HOEnZb"><div class=3D"h5"><br>
Visit this group at <a href=3D"http://groups.google.com/a/isocpp.org/group/=
std-proposals/?hl=3Den" target=3D"_blank">http://groups.google.com/a/isocpp=
..org/group/std-proposals/?hl=3Den</a>.<br>
=A0<br>
=A0<br>
</div></div></blockquote></div><br>

<p></p>

-- <br />
&nbsp;<br />
--- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br />
To post to this group, send email to std-proposals@isocpp.org.<br />
To unsubscribe from this group, send email to std-proposals+unsubscribe@iso=
cpp.org.<br />
Visit this group at <a href=3D"http://groups.google.com/a/isocpp.org/group/=
std-proposals/?hl=3Den">http://groups.google.com/a/isocpp.org/group/std-pro=
posals/?hl=3Den</a>.<br />
&nbsp;<br />
&nbsp;<br />

--14dae93403471dcfa804d4375c95--

.
