220 13492 <b57857f3-c23a-4962-acdf-f8c043530d57@isocpp.org> article
Path: news.gmane.org!not-for-mail
From: Myriachan <myriachan@gmail.com>
Newsgroups: gmane.comp.lang.c++.isocpp.proposals
Subject: Re: Some safety for C: add array_view overloads for
 snprintf() and others
Date: Thu, 2 Oct 2014 01:23:14 -0700 (PDT)
Lines: 258
Approved: news@gmane.org
Message-ID: <b57857f3-c23a-4962-acdf-f8c043530d57@isocpp.org>
References: <6cbdd555-44e4-4049-8558-6dc76911b388@isocpp.org>
 <a8337268-a886-4e6f-930d-8a7ead75a413@isocpp.org>
Reply-To: std-proposals@isocpp.org
NNTP-Posting-Host: plane.gmane.org
Mime-Version: 1.0
Content-Type: multipart/alternative; 
	boundary="----=_Part_425_2093090180.1412238194540"
X-Trace: ger.gmane.org 1412238202 8955 80.91.229.3 (2 Oct 2014 08:23:22 GMT)
X-Complaints-To: usenet@ger.gmane.org
NNTP-Posting-Date: Thu, 2 Oct 2014 08:23:22 +0000 (UTC)
To: std-proposals@isocpp.org
Original-X-From: std-proposals+bncBDKLT4PURQHRB5EWWSQQKGQETF67D6A@isocpp.org Thu Oct 02 10:23:18 2014
Return-path: <std-proposals+bncBDKLT4PURQHRB5EWWSQQKGQETF67D6A@isocpp.org>
Envelope-to: gclcip-std-proposals@m.gmane.org
Original-Received: from mail-pa0-f70.google.com ([209.85.220.70])
	by plane.gmane.org with esmtp (Exim 4.69)
	(envelope-from <std-proposals+bncBDKLT4PURQHRB5EWWSQQKGQETF67D6A@isocpp.org>)
	id 1XZbfS-0005kf-7r
	for gclcip-std-proposals@m.gmane.org; Thu, 02 Oct 2014 10:23:18 +0200
Original-Received: by mail-pa0-f70.google.com with SMTP id et14sf9990117pad.1
        for <gclcip-std-proposals@m.gmane.org>; Thu, 02 Oct 2014 01:23:16 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20120113;
        h=date:from:to:message-id:in-reply-to:references:subject:mime-version
         :x-original-sender:reply-to:precedence:mailing-list:list-id
         :list-post:list-help:list-archive:list-subscribe:list-unsubscribe
         :content-type;
        bh=wwAhPpfxx1tOUtQy5oMdJ1WXryK4+RD872SQtbIqBp0=;
        b=RBFXgsKq6YIp3NJ4NVAVSxaHJqm18vUBDp45kMtJRFZaUx4GAMJhFdz8x4RAthjl9i
         azri5hGClai1FG65/CNgRnovDHodldiL0Tt1v3EbfPY0cRFtOeOHGn4ChQs1L5ZhYH4P
         N9FF2MSvPj4ElmhStF5XK5RkmJX+8rSPEB+CeeaScOvMQsKaS2/hKCbsWgUJ6C6Xyxww
         D3MZjQz1P43pjyhSMqEPmDeoA3cVyE8AVL+INWv8bY50NOy+piw2Xo/paH5aCHOLi/fv
         bQ4dfarNLvwcZSDmO0N4oFMKJSAsfQkZSthzUFnMorMwrcMuF/02XrW6PGzyyxHcCCFd
         4cUg==
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:message-id:in-reply-to:references
         :subject:mime-version:x-original-sender:reply-to:precedence
         :mailing-list:list-id:list-post:list-help:list-archive
         :list-subscribe:list-unsubscribe:content-type;
        bh=wwAhPpfxx1tOUtQy5oMdJ1WXryK4+RD872SQtbIqBp0=;
        b=F3zdkcGzAB1NrhBOtxHe/KHbdq0ynUhZzjMxEtfDNXPdWMyeFiG2NQgFddjbwGhxpm
         NnGc8R+wJ0J+fu1adVMbkuyJmSc/5mSCNJ/BC8tcKNq6JnUHw+m526UqFXqHkz39Rmsg
         bCRkl7oxOb9wE2yJX+mbeKOA+yBDZ6lbAUZn79XJU3mEvL32KXYFmQnyWCBbKkT8ZhAT
         sZFbf/+BdTvq7tReIs/ESu4veMMh/G/BPdV8QnaofU4LD5bazjQg6/mMuLgzT81Cm0ta
         ho/0TqK/70qflasvqOpXxmAwyH8ZeMZGpQlLQ45UfI/b8myG9/bH09rNHeTfjGfCxkt8
         Q6jw==
X-Gm-Message-State: ALoCoQnDZX8Jxspj/80+8Spx+Ilh4xy4pC0jHD7BUlD8JQUP2dGd2gz/Ys+ZTYEjOPp0RGPh1bHy
X-Received: by 10.66.227.135 with SMTP id sa7mr50444566pac.19.1412238196951;
        Thu, 02 Oct 2014 01:23:16 -0700 (PDT)
X-BeenThere: std-proposals@isocpp.org
Original-Received: by 10.50.30.170 with SMTP id t10ls172474igh.18.canary; Thu, 02 Oct
 2014 01:23:16 -0700 (PDT)
X-Received: by 10.50.73.165 with SMTP id m5mr22292igv.14.1412238196330;
        Thu, 02 Oct 2014 01:23:16 -0700 (PDT)
In-Reply-To: <a8337268-a886-4e6f-930d-8a7ead75a413@isocpp.org>
X-Original-Sender: myriachan@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:13492
Archived-At: <http://permalink.gmane.org/gmane.comp.lang.c++.isocpp.proposals/13492>

------=_Part_425_2093090180.1412238194540
Content-Type: text/plain; charset=UTF-8

On Wednesday, October 1, 2014 10:37:39 AM UTC-7, Matthew Fioravante wrote:
>
> This idea is inspired by these blog posts and also my personal experience:
>
> http://randomascii.wordpress.com/2014/09/24/a-crash-of-great-opportunity/
> http://randomascii.wordpress.com/2013/04/03/stop-using-strncpy-already/
>
> Despite personal opinions or religous convictions about iostream vs 
> printf, many of us still use snprintf() to efficently format some data to a 
> buffer without allocating memory and using the handy printf syntax. Until a 
> uniform replacement for printf and iostream is found (may never happen!), 
> many of us will continue using snprintf.
>
>  On Wednesday, October 1, 2014 10:04:11 PM UTC-7, Matthew Fioravante wrote:

> Added some example header files here:
>
> https://github.com/fmatthew5876/stdcxx-safec/tree/master/include 
> <https://www.google.com/url?q=https%3A%2F%2Fgithub.com%2Ffmatthew5876%2Fstdcxx-safec%2Ftree%2Fmaster%2Finclude&sa=D&sntz=1&usg=AFQjCNEggz_KC5cXpBXOLxGcUO-pvU4CVg>
>
>
I'm a fan of ...printf, but would love it to come into this...well, 
millennium.  We have variadic templates and constexpr now.  Not only can 
its buffer overflow problems be solved as above, but its type-safety and 
extendability problems can be solved, too.

There's nothing really stopping us from having a %v format specifier that 
means to call std::printf_handler(const T &, const std::printf_parameters &) 
if it exists, and fall back to std::operator <<(std::ostream &, const T &), T::c_str() 
const or T::operator const char *() const if it doesn't.

I understand that there are certain things about iostream that are better, 
but there are also things about ...printf that are better.  You can't 
really beat iostream's direct calls to output types as opposed to ...printf 
needing to parse a string at runtime (something partly fixable with 
constexpr and variadic templates).  But you also can't compare how succinct std::printf("%06X", 
num); is to the cout alternative.

It's also a matter of preference.  There are people who use Visual Studio 
here at my employer who install a mod that makes its editor commands work 
like vim's.

Regarding your cstdio.hh: Your fread/fwrite could be more flexible, I 
suppose.  Perhaps:

template <typename T>
inline size_t fread(enable_if_t<is_pod<T>::value, array_view<T>> buf, FILE *
stream)
{
    return fread(buf.data(), sizeof(*buf.data()), buf.size(), stream);
}

Why array_view, though?  I mean, there's always been this sort of design:

template <std::size_t S>
inline int vsnprintf(char (&buf)[S], const char *format, va_list args)
{
    return vsnprintf(buf, S, format, args);
}

Melissa

-- 

--- 
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 email 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-proposals/.

------=_Part_425_2093090180.1412238194540
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">On Wednesday, October 1, 2014 10:37:39 AM UTC-7, Matthew F=
ioravante wrote:<blockquote class=3D"gmail_quote" style=3D"margin: 0;margin=
-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"lt=
r">This idea is inspired by these blog posts and also my personal experienc=
e:<br><br><a href=3D"http://randomascii.wordpress.com/2014/09/24/a-crash-of=
-great-opportunity/" target=3D"_blank">http://randomascii.wordpress.<wbr>co=
m/2014/09/24/a-crash-of-<wbr>great-opportunity/</a><br><a href=3D"http://ra=
ndomascii.wordpress.com/2013/04/03/stop-using-strncpy-already/" target=3D"_=
blank">http://randomascii.wordpress.<wbr>com/2013/04/03/stop-using-<wbr>str=
ncpy-already/</a><br><br>Despite
 personal opinions or religous convictions about iostream vs printf,=20
many of us still use snprintf() to efficently format some data to a=20
buffer without allocating memory and using the handy printf syntax.=20
Until a uniform replacement for printf and iostream is found (may never=20
happen!), many of us will continue using snprintf.<br><br></div></blockquot=
e><div>&nbsp;On Wednesday, October 1, 2014 10:04:11 PM UTC-7, Matthew Fiora=
vante wrote:</div><blockquote class=3D"gmail_quote" style=3D"margin: 0;marg=
in-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"=
ltr">Added some example header files here:<div><br></div><div><a href=3D"ht=
tps://www.google.com/url?q=3Dhttps%3A%2F%2Fgithub.com%2Ffmatthew5876%2Fstdc=
xx-safec%2Ftree%2Fmaster%2Finclude&amp;sa=3DD&amp;sntz=3D1&amp;usg=3DAFQjCN=
Eggz_KC5cXpBXOLxGcUO-pvU4CVg" target=3D"_blank" onmousedown=3D"this.href=3D=
'https://www.google.com/url?q\75https%3A%2F%2Fgithub.com%2Ffmatthew5876%2Fs=
tdcxx-safec%2Ftree%2Fmaster%2Finclude\46sa\75D\46sntz\0751\46usg\75AFQjCNEg=
gz_KC5cXpBXOLxGcUO-pvU4CVg';return true;" onclick=3D"this.href=3D'https://w=
ww.google.com/url?q\75https%3A%2F%2Fgithub.com%2Ffmatthew5876%2Fstdcxx-safe=
c%2Ftree%2Fmaster%2Finclude\46sa\75D\46sntz\0751\46usg\75AFQjCNEggz_KC5cXpB=
XOLxGcUO-pvU4CVg';return true;">https://github.com/<wbr>fmatthew5876/stdcxx=
-safec/<wbr>tree/master/include</a></div><div><br></div></div></blockquote>=
<div><br>I'm a fan of ...<span style=3D"font-family: courier new,monospace;=
">printf</span>, but would love it to come into this...well, millennium.&nb=
sp; We have variadic templates and <span style=3D"font-family: courier new,=
monospace;">constexpr</span> now.&nbsp; Not only can its buffer overflow pr=
oblems be solved as above, but its type-safety and extendability problems c=
an be solved, too.<br><br>There's nothing really stopping us from having a =
<span style=3D"font-family: courier new,monospace;">%v</span> format specif=
ier that means to call <span style=3D"font-family: courier new,monospace;">=
std::printf_handler(const T &amp;, const std::printf_parameters &amp;)</spa=
n> if it exists, and fall back to <span style=3D"font-family: courier new,m=
onospace;">std::operator &lt;&lt;(std::ostream &amp;, const T &amp;)</span>=
, <span style=3D"font-family: courier new,monospace;">T::c_str() const</spa=
n> or <span style=3D"font-family: courier new,monospace;">T::operator const=
 char *() const</span> if it doesn't.<br><br>I understand that there are ce=
rtain things about <span style=3D"font-family: courier new,monospace;">iost=
ream</span> that are better, but there are also things about ...<span style=
=3D"font-family: courier new,monospace;">printf</span> that are better.&nbs=
p; You can't really beat <span style=3D"font-family: courier new,monospace;=
">iostream</span>'s direct calls to output types as opposed to ...<span sty=
le=3D"font-family: courier new,monospace;">printf</span> needing to parse a=
 string at runtime (something partly fixable with <span style=3D"font-famil=
y: courier new,monospace;">constexpr</span> and variadic templates).&nbsp; =
But you also can't compare how succinct <span style=3D"font-family: courier=
 new,monospace;">std::printf("%06X", num);</span> is to the <span style=3D"=
font-family: courier new,monospace;">cout</span> alternative.<br><br>It's a=
lso a matter of preference.&nbsp; There are people who use Visual Studio he=
re at my employer who install a mod that makes its editor commands work lik=
e vim's.<br><br>Regarding your cstdio.hh: Your <span style=3D"font-family: =
courier new,monospace;">fread</span>/<span style=3D"font-family: courier ne=
w,monospace;">fwrite</span> could be more flexible, I suppose.&nbsp; Perhap=
s:<br><br><div class=3D"prettyprint" style=3D"background-color: rgb(250, 25=
0, 250); border-color: rgb(187, 187, 187); border-style: solid; border-widt=
h: 1px; word-wrap: break-word;"><code class=3D"prettyprint"><div class=3D"s=
ubprettyprint"><span style=3D"color: #008;" class=3D"styled-by-prettify">te=
mplate</span><span style=3D"color: #000;" class=3D"styled-by-prettify"> </s=
pan><span style=3D"color: #660;" class=3D"styled-by-prettify">&lt;</span><s=
pan style=3D"color: #008;" class=3D"styled-by-prettify">typename</span><spa=
n style=3D"color: #000;" class=3D"styled-by-prettify"> T</span><span style=
=3D"color: #660;" class=3D"styled-by-prettify">&gt;</span><span style=3D"co=
lor: #000;" class=3D"styled-by-prettify"><br></span><span style=3D"color: #=
008;" class=3D"styled-by-prettify">inline</span><span style=3D"color: #000;=
" class=3D"styled-by-prettify"> size_t fread</span><span style=3D"color: #6=
60;" class=3D"styled-by-prettify">(</span><span style=3D"color: #000;" clas=
s=3D"styled-by-prettify">enable_if_t</span><span style=3D"color: #660;" cla=
ss=3D"styled-by-prettify">&lt;</span><span style=3D"color: #000;" class=3D"=
styled-by-prettify">is_pod</span><span style=3D"color: #660;" class=3D"styl=
ed-by-prettify">&lt;</span><span style=3D"color: #000;" class=3D"styled-by-=
prettify">T</span><span style=3D"color: #660;" class=3D"styled-by-prettify"=
>&gt;::</span><span style=3D"color: #000;" class=3D"styled-by-prettify">val=
ue</span><span style=3D"color: #660;" class=3D"styled-by-prettify">,</span>=
<span style=3D"color: #000;" class=3D"styled-by-prettify"> array_view</span=
><span style=3D"color: #660;" class=3D"styled-by-prettify">&lt;</span><span=
 style=3D"color: #000;" class=3D"styled-by-prettify">T</span><span style=3D=
"color: #660;" class=3D"styled-by-prettify">&gt;&gt;</span><span style=3D"c=
olor: #000;" class=3D"styled-by-prettify"> buf</span><span style=3D"color: =
#660;" class=3D"styled-by-prettify">,</span><span style=3D"color: #000;" cl=
ass=3D"styled-by-prettify"> FILE </span><span style=3D"color: #660;" class=
=3D"styled-by-prettify">*</span><span style=3D"color: #000;" class=3D"style=
d-by-prettify">stream</span><span 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"color: #660;" class=3D"styled-by-prettify">{</s=
pan><span style=3D"color: #000;" class=3D"styled-by-prettify"><br>&nbsp; &n=
bsp; </span><span style=3D"color: #008;" class=3D"styled-by-prettify">retur=
n</span><span style=3D"color: #000;" class=3D"styled-by-prettify"> fread</s=
pan><span style=3D"color: #660;" class=3D"styled-by-prettify">(</span><span=
 style=3D"color: #000;" class=3D"styled-by-prettify">buf</span><span style=
=3D"color: #660;" class=3D"styled-by-prettify">.</span><span style=3D"color=
: #000;" class=3D"styled-by-prettify">data</span><span style=3D"color: #660=
;" class=3D"styled-by-prettify">(),</span><span style=3D"color: #000;" clas=
s=3D"styled-by-prettify"> </span><span style=3D"color: #008;" class=3D"styl=
ed-by-prettify">sizeof</span><span style=3D"color: #660;" class=3D"styled-b=
y-prettify">(*</span><span style=3D"color: #000;" class=3D"styled-by-pretti=
fy">buf</span><span style=3D"color: #660;" class=3D"styled-by-prettify">.</=
span><span style=3D"color: #000;" class=3D"styled-by-prettify">data</span><=
span style=3D"color: #660;" class=3D"styled-by-prettify">()),</span><span s=
tyle=3D"color: #000;" class=3D"styled-by-prettify"> buf</span><span style=
=3D"color: #660;" class=3D"styled-by-prettify">.</span><span style=3D"color=
: #000;" class=3D"styled-by-prettify">size</span><span style=3D"color: #660=
;" class=3D"styled-by-prettify">(),</span><span style=3D"color: #000;" clas=
s=3D"styled-by-prettify"> stream</span><span style=3D"color: #660;" class=
=3D"styled-by-prettify">);</span><span style=3D"color: #000;" class=3D"styl=
ed-by-prettify"><br></span><span style=3D"color: #660;" class=3D"styled-by-=
prettify">}</span><span style=3D"color: #000;" class=3D"styled-by-prettify"=
><br></span></div></code></div><br>Why <span style=3D"font-family: courier =
new,monospace;">array_view</span>, though?&nbsp; I mean, there's always bee=
n this sort of design:<br><br><div class=3D"prettyprint" style=3D"backgroun=
d-color: rgb(250, 250, 250); border-color: rgb(187, 187, 187); border-style=
: solid; border-width: 1px; word-wrap: break-word;"><code class=3D"prettypr=
int"><div class=3D"subprettyprint"><span style=3D"color: #008;" class=3D"st=
yled-by-prettify">template</span><span style=3D"color: #000;" class=3D"styl=
ed-by-prettify"> </span><span style=3D"color: #660;" class=3D"styled-by-pre=
ttify">&lt;</span><span style=3D"color: #000;" class=3D"styled-by-prettify"=
>std</span><span style=3D"color: #660;" class=3D"styled-by-prettify">::</sp=
an><span style=3D"color: #000;" class=3D"styled-by-prettify">size_t S</span=
><span style=3D"color: #660;" class=3D"styled-by-prettify">&gt;</span><span=
 style=3D"color: #000;" class=3D"styled-by-prettify"><br></span><span style=
=3D"color: #008;" class=3D"styled-by-prettify">inline</span><span style=3D"=
color: #000;" class=3D"styled-by-prettify"> </span><span style=3D"color: #0=
08;" class=3D"styled-by-prettify">int</span><span style=3D"color: #000;" cl=
ass=3D"styled-by-prettify"> vsnprintf</span><span style=3D"color: #660;" cl=
ass=3D"styled-by-prettify">(</span><span style=3D"color: #008;" class=3D"st=
yled-by-prettify">char</span><span style=3D"color: #000;" class=3D"styled-b=
y-prettify"> </span><span style=3D"color: #660;" class=3D"styled-by-prettif=
y">(&amp;</span><span style=3D"color: #000;" class=3D"styled-by-prettify">b=
uf</span><span style=3D"color: #660;" class=3D"styled-by-prettify">)[</span=
><span style=3D"color: #000;" class=3D"styled-by-prettify">S</span><span st=
yle=3D"color: #660;" class=3D"styled-by-prettify">],</span><span style=3D"c=
olor: #000;" class=3D"styled-by-prettify"> </span><span style=3D"color: #00=
8;" class=3D"styled-by-prettify">const</span><span style=3D"color: #000;" c=
lass=3D"styled-by-prettify"> </span><span style=3D"color: #008;" class=3D"s=
tyled-by-prettify">char</span><span style=3D"color: #000;" class=3D"styled-=
by-prettify"> </span><span style=3D"color: #660;" class=3D"styled-by-pretti=
fy">*</span><span style=3D"color: #000;" class=3D"styled-by-prettify">forma=
t</span><span style=3D"color: #660;" class=3D"styled-by-prettify">,</span><=
span style=3D"color: #000;" class=3D"styled-by-prettify"> va_list args</spa=
n><span style=3D"color: #660;" class=3D"styled-by-prettify">)</span><span s=
tyle=3D"color: #000;" class=3D"styled-by-prettify"><br></span><span style=
=3D"color: #660;" class=3D"styled-by-prettify">{</span><span style=3D"color=
: #000;" class=3D"styled-by-prettify"><br>&nbsp; &nbsp; </span><span style=
=3D"color: #008;" class=3D"styled-by-prettify">return</span><span style=3D"=
color: #000;" class=3D"styled-by-prettify"> vsnprintf</span><span style=3D"=
color: #660;" class=3D"styled-by-prettify">(</span><span style=3D"color: #0=
00;" class=3D"styled-by-prettify">buf</span><span style=3D"color: #660;" cl=
ass=3D"styled-by-prettify">,</span><span style=3D"color: #000;" class=3D"st=
yled-by-prettify"> S</span><span style=3D"color: #660;" class=3D"styled-by-=
prettify">,</span><span style=3D"color: #000;" class=3D"styled-by-prettify"=
> format</span><span style=3D"color: #660;" class=3D"styled-by-prettify">,<=
/span><span style=3D"color: #000;" class=3D"styled-by-prettify"> args</span=
><span style=3D"color: #660;" class=3D"styled-by-prettify">);</span><span s=
tyle=3D"color: #000;" class=3D"styled-by-prettify"><br></span><span style=
=3D"color: #660;" class=3D"styled-by-prettify">}</span><span style=3D"color=
: #000;" class=3D"styled-by-prettify"><br></span></div></code></div><br>Mel=
issa<br></div></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_425_2093090180.1412238194540--

.
