Topic: Proposal to add C99 designated initializers to C++


Author: Daryle Walker <darylew@gmail.com>
Date: Fri, 8 Nov 2013 02:48:15 -0800 (PST)
Raw View
------=_Part_364_8822468.1383907695542
Content-Type: text/plain; charset=ISO-8859-1

[Excuse any mistakes from me doing an all-nighter to get this proposal out
here.]

I made a proposal<http://htmlpreview.github.io/?https://raw.github.com/CTMacUser/multiarray-iso-proposal/master/designation-proposal.html>on how to have C99's designated initializers in C++. In C, you can precede
an initializer inside a struct/union or array aggregate with the access
method ([x] for array elements, ".Whatever" for structs and unions, and can
mix & match) to get to a specific subobject to be initialized. I had to
create the text nearly from scratch since C and C++ use very different ways
to express the same concepts. Plus C++ has to worry about non-dumb classes.

I'd especially like if the crew for Microsoft Visual Studio 2013 took a
look to see if I described your practice correctly.

Daryle W.

--

---
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_364_8822468.1383907695542
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div>[Excuse any mistakes from me doing an all-nighter to =
get this proposal out here.]</div><div><br></div><div>I made a <a href=3D"h=
ttp://htmlpreview.github.io/?https://raw.github.com/CTMacUser/multiarray-is=
o-proposal/master/designation-proposal.html">proposal</a> on how to have C9=
9's designated initializers in C++. In C, you can precede an initializer in=
side a struct/union or array aggregate with the access method ([x] for arra=
y elements, ".Whatever" for structs and unions, and can mix &amp; match) to=
 get to a specific subobject to be initialized. I had to create the text ne=
arly from scratch since C and C++ use&nbsp;very different ways to express t=
he same concepts. Plus C++ has to worry about non-dumb classes.</div><div><=
br></div><div>I'd especially like if the crew for Microsoft Visual Studio 2=
013 took a look to see if I described your practice correctly.</div><div><b=
r></div><div>Daryle W.</div><div><br></div></div>

<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 unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.<br />
To post to this group, send email to std-proposals@isocpp.org.<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_364_8822468.1383907695542--

.


Author: Roman Perepelitsa <roman.perepelitsa@gmail.com>
Date: Fri, 8 Nov 2013 12:27:40 +0100
Raw View
--047d7b6d7aaec8ddb004eaa8ac4d
Content-Type: text/plain; charset=ISO-8859-1

FYI: clang supports designated initializers for aggregates when compiling
in C++11 mode.

Roman Perepelitsa.


2013/11/8 Daryle Walker <darylew@gmail.com>

> [Excuse any mistakes from me doing an all-nighter to get this proposal out
> here.]
>
> I made a proposal<http://htmlpreview.github.io/?https://raw.github.com/CTMacUser/multiarray-iso-proposal/master/designation-proposal.html>on how to have C99's designated initializers in C++. In C, you can precede
> an initializer inside a struct/union or array aggregate with the access
> method ([x] for array elements, ".Whatever" for structs and unions, and can
> mix & match) to get to a specific subobject to be initialized. I had to
> create the text nearly from scratch since C and C++ use very different ways
> to express the same concepts. Plus C++ has to worry about non-dumb classes.
>
> I'd especially like if the crew for Microsoft Visual Studio 2013 took a
> look to see if I described your practice correctly.
>
> Daryle W.
>
>  --
>
> ---
> 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/.
>

--

---
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/.

--047d7b6d7aaec8ddb004eaa8ac4d
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">FYI: clang supports designated initializers for aggregates=
 when compiling in C++11 mode.<div><br></div><div>Roman Perepelitsa.</div><=
/div><div class=3D"gmail_extra"><br><br><div class=3D"gmail_quote">2013/11/=
8 Daryle Walker <span dir=3D"ltr">&lt;<a href=3D"mailto:darylew@gmail.com" =
target=3D"_blank">darylew@gmail.com</a>&gt;</span><br>

<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
x #ccc solid;padding-left:1ex"><div dir=3D"ltr"><div>[Excuse any mistakes f=
rom me doing an all-nighter to get this proposal out here.]</div><div><br><=
/div>

<div>I made a <a href=3D"http://htmlpreview.github.io/?https://raw.github.c=
om/CTMacUser/multiarray-iso-proposal/master/designation-proposal.html" targ=
et=3D"_blank">proposal</a> on how to have C99&#39;s designated initializers=
 in C++. In C, you can precede an initializer inside a struct/union or arra=
y aggregate with the access method ([x] for array elements, &quot;.Whatever=
&quot; for structs and unions, and can mix &amp; match) to get to a specifi=
c subobject to be initialized. I had to create the text nearly from scratch=
 since C and C++ use=A0very different ways to express the same concepts. Pl=
us C++ has to worry about non-dumb classes.</div>

<div><br></div><div>I&#39;d especially like if the crew for Microsoft Visua=
l Studio 2013 took a look to see if I described your practice correctly.</d=
iv><div><br></div><div>Daryle W.</div><span class=3D"HOEnZb"><font color=3D=
"#888888"><div>

<br></div></font></span></div><span class=3D"HOEnZb"><font color=3D"#888888=
">

<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>
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a href=3D"mailto:std-proposals%2Bunsubscribe@isocpp.org" target=3D=
"_blank">std-proposals+unsubscribe@isocpp.org</a>.<br>
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>
Visit this group at <a href=3D"http://groups.google.com/a/isocpp.org/group/=
std-proposals/" target=3D"_blank">http://groups.google.com/a/isocpp.org/gro=
up/std-proposals/</a>.<br>
</font></span></blockquote></div><br></div>

<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 unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.<br />
To post to this group, send email to std-proposals@isocpp.org.<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 />

--047d7b6d7aaec8ddb004eaa8ac4d--

.


Author: Daryle Walker <darylew@gmail.com>
Date: Sun, 10 Nov 2013 15:58:51 -0800 (PST)
Raw View
------=_Part_1907_9741748.1384127931300
Content-Type: text/plain; charset=ISO-8859-1

OK, so could representatives from both the Visual Studio and Clang teams
take a look? (If GCC also does it, or wants to, they can take a look too.)

Daryle W.


On Friday, November 8, 2013 6:27:40 AM UTC-5, Roman Perepelitsa wrote:
>
> FYI: clang supports designated initializers for aggregates when compiling
> in C++11 mode.
>
> Roman Perepelitsa.
>
>
> 2013/11/8 Daryle Walker <dar...@gmail.com <javascript:>>
>
>> [Excuse any mistakes from me doing an all-nighter to get this proposal
>> out here.]
>>
>> I made a proposal<http://htmlpreview.github.io/?https://raw.github.com/CTMacUser/multiarray-iso-proposal/master/designation-proposal.html>on how to have C99's designated initializers in C++. In C, you can precede
>> an initializer inside a struct/union or array aggregate with the access
>> method ([x] for array elements, ".Whatever" for structs and unions, and can
>> mix & match) to get to a specific subobject to be initialized. I had to
>> create the text nearly from scratch since C and C++ use very different ways
>> to express the same concepts. Plus C++ has to worry about non-dumb classes.
>>
>> I'd especially like if the crew for Microsoft Visual Studio 2013 took a
>> look to see if I described your practice correctly.
>>
>> Daryle W.
>>
>>  --
>>
>> ---
>> 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-proposal...@isocpp.org <javascript:>.
>> To post to this group, send email to std-pr...@isocpp.org <javascript:>.
>> Visit this group at
>> http://groups.google.com/a/isocpp.org/group/std-proposals/.
>>
>
>

--

---
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_1907_9741748.1384127931300
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">OK, so could representatives from both the Visual Studio a=
nd Clang teams take a look? (If GCC also does it, or wants to, they can tak=
e a look too.)<br><br>Daryle W.<br><br><br>On Friday, November 8, 2013 6:27=
:40 AM UTC-5, Roman Perepelitsa wrote:<blockquote class=3D"gmail_quote" sty=
le=3D"margin: 0;margin-left: 0.8ex;border-left: 1px #ccc solid;padding-left=
: 1ex;"><div dir=3D"ltr">FYI: clang supports designated initializers for ag=
gregates when compiling in C++11 mode.<div><br></div><div>Roman Perepelitsa=
..</div></div><div><br><br><div class=3D"gmail_quote">2013/11/8 Daryle Walke=
r <span dir=3D"ltr">&lt;<a href=3D"javascript:" target=3D"_blank" gdf-obfus=
cated-mailto=3D"KZhWvI3OZCgJ">dar...@gmail.com</a>&gt;</span><br>

<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
x #ccc solid;padding-left:1ex"><div dir=3D"ltr"><div>[Excuse any mistakes f=
rom me doing an all-nighter to get this proposal out here.]</div><div><br><=
/div>

<div>I made a <a href=3D"http://htmlpreview.github.io/?https://raw.github.c=
om/CTMacUser/multiarray-iso-proposal/master/designation-proposal.html" targ=
et=3D"_blank">proposal</a> on how to have C99's designated initializers in =
C++. In C, you can precede an initializer inside a struct/union or array ag=
gregate with the access method ([x] for array elements, ".Whatever" for str=
ucts and unions, and can mix &amp; match) to get to a specific subobject to=
 be initialized. I had to create the text nearly from scratch since C and C=
++ use&nbsp;very different ways to express the same concepts. Plus C++ has =
to worry about non-dumb classes.</div>

<div><br></div><div>I'd especially like if the crew for Microsoft Visual St=
udio 2013 took a look to see if I described your practice correctly.</div><=
div><br></div><div>Daryle W.</div><span><font color=3D"#888888"><div>

<br></div></font></span></div><span><font color=3D"#888888">

<p></p>

-- <br>
&nbsp;<br>
--- <br>
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.<br>
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a href=3D"javascript:" target=3D"_blank" gdf-obfuscated-mailto=3D"=
KZhWvI3OZCgJ">std-proposal...@<wbr>isocpp.org</a>.<br>
To post to this group, send email to <a href=3D"javascript:" target=3D"_bla=
nk" gdf-obfuscated-mailto=3D"KZhWvI3OZCgJ">std-pr...@isocpp.org</a>.<br>
Visit this group at <a href=3D"http://groups.google.com/a/isocpp.org/group/=
std-proposals/" target=3D"_blank">http://groups.google.com/a/<wbr>isocpp.or=
g/group/std-<wbr>proposals/</a>.<br>
</font></span></blockquote></div><br></div>
</blockquote></div>

<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 unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.<br />
To post to this group, send email to std-proposals@isocpp.org.<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_1907_9741748.1384127931300--

.


Author: Richard Smith <richard@metafoo.co.uk>
Date: Sun, 10 Nov 2013 18:42:14 -0800
Raw View
--089e011834d8fdf1dd04eaddadac
Content-Type: text/plain; charset=ISO-8859-1

The wording isn't quite right in a few ways, but CWG will deal with that if
the proposal gets past EWG. I would suggest not allowing the overriding
that C allows -- it's not necessary to get the majority of the value from
the feature, and it provides very surprising behavior. Just make it
ill-formed.

You should also define how the initializers are sequenced. In C they are
unsequenced, which doesn't match C++'s more-specified rules for braced
initializers. I would suggest making them sequenced in member order (rather
than, for instance, in order of appearance), so that designated
initialization exactly matches the behavior of constructor initializers.


On Sun, Nov 10, 2013 at 3:58 PM, Daryle Walker <darylew@gmail.com> wrote:

> OK, so could representatives from both the Visual Studio and Clang teams
> take a look? (If GCC also does it, or wants to, they can take a look too.)
>
> Daryle W.
>
>
>
> On Friday, November 8, 2013 6:27:40 AM UTC-5, Roman Perepelitsa wrote:
>
>> FYI: clang supports designated initializers for aggregates when compiling
>> in C++11 mode.
>>
>> Roman Perepelitsa.
>>
>>
>> 2013/11/8 Daryle Walker <dar...@gmail.com>
>>
>>> [Excuse any mistakes from me doing an all-nighter to get this proposal
>>> out here.]
>>>
>>> I made a proposal<http://htmlpreview.github.io/?https://raw.github.com/CTMacUser/multiarray-iso-proposal/master/designation-proposal.html>on how to have C99's designated initializers in C++. In C, you can precede
>>> an initializer inside a struct/union or array aggregate with the access
>>> method ([x] for array elements, ".Whatever" for structs and unions, and can
>>> mix & match) to get to a specific subobject to be initialized. I had to
>>> create the text nearly from scratch since C and C++ use very different ways
>>> to express the same concepts. Plus C++ has to worry about non-dumb classes.
>>>
>>> I'd especially like if the crew for Microsoft Visual Studio 2013 took a
>>> look to see if I described your practice correctly.
>>>
>>> Daryle W.
>>>
>>>  --
>>>
>>> ---
>>> 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-proposal...@isocpp.org.
>>> To post to this group, send email to std-pr...@isocpp.org.
>>>
>>> Visit this group at http://groups.google.com/a/isocpp.org/group/std-
>>> proposals/.
>>>
>>
>>  --
>
> ---
> 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/.
>

--

---
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/.

--089e011834d8fdf1dd04eaddadac
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">The wording isn&#39;t quite right in a few ways, but CWG w=
ill deal with that if the proposal gets past EWG. I would suggest not allow=
ing the overriding that C allows -- it&#39;s not necessary to get the major=
ity of the value from the feature, and it provides very surprising behavior=
.. Just make it ill-formed.<div>
<br></div><div>You should also define how the initializers are sequenced. I=
n C they are unsequenced, which doesn&#39;t match C++&#39;s more-specified =
rules for braced initializers. I would suggest making them sequenced in mem=
ber order (rather than, for instance, in order of appearance), so that desi=
gnated initialization exactly matches the behavior of constructor initializ=
ers.</div>
</div><div class=3D"gmail_extra"><br><br><div class=3D"gmail_quote">On Sun,=
 Nov 10, 2013 at 3:58 PM, Daryle Walker <span dir=3D"ltr">&lt;<a href=3D"ma=
ilto:darylew@gmail.com" target=3D"_blank">darylew@gmail.com</a>&gt;</span> =
wrote:<br>
<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
x #ccc solid;padding-left:1ex"><div dir=3D"ltr">OK, so could representative=
s from both the Visual Studio and Clang teams take a look? (If GCC also doe=
s it, or wants to, they can take a look too.)<br>
<br>Daryle W.<div class=3D"im"><br><br><br>On Friday, November 8, 2013 6:27=
:40 AM UTC-5, Roman Perepelitsa wrote:</div><blockquote class=3D"gmail_quot=
e" style=3D"margin:0;margin-left:0.8ex;border-left:1px #ccc solid;padding-l=
eft:1ex">
<div class=3D"im"><div dir=3D"ltr">FYI: clang supports designated initializ=
ers for aggregates when compiling in C++11 mode.<div><br></div><div>Roman P=
erepelitsa.</div></div></div><div><br><br><div class=3D"gmail_quote">2013/1=
1/8 Daryle Walker <span dir=3D"ltr">&lt;<a>dar...@gmail.com</a>&gt;</span><=
br>


<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
x #ccc solid;padding-left:1ex"><div class=3D"im"><div dir=3D"ltr"><div>[Exc=
use any mistakes from me doing an all-nighter to get this proposal out here=
..]</div>
<div><br></div>

<div>I made a <a href=3D"http://htmlpreview.github.io/?https://raw.github.c=
om/CTMacUser/multiarray-iso-proposal/master/designation-proposal.html" targ=
et=3D"_blank">proposal</a> on how to have C99&#39;s designated initializers=
 in C++. In C, you can precede an initializer inside a struct/union or arra=
y aggregate with the access method ([x] for array elements, &quot;.Whatever=
&quot; for structs and unions, and can mix &amp; match) to get to a specifi=
c subobject to be initialized. I had to create the text nearly from scratch=
 since C and C++ use=A0very different ways to express the same concepts. Pl=
us C++ has to worry about non-dumb classes.</div>


<div><br></div><div>I&#39;d especially like if the crew for Microsoft Visua=
l Studio 2013 took a look to see if I described your practice correctly.</d=
iv><div><br></div><div>Daryle W.</div><span><font color=3D"#888888"><div>


<br></div></font></span></div></div><span><font color=3D"#888888"><div clas=
s=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>
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a>std-proposal...@<u></u>isocpp.org</a>.<br>
To post to this group, send email to <a>std-pr...@isocpp.org</a>.<div class=
=3D"im"><br>
Visit this group at <a href=3D"http://groups.google.com/a/isocpp.org/group/=
std-proposals/" target=3D"_blank">http://groups.google.com/a/<u></u>isocpp.=
org/group/std-<u></u>proposals/</a>.<br>
</div></font></span></blockquote></div><br></div>
</blockquote></div><div class=3D"HOEnZb"><div class=3D"h5">

<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>
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a href=3D"mailto:std-proposals%2Bunsubscribe@isocpp.org" target=3D=
"_blank">std-proposals+unsubscribe@isocpp.org</a>.<br>
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>
Visit this group at <a href=3D"http://groups.google.com/a/isocpp.org/group/=
std-proposals/" target=3D"_blank">http://groups.google.com/a/isocpp.org/gro=
up/std-proposals/</a>.<br>
</div></div></blockquote></div><br></div>

<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 unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.<br />
To post to this group, send email to std-proposals@isocpp.org.<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 />

--089e011834d8fdf1dd04eaddadac--

.


Author: Thiago Macieira <thiago@macieira.org>
Date: Mon, 11 Nov 2013 16:16:11 +0900
Raw View
--nextPart1727233.6fxEWEGH4I
Content-Transfer-Encoding: 7Bit
Content-Type: text/plain; charset="us-ascii"

On domingo, 10 de novembro de 2013 18:42:14, Richard Smith wrote:
> You should also define how the initializers are sequenced. In C they are
> unsequenced, which doesn't match C++'s more-specified rules for braced
> initializers. I would suggest making them sequenced in member order (rather
> than, for instance, in order of appearance), so that designated
> initialization exactly matches the behavior of constructor initializers.

Shouldn't compilers emit then a diagnostic if you fail to sequence them in the
right order?

struct S {
    int a, b;
};

int i;
int f(int *i) { *i = 42; return 47; }

struct S g()
{
    struct S s = { .b = f(i), .a = i };
    return s;
}

When compiled as C99, the above returns { .a = 42, .b = 47 }.

--
Thiago Macieira - thiago (AT) macieira.info - thiago (AT) kde.org
   Software Architect - Intel Open Source Technology Center
      PGP/GPG: 0x6EF45358; fingerprint:
      E067 918B B660 DBD1 105C  966C 33F5 F005 6EF4 5358

--nextPart1727233.6fxEWEGH4I
Content-Type: application/pgp-signature; name="signature.asc"
Content-Description: This is a digitally signed message part.
Content-Transfer-Encoding: 7Bit

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.19 (GNU/Linux)

iD8DBQBSgIQ7M/XwBW70U1gRAiH/AJ0VtE0/yl7MQbDtodwE2EuOI+Z0vQCglyby
uMqaIrS9iX1acb64kUrE1cE=
=7iNl
-----END PGP SIGNATURE-----

--nextPart1727233.6fxEWEGH4I--


.


Author: Richard Smith <richard@metafoo.co.uk>
Date: Tue, 12 Nov 2013 17:36:03 -0800
Raw View
--001a113378d8fc626804eb04fc4e
Content-Type: text/plain; charset=ISO-8859-1

On Sun, Nov 10, 2013 at 11:16 PM, Thiago Macieira <thiago@macieira.org>wrote:

> On domingo, 10 de novembro de 2013 18:42:14, Richard Smith wrote:
> > You should also define how the initializers are sequenced. In C they are
> > unsequenced, which doesn't match C++'s more-specified rules for braced
> > initializers. I would suggest making them sequenced in member order
> (rather
> > than, for instance, in order of appearance), so that designated
> > initialization exactly matches the behavior of constructor initializers.
>
> Shouldn't compilers emit then a diagnostic if you fail to sequence them in
> the
> right order?
>

Sure, they can, just as they do for constructor initializers. And, just as
with constructor initializers, we need to sequence the subobject
initialization in subobject order, in order to get destructors to run in
the right order.


> struct S {
>     int a, b;
> };
>
> int i;
> int f(int *i) { *i = 42; return 47; }
>
> struct S g()
> {
>     struct S s = { .b = f(i), .a = i };
>

I assume you meant f(&i) here?

    return s;
> }
>
> When compiled as C99, the above returns { .a = 42, .b = 47 }.


Only by chance. C99 6.7.8/23 says: "The order in which any side effects
occur among the initialization list expressions is unspecified."

--

---
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/.

--001a113378d8fc626804eb04fc4e
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">On Sun, Nov 10, 2013 at 11:16 PM, Thiago Macieira <span di=
r=3D"ltr">&lt;<a href=3D"mailto:thiago@macieira.org" target=3D"_blank">thia=
go@macieira.org</a>&gt;</span> wrote:<br><div class=3D"gmail_extra"><div cl=
ass=3D"gmail_quote">
<blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-=
left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;p=
adding-left:1ex"><div class=3D"im">On domingo, 10 de novembro de 2013 18:42=
:14, Richard Smith wrote:<br>

&gt; You should also define how the initializers are sequenced. In C they a=
re<br>
&gt; unsequenced, which doesn&#39;t match C++&#39;s more-specified rules fo=
r braced<br>
&gt; initializers. I would suggest making them sequenced in member order (r=
ather<br>
&gt; than, for instance, in order of appearance), so that designated<br>
&gt; initialization exactly matches the behavior of constructor initializer=
s.<br>
<br>
</div>Shouldn&#39;t compilers emit then a diagnostic if you fail to sequenc=
e them in the<br>
right order?<br></blockquote><div><br></div><div>Sure, they can, just as th=
ey do for constructor initializers. And, just as with constructor initializ=
ers, we need to sequence the subobject initialization in subobject order, i=
n order to get destructors to run in the right order.</div>
<div>=A0</div><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px=
 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left=
-style:solid;padding-left:1ex">
struct S {<br>
=A0 =A0 int a, b;<br>
};<br>
<br>
int i;<br>
int f(int *i) { *i =3D 42; return 47; }<br>
<br>
struct S g()<br>
{<br>
=A0 =A0 struct S s =3D { .b =3D f(i), .a =3D i };<br></blockquote><div><br>=
</div><div>I assume you meant f(&amp;i) here?</div><div><br></div><blockquo=
te class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left-widt=
h:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-le=
ft:1ex">

=A0 =A0 return s;<br>
}<br>
<br>
When compiled as C99, the above returns { .a =3D 42, .b =3D 47 }.</blockquo=
te><div><br></div><div>Only by chance. C99 6.7.8/23 says: &quot;The order i=
n which any side effects occur among the initialization list expressions is=
 unspecified.&quot;</div>
</div></div></div>

<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 unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.<br />
To post to this group, send email to std-proposals@isocpp.org.<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 />

--001a113378d8fc626804eb04fc4e--

.


Author: Thiago Macieira <thiago@macieira.org>
Date: Wed, 13 Nov 2013 14:53:11 -0800
Raw View
On ter=E7a-feira, 12 de novembro de 2013 17:36:03, Richard Smith wrote:
> > Shouldn't compilers emit then a diagnostic if you fail to sequence them=
 in
> > the
> > right order?
>=20
> Sure, they can, just as they do for constructor initializers. And, just a=
s
> with constructor initializers, we need to sequence the subobject
> initialization in subobject order, in order to get destructors to run in
> the right order.

Good.

>=20
> > struct S {
> >=20
> >     int a, b;
> >=20
> > };
> >=20
> > int i;
> > int f(int *i) { *i =3D 42; return 47; }
> >=20
> > struct S g()
> > {
> >=20
> >     struct S s =3D { .b =3D f(i), .a =3D i };
>=20
> I assume you meant f(&i) here?

Yes. I had a reference first, then I changed to a pointer so I could compil=
e in=20
C mode...

>     return s;
>=20
> > }
> >=20
> > When compiled as C99, the above returns { .a =3D 42, .b =3D 47 }.
>=20
> Only by chance. C99 6.7.8/23 says: "The order in which any side effects
> occur among the initialization list expressions is unspecified."

Ah, ok. So my code actually has undefined behaviour. For C++, though, we do=
=20
have an order and we also have to initialise sub-objects in the correct ord=
er.

--=20
Thiago Macieira - thiago (AT) macieira.info - thiago (AT) kde.org
   Software Architect - Intel Open Source Technology Center
      PGP/GPG: 0x6EF45358; fingerprint:
      E067 918B B660 DBD1 105C  966C 33F5 F005 6EF4 5358

--=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/.

.


Author: Daryle Walker <darylew@gmail.com>
Date: Thu, 14 Nov 2013 02:57:10 -0800 (PST)
Raw View
------=_Part_5044_363003.1384426630950
Content-Type: text/plain; charset=ISO-8859-1

I uploaded a new version (2013-Nov-14)<http://htmlpreview.github.io/?https://raw.github.com/CTMacUser/multiarray-iso-proposal/master/designation-proposal.html>.
I completely redid the new paragraphs. I went beyond paragraph 4 of section
8.5.1 and covered the entire section. Am I justified in removing the
sections I suggested? Should the ones I didn't mention be altered? What
about 8.5.1/8? Is 8.5.1/I took much of a ripoff of 8.5.4/4?

I added changes to sections 8.5.4 and 14.5.3, but I don't know if those are
good enough. And what about 8.5.1/8?

I need more examples, especially ones that replace that deleted ones. (Make
sure to mention which new section/paragraph they go with.)

On Friday, November 8, 2013 5:48:15 AM UTC-5, Daryle Walker wrote:
>
> [Excuse any mistakes from me doing an all-nighter to get this proposal out
> here.]
>
> I made a proposal<http://htmlpreview.github.io/?https://raw.github.com/CTMacUser/multiarray-iso-proposal/master/designation-proposal.html>on how to have C99's designated initializers in C++. In C, you can precede
> an initializer inside a struct/union or array aggregate with the access
> method ([x] for array elements, ".Whatever" for structs and unions, and can
> mix & match) to get to a specific subobject to be initialized. I had to
> create the text nearly from scratch since C and C++ use very different ways
> to express the same concepts. Plus C++ has to worry about non-dumb classes.
>
> I'd especially like if the crew for Microsoft Visual Studio 2013 took a
> look to see if I described your practice correctly.
>
> Daryle W.
>
>

--

---
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_5044_363003.1384426630950
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">I uploaded a <a href=3D"http://htmlpreview.github.io/?http=
s://raw.github.com/CTMacUser/multiarray-iso-proposal/master/designation-pro=
posal.html">new version (2013-Nov-14)</a>. I completely redid the new parag=
raphs. I went beyond paragraph 4 of section 8.5.1 and covered the entire se=
ction. Am I justified in removing the sections I suggested? Should the ones=
 I didn't mention be altered? What about 8.5.1/8? Is 8.5.1/I took much of a=
 ripoff of 8.5.4/4?<br><br>I added changes to sections 8.5.4 and 14.5.3, bu=
t I don't know if those are good enough. And what about 8.5.1/8?<br><br>I n=
eed more examples, especially ones that replace that deleted ones. (Make su=
re to mention which new section/paragraph they go with.)<br><br>On Friday, =
November 8, 2013 5:48:15 AM UTC-5, Daryle Walker wrote:<blockquote class=3D=
"gmail_quote" style=3D"margin: 0;margin-left: 0.8ex;border-left: 1px #ccc s=
olid;padding-left: 1ex;"><div dir=3D"ltr"><div>[Excuse any mistakes from me=
 doing an all-nighter to get this proposal out here.]</div><div><br></div><=
div>I made a <a href=3D"http://htmlpreview.github.io/?https://raw.github.co=
m/CTMacUser/multiarray-iso-proposal/master/designation-proposal.html" targe=
t=3D"_blank">proposal</a> on how to have C99's designated initializers in C=
++. In C, you can precede an initializer inside a struct/union or array agg=
regate with the access method ([x] for array elements, ".Whatever" for stru=
cts and unions, and can mix &amp; match) to get to a specific subobject to =
be initialized. I had to create the text nearly from scratch since C and C+=
+ use&nbsp;very different ways to express the same concepts. Plus C++ has t=
o worry about non-dumb classes.</div><div><br></div><div>I'd especially lik=
e if the crew for Microsoft Visual Studio 2013 took a look to see if I desc=
ribed your practice correctly.</div><div><br></div><div>Daryle W.</div><div=
><br></div></div></blockquote></div>

<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 unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.<br />
To post to this group, send email to std-proposals@isocpp.org.<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_5044_363003.1384426630950--

.


Author: Daryle Walker <darylew@gmail.com>
Date: Sun, 17 Nov 2013 09:11:02 -0800 (PST)
Raw View
------=_Part_1999_26009333.1384708262741
Content-Type: text/plain; charset=ISO-8859-1

I uploaded a third version (2013-Nov-17)<http://htmlpreview.github.io/?https://raw.github.com/CTMacUser/multiarray-iso-proposal/master/designation-proposal.html>.
I shortened at lot of the prose about which sub-objects can be targeted and
how to find the target object for a given initializer into two huge
paragraphs, and they're more integrated. I got rid of some of my more
clunky terms, plus "brace elision." I hope you can understand the text that
replaces the brace elision idea.

On Thursday, November 14, 2013 5:57:10 AM UTC-5, Daryle Walker wrote:
>
> I uploaded a new version (2013-Nov-14)<http://htmlpreview.github.io/?https://raw.github.com/CTMacUser/multiarray-iso-proposal/master/designation-proposal.html>.
> I completely redid the new paragraphs. I went beyond paragraph 4 of section
> 8.5.1 and covered the entire section. Am I justified in removing the
> sections I suggested? Should the ones I didn't mention be altered? What
> about 8.5.1/8? Is 8.5.1/I took much of a ripoff of 8.5.4/4?
>
> I added changes to sections 8.5.4 and 14.5.3, but I don't know if those
> are good enough. And what about 8.5.1/8?
>
> I need more examples, especially ones that replace that deleted ones.
> (Make sure to mention which new section/paragraph they go with.)
>
> On Friday, November 8, 2013 5:48:15 AM UTC-5, Daryle Walker wrote:
>>
>> [Excuse any mistakes from me doing an all-nighter to get this proposal
>> out here.]
>>
>> I made a proposal<http://htmlpreview.github.io/?https://raw.github.com/CTMacUser/multiarray-iso-proposal/master/designation-proposal.html>on how to have C99's designated initializers in C++. In C, you can precede
>> an initializer inside a struct/union or array aggregate with the access
>> method ([x] for array elements, ".Whatever" for structs and unions, and can
>> mix & match) to get to a specific subobject to be initialized. I had to
>> create the text nearly from scratch since C and C++ use very different ways
>> to express the same concepts. Plus C++ has to worry about non-dumb classes.
>>
>> I'd especially like if the crew for Microsoft Visual Studio 2013 took a
>> look to see if I described your practice correctly.
>>
>> Daryle W.
>>
>>

--

---
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_1999_26009333.1384708262741
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">I uploaded a <a href=3D"http://htmlpreview.github.io/?http=
s://raw.github.com/CTMacUser/multiarray-iso-proposal/master/designation-pro=
posal.html">third version (2013-Nov-17)</a>. I shortened at lot of the pros=
e about which sub-objects can be targeted and how to find the target object=
 for a given initializer into two huge paragraphs, and they're more integra=
ted. I got rid of some of my more clunky terms, plus "brace elision." I hop=
e you can understand the text that replaces the brace elision idea.<br><br>=
On Thursday, November 14, 2013 5:57:10 AM UTC-5, Daryle Walker wrote:<block=
quote class=3D"gmail_quote" style=3D"margin: 0px 0px 0px 0.8ex; padding-lef=
t: 1ex; border-left-color: rgb(204, 204, 204); border-left-width: 1px; bord=
er-left-style: solid;"><div dir=3D"ltr">I uploaded a <a href=3D"http://html=
preview.github.io/?https://raw.github.com/CTMacUser/multiarray-iso-proposal=
/master/designation-proposal.html" target=3D"_blank">new version (2013-Nov-=
14)</a>. I completely redid the new paragraphs. I went beyond paragraph 4 o=
f section 8.5.1 and covered the entire section. Am I justified in removing =
the sections I suggested? Should the ones I didn't mention be altered? What=
 about 8.5.1/8? Is 8.5.1/I took much of a ripoff of 8.5.4/4?<br><br>I added=
 changes to sections 8.5.4 and 14.5.3, but I don't know if those are good e=
nough. And what about 8.5.1/8?<br><br>I need more examples, especially ones=
 that replace that deleted ones. (Make sure to mention which new section/pa=
ragraph they go with.)<br><br>On Friday, November 8, 2013 5:48:15 AM UTC-5,=
 Daryle Walker wrote:<blockquote class=3D"gmail_quote" style=3D"margin: 0px=
 0px 0px 0.8ex; padding-left: 1ex; border-left-color: rgb(204, 204, 204); b=
order-left-width: 1px; border-left-style: solid;"><div dir=3D"ltr"><div>[Ex=
cuse any mistakes from me doing an all-nighter to get this proposal out her=
e.]</div><div><br></div><div>I made a <a href=3D"http://htmlpreview.github.=
io/?https://raw.github.com/CTMacUser/multiarray-iso-proposal/master/designa=
tion-proposal.html" target=3D"_blank">proposal</a> on how to have C99's des=
ignated initializers in C++. In C, you can precede an initializer inside a =
struct/union or array aggregate with the access method ([x] for array eleme=
nts, ".Whatever" for structs and unions, and can mix &amp; match) to get to=
 a specific subobject to be initialized. I had to create the text nearly fr=
om scratch since C and C++ use&nbsp;very different ways to express the same=
 concepts. Plus C++ has to worry about non-dumb classes.</div><div><br></di=
v><div>I'd especially like if the crew for Microsoft Visual Studio 2013 too=
k a look to see if I described your practice correctly.</div><div><br></div=
><div>Daryle W.</div><div><br></div></div></blockquote></div></blockquote><=
/div>

<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 unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.<br />
To post to this group, send email to std-proposals@isocpp.org.<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_1999_26009333.1384708262741--

.


Author: Matthew Fioravante <fmatthew5876@gmail.com>
Date: Fri, 24 Apr 2015 19:25:55 -0700 (PDT)
Raw View
------=_Part_8_1586368668.1429928755703
Content-Type: multipart/alternative;
 boundary="----=_Part_9_1088725571.1429928755703"

------=_Part_9_1088725571.1429928755703
Content-Type: text/plain; charset=UTF-8

Did this proposal ever get anywhere? Not only does it improve C
compatibility but the feature also has a nice property that it can be
automatically used to design functions with named arguments:

#include <experimental/string_view>
#include <vector>


using StringView = std::experimental::string_view;


struct splitParams {
  char delim = ',';
  char quote = '"';
};


std::vector<StringView> split(StringView s, splitParams p);


auto foo() {
  return split("a,b,c", { .delim = ',', .quote = '"'});
}

There is a slight hassle that you have to specify the parameters in member
order or suffer a compiler warning, but it can make a clean procedural
interface (or a constructor with a lot of params such as a gui widget).
Many other languages use functions with many parameters because they have
named function arguments. One good example is python's argparse library.
Functions with many parameters are not a feasble design idiom in C++
because we lack named function parameters.

We could suggest implementations silence the warning when the constructor
arguments are trivially destructible and the init/destroy order actually
doesn't matter or doesn't exist.

struct Params {
  int x = 0;
  int y = 0;
  string_view s;
  array_view<Widget> widgets; //Could use array_view also
};
void f(const Params& p);

f({.s = "hello", .x = 1}); //Ok

--

---
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_9_1088725571.1429928755703
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">Did this proposal ever get anywhere? Not only does it impr=
ove C compatibility but the feature also has a nice property that it can be=
 automatically used to design functions with named arguments:<div><br></div=
><div><div class=3D"prettyprint" style=3D"border: 1px solid rgb(187, 187, 1=
87); word-wrap: break-word; background-color: rgb(250, 250, 250);"><code cl=
ass=3D"prettyprint"><div class=3D"subprettyprint"><span style=3D"color: #80=
0;" class=3D"styled-by-prettify">#include</span><span style=3D"color: #000;=
" class=3D"styled-by-prettify"> </span><span style=3D"color: #660;" class=
=3D"styled-by-prettify">&lt;</span><span style=3D"color: #000;" class=3D"st=
yled-by-prettify">experimental</span><span style=3D"color: #660;" class=3D"=
styled-by-prettify">/</span><span style=3D"color: #000;" class=3D"styled-by=
-prettify">string_view</span><span style=3D"color: #660;" class=3D"styled-b=
y-prettify">&gt;</span><span style=3D"color: #000;" class=3D"styled-by-pret=
tify"><br></span><span style=3D"color: #800;" class=3D"styled-by-prettify">=
#include</span><span style=3D"color: #000;" class=3D"styled-by-prettify"> <=
/span><span style=3D"color: #080;" class=3D"styled-by-prettify">&lt;vector&=
gt;</span><span style=3D"color: #000;" class=3D"styled-by-prettify"><br><br=
><br></span><span style=3D"color: #008;" class=3D"styled-by-prettify">using=
</span><span style=3D"color: #000;" class=3D"styled-by-prettify"> </span><s=
pan style=3D"color: #606;" class=3D"styled-by-prettify">StringView</span><s=
pan style=3D"color: #000;" class=3D"styled-by-prettify"> </span><span style=
=3D"color: #660;" class=3D"styled-by-prettify">=3D</span><span style=3D"col=
or: #000;" class=3D"styled-by-prettify"> std</span><span style=3D"color: #6=
60;" class=3D"styled-by-prettify">::</span><span style=3D"color: #000;" cla=
ss=3D"styled-by-prettify">experimental</span><span style=3D"color: #660;" c=
lass=3D"styled-by-prettify">::</span><span style=3D"color: #000;" class=3D"=
styled-by-prettify">string_view</span><span style=3D"color: #660;" class=3D=
"styled-by-prettify">;</span><span style=3D"color: #000;" class=3D"styled-b=
y-prettify"><br><br><br></span><span style=3D"color: #008;" class=3D"styled=
-by-prettify">struct</span><span style=3D"color: #000;" class=3D"styled-by-=
prettify"> splitParams </span><span style=3D"color: #660;" class=3D"styled-=
by-prettify">{</span><span style=3D"color: #000;" class=3D"styled-by-pretti=
fy"><br>&nbsp; </span><span style=3D"color: #008;" class=3D"styled-by-prett=
ify">char</span><span style=3D"color: #000;" class=3D"styled-by-prettify"> =
delim </span><span style=3D"color: #660;" class=3D"styled-by-prettify">=3D<=
/span><span style=3D"color: #000;" class=3D"styled-by-prettify"> </span><sp=
an style=3D"color: #080;" class=3D"styled-by-prettify">','</span><span styl=
e=3D"color: #660;" class=3D"styled-by-prettify">;</span><span style=3D"colo=
r: #000;" class=3D"styled-by-prettify"><br>&nbsp; </span><span style=3D"col=
or: #008;" class=3D"styled-by-prettify">char</span><span style=3D"color: #0=
00;" class=3D"styled-by-prettify"> quote </span><span style=3D"color: #660;=
" class=3D"styled-by-prettify">=3D</span><span style=3D"color: #000;" class=
=3D"styled-by-prettify"> </span><span style=3D"color: #080;" class=3D"style=
d-by-prettify">'"'</span><span style=3D"color: #660;" class=3D"styled-by-pr=
ettify">;</span><span style=3D"color: #000;" class=3D"styled-by-prettify"><=
br></span><span style=3D"color: #660;" class=3D"styled-by-prettify">};</spa=
n><span style=3D"color: #000;" class=3D"styled-by-prettify"><br><br><br>std=
</span><span style=3D"color: #660;" class=3D"styled-by-prettify">::</span><=
span style=3D"color: #000;" class=3D"styled-by-prettify">vector</span><span=
 style=3D"color: #660;" class=3D"styled-by-prettify">&lt;</span><span style=
=3D"color: #606;" class=3D"styled-by-prettify">StringView</span><span style=
=3D"color: #660;" class=3D"styled-by-prettify">&gt;</span><span style=3D"co=
lor: #000;" class=3D"styled-by-prettify"> split</span><span style=3D"color:=
 #660;" class=3D"styled-by-prettify">(</span><span style=3D"color: #606;" c=
lass=3D"styled-by-prettify">StringView</span><span style=3D"color: #000;" c=
lass=3D"styled-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"> splitParams p</span><span style=3D"color: #660;" class=3D"style=
d-by-prettify">);</span><span style=3D"color: #000;" class=3D"styled-by-pre=
ttify"><br><br><br></span><span style=3D"color: #008;" class=3D"styled-by-p=
rettify">auto</span><span style=3D"color: #000;" class=3D"styled-by-prettif=
y"> foo</span><span style=3D"color: #660;" class=3D"styled-by-prettify">()<=
/span><span style=3D"color: #000;" class=3D"styled-by-prettify"> </span><sp=
an style=3D"color: #660;" class=3D"styled-by-prettify">{</span><span style=
=3D"color: #000;" class=3D"styled-by-prettify"><br>&nbsp; </span><span styl=
e=3D"color: #008;" class=3D"styled-by-prettify">return</span><span style=3D=
"color: #000;" class=3D"styled-by-prettify"> split</span><span style=3D"col=
or: #660;" class=3D"styled-by-prettify">(</span><span style=3D"color: #080;=
" class=3D"styled-by-prettify">"a,b,c"</span><span style=3D"color: #660;" c=
lass=3D"styled-by-prettify">,</span><span style=3D"color: #000;" class=3D"s=
tyled-by-prettify"> </span><span style=3D"color: #660;" class=3D"styled-by-=
prettify">{</span><span style=3D"color: #000;" class=3D"styled-by-prettify"=
> </span><span style=3D"color: #660;" class=3D"styled-by-prettify">.</span>=
<span style=3D"color: #000;" class=3D"styled-by-prettify">delim </span><spa=
n style=3D"color: #660;" class=3D"styled-by-prettify">=3D</span><span style=
=3D"color: #000;" class=3D"styled-by-prettify"> </span><span style=3D"color=
: #080;" class=3D"styled-by-prettify">','</span><span style=3D"color: #660;=
" class=3D"styled-by-prettify">,</span><span style=3D"color: #000;" class=
=3D"styled-by-prettify"> </span><span style=3D"color: #660;" class=3D"style=
d-by-prettify">.</span><span style=3D"color: #000;" class=3D"styled-by-pret=
tify">quote </span><span style=3D"color: #660;" class=3D"styled-by-prettify=
">=3D</span><span style=3D"color: #000;" class=3D"styled-by-prettify"> </sp=
an><span style=3D"color: #080;" class=3D"styled-by-prettify">'"'</span><spa=
n 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><span c=
lass=3D"styled-by-prettify" style=3D"font-family: monospace; color: rgb(102=
, 102, 0); background-color: rgb(250, 250, 250);"><br></span></div><div>The=
re is a slight hassle that you have to specify the parameters in member ord=
er or suffer a compiler warning, but it can make a clean procedural interfa=
ce (or a constructor with a lot of params such as a gui widget). Many other=
 languages use functions with many parameters because they have named funct=
ion arguments. One good example is python's argparse library. Functions wit=
h many parameters are not a feasble design idiom in C++ because we lack nam=
ed function parameters.</div><div><br></div><div>We could suggest implement=
ations silence the warning when the constructor arguments are trivially des=
tructible and the init/destroy order actually doesn't matter or doesn't exi=
st.</div><div><br></div><div><div class=3D"prettyprint" style=3D"border: 1p=
x solid rgb(187, 187, 187); word-wrap: break-word; background-color: rgb(25=
0, 250, 250);"><code class=3D"prettyprint"><div class=3D"subprettyprint"><s=
pan style=3D"color: #008;" class=3D"styled-by-prettify">struct</span><span =
style=3D"color: #000;" class=3D"styled-by-prettify"> </span><span style=3D"=
color: #606;" class=3D"styled-by-prettify">Params</span><span style=3D"colo=
r: #000;" class=3D"styled-by-prettify"> </span><span style=3D"color: #660;"=
 class=3D"styled-by-prettify">{</span><span style=3D"color: #000;" class=3D=
"styled-by-prettify"><br>&nbsp; </span><span style=3D"color: #008;" class=
=3D"styled-by-prettify">int</span><span style=3D"color: #000;" class=3D"sty=
led-by-prettify"> x </span><span style=3D"color: #660;" class=3D"styled-by-=
prettify">=3D</span><span style=3D"color: #000;" class=3D"styled-by-prettif=
y"> </span><span style=3D"color: #066;" class=3D"styled-by-prettify">0</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>&nbsp; </span><span =
style=3D"color: #008;" class=3D"styled-by-prettify">int</span><span style=
=3D"color: #000;" class=3D"styled-by-prettify"> y </span><span style=3D"col=
or: #660;" class=3D"styled-by-prettify">=3D</span><span style=3D"color: #00=
0;" class=3D"styled-by-prettify"> </span><span style=3D"color: #066;" class=
=3D"styled-by-prettify">0</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>&nbsp; </span><font color=3D"#660066"><span style=3D"color: #000;=
" class=3D"styled-by-prettify">string_view</span></font><span style=3D"colo=
r: #000;" class=3D"styled-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"><br>&nbsp; </span><font color=3D"#000088"><span sty=
le=3D"color: #000;" class=3D"styled-by-prettify">array_view</span></font><s=
pan style=3D"color: #660;" class=3D"styled-by-prettify">&lt;</span><span st=
yle=3D"color: #606;" class=3D"styled-by-prettify">Widget</span><span style=
=3D"color: #660;" class=3D"styled-by-prettify">&gt;</span><span style=3D"co=
lor: #000;" class=3D"styled-by-prettify"> widgets</span><span style=3D"colo=
r: #660;" class=3D"styled-by-prettify">;</span><span style=3D"color: #000;"=
 class=3D"styled-by-prettify"> </span><span style=3D"color: #800;" class=3D=
"styled-by-prettify">//Could use array_view also</span><span style=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><span style=3D"color: #008;" class=3D"st=
yled-by-prettify">void</span><span style=3D"color: #000;" class=3D"styled-b=
y-prettify"> f</span><span style=3D"color: #660;" class=3D"styled-by-pretti=
fy">(</span><span style=3D"color: #008;" class=3D"styled-by-prettify">const=
</span><span style=3D"color: #000;" class=3D"styled-by-prettify"> </span><s=
pan style=3D"color: #606;" class=3D"styled-by-prettify">Params</span><span =
style=3D"color: #660;" class=3D"styled-by-prettify">&amp;</span><span style=
=3D"color: #000;" class=3D"styled-by-prettify"> p</span><span style=3D"colo=
r: #660;" class=3D"styled-by-prettify">);</span><span style=3D"color: #000;=
" class=3D"styled-by-prettify"><br><br>f</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 style=3D"color: #660;" class=3D"styl=
ed-by-prettify">=3D</span><font color=3D"#008800"><span style=3D"color: #00=
0;" class=3D"styled-by-prettify"> </span><span style=3D"color: #080;" class=
=3D"styled-by-prettify">"hello"</span><span style=3D"color: #660;" class=3D=
"styled-by-prettify">,</span><span style=3D"color: #000;" class=3D"styled-b=
y-prettify"> </span><span style=3D"color: #660;" class=3D"styled-by-prettif=
y">.</span><span style=3D"color: #000;" class=3D"styled-by-prettify">x </sp=
an><span style=3D"color: #660;" class=3D"styled-by-prettify">=3D</span><spa=
n style=3D"color: #000;" class=3D"styled-by-prettify"> </span><span style=
=3D"color: #066;" class=3D"styled-by-prettify">1</span><span style=3D"color=
: #660;" class=3D"styled-by-prettify">});</span><span style=3D"color: #000;=
" class=3D"styled-by-prettify"> </span><span style=3D"color: #800;" class=
=3D"styled-by-prettify">//Ok</span></font></div></code></div></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_9_1088725571.1429928755703--
------=_Part_8_1586368668.1429928755703--

.


Author: David Krauss <potswa@gmail.com>
Date: Sat, 25 Apr 2015 10:54:03 +0800
Raw View
--Apple-Mail=_F456579C-2DCF-493D-BD6F-2B22C4091374
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain; charset=UTF-8


> On 2015=E2=80=9304=E2=80=9325, at 10:25 AM, Matthew Fioravante <fmatthew5=
876@gmail.com> wrote:
>=20
> Did this proposal ever get anywhere?

The word =E2=80=9Cdesignated=E2=80=9D doesn=E2=80=99t appear in the indexes=
 of papers from 2013 <http://open-std.org/jtc1/sc22/wg21/docs/papers/2013/>=
 or 2014 <http://open-std.org/jtc1/sc22/wg21/docs/papers/2014/>, so I guess=
 not.

By the way, as a further extension, it would be nice to have direct-initial=
ization of aggregate members using designated initializer syntax.

struct s {
    explicit s( int ) {}
};

struct c {
    s m;
};

Currently, initializing c requires naming the type and accessing the copy/m=
ove constructor:

c q { s( 5 ) };

If s is not movable, then aggregate initialization is impossible. The obvio=
us semantics of direct-initialization of a designated initializer are optim=
al:

c q { .m( 5 ) };

This is not yet supported by Clang, though.

--=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/.

--Apple-Mail=_F456579C-2DCF-493D-BD6F-2B22C4091374
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset=UTF-8

<html><head><meta http-equiv=3D"Content-Type" content=3D"text/html charset=
=3Dutf-8"></head><body style=3D"word-wrap: break-word; -webkit-nbsp-mode: s=
pace; -webkit-line-break: after-white-space;" class=3D""><br class=3D""><di=
v><blockquote type=3D"cite" class=3D""><div class=3D"">On 2015=E2=80=9304=
=E2=80=9325, at 10:25 AM, Matthew Fioravante &lt;<a href=3D"mailto:fmatthew=
5876@gmail.com" class=3D"">fmatthew5876@gmail.com</a>&gt; wrote:</div><br c=
lass=3D"Apple-interchange-newline"><div class=3D""><span style=3D"font-fami=
ly: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; f=
ont-weight: normal; letter-spacing: normal; line-height: normal; orphans: a=
uto; text-align: start; text-indent: 0px; text-transform: none; white-space=
: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; =
float: none; display: inline !important;" class=3D"">Did this proposal ever=
 get anywhere?</span></div></blockquote></div><br class=3D""><div class=3D"=
">The word =E2=80=9Cdesignated=E2=80=9D doesn=E2=80=99t appear in the index=
es of papers from&nbsp;<a href=3D"http://open-std.org/jtc1/sc22/wg21/docs/p=
apers/2013/" class=3D"">2013</a>&nbsp;or&nbsp;<a href=3D"http://open-std.or=
g/jtc1/sc22/wg21/docs/papers/2014/" class=3D"">2014</a>, so I guess not.</d=
iv><div class=3D""><br class=3D""></div><div class=3D"">By the way, as a fu=
rther extension, it would be nice to have direct-initialization of aggregat=
e members using designated initializer syntax.</div><div class=3D""><br cla=
ss=3D""></div><div class=3D""><font face=3D"Courier" class=3D"">struct s {<=
br class=3D"">&nbsp; &nbsp; explicit s( int ) {}</font></div><div class=3D"=
"><font face=3D"Courier" class=3D"">};<br class=3D""><br class=3D"">struct =
c {<br class=3D"">&nbsp; &nbsp;&nbsp;s m;<br class=3D"">};</font></div><div=
 class=3D""><br class=3D""></div><div class=3D"">Currently, initializing c =
requires naming the type and accessing the copy/move constructor:</div><div=
 class=3D""><br class=3D""></div><div class=3D""><font face=3D"Courier" cla=
ss=3D"">c q { s( 5 ) };<br class=3D""></font><br class=3D""></div><div clas=
s=3D"">If&nbsp;<span style=3D"font-family: Courier;" class=3D"">s</span>&nb=
sp;is not movable, then aggregate initialization is impossible. The obvious=
 semantics of direct-initialization of a designated initializer are optimal=
:</div><div class=3D""><br class=3D""></div><div class=3D""><span style=3D"=
font-family: Courier;" class=3D"">c q { .m( 5 ) };</span><br style=3D"font-=
family: Courier;" class=3D""></div><div class=3D""><span style=3D"font-fami=
ly: Courier;" class=3D""><br class=3D""></span></div><div class=3D"">This i=
s not yet supported by Clang, though.</div></body></html>

<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 />

--Apple-Mail=_F456579C-2DCF-493D-BD6F-2B22C4091374--

.


Author: David Krauss <potswa@gmail.com>
Date: Sat, 25 Apr 2015 11:04:58 +0800
Raw View
--Apple-Mail=_7EC21A1D-DBFF-4C9C-A93A-0E94C4B2106C
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain; charset=UTF-8


> On 2015=E2=80=9304=E2=80=9325, at 10:54 AM, David Krauss <potswa@gmail.co=
m> wrote:
>=20
> By the way, as a further extension, it would be nice to have direct-initi=
alization of aggregate members using designated initializer syntax.

Oh, this is actually already in the linked proposal.

Protip: When proposing something not already familiar to the committee (or =
even in any case, just as a courtesy), summarize all intended changes in En=
glish. Don=E2=80=99t introduce new concepts in standardese.

--=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/.

--Apple-Mail=_7EC21A1D-DBFF-4C9C-A93A-0E94C4B2106C
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset=UTF-8

<html><head><meta http-equiv=3D"Content-Type" content=3D"text/html charset=
=3Dutf-8"></head><body style=3D"word-wrap: break-word; -webkit-nbsp-mode: s=
pace; -webkit-line-break: after-white-space;" class=3D""><br class=3D""><di=
v><blockquote type=3D"cite" class=3D""><div class=3D"">On 2015=E2=80=9304=
=E2=80=9325, at 10:54 AM, David Krauss &lt;<a href=3D"mailto:potswa@gmail.c=
om" class=3D"">potswa@gmail.com</a>&gt; wrote:</div><br class=3D"Apple-inte=
rchange-newline"><div class=3D""><div class=3D"" style=3D"font-family: Helv=
etica; font-size: 12px; font-style: normal; font-variant: normal; font-weig=
ht: normal; letter-spacing: normal; line-height: normal; orphans: auto; tex=
t-align: start; text-indent: 0px; text-transform: none; white-space: normal=
; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;">By the =
way, as a further extension, it would be nice to have direct-initialization=
 of aggregate members using designated initializer syntax.</div></div></blo=
ckquote><br class=3D""></div><div>Oh, this is actually already in the linke=
d proposal.</div><div><br class=3D""></div><div>Protip: When proposing some=
thing not already familiar to the committee (or even in any case, just as a=
 courtesy), summarize all intended changes in English. Don=E2=80=99t introd=
uce new concepts in standardese.</div></body></html>

<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 />

--Apple-Mail=_7EC21A1D-DBFF-4C9C-A93A-0E94C4B2106C--

.


Author: David Krauss <potswa@gmail.com>
Date: Sat, 25 Apr 2015 15:39:26 +0800
Raw View
--Apple-Mail=_8B0F3A17-F12D-46DC-A12B-DD98CFD81871
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain; charset=UTF-8

(Replying to an old post.)

> On 2013=E2=80=9311=E2=80=9313, at 9:36 AM, Richard Smith <richard@metafoo=
..co.uk> wrote:
>=20
> And, just as with constructor initializers, we need to sequence the subob=
ject initialization in subobject order, in order to get destructors to run =
in the right order.

There=E2=80=99s still a decision to be made, whether side effects of aggreg=
ate initializers are sequenced in subobject order or in order of appearance=
, per [dcl.init.list] =C2=A78.5.4/4.

Currently it=E2=80=99s unspecified (as far as I know) that the initializati=
on of an aggregate subobject is part of the full-expression of an aggregate=
 initializer, or otherwise subject to the sequencing rule of =C2=A78.5.4/4.=
 On one hand, it=E2=80=99s usually assumed to be the case, and =C2=A78.5.1/=
13 comes pretty close to specifying it. On the other, code with such an ass=
umption is brittle. It will only work with aggregate initialization and not=
 with constructors, which don=E2=80=99t begin execution until all parameter=
s are initialized, after the entire list is evaluated. And the entire objec=
t doesn=E2=80=99t begin to exist until all its subobjects are created, so y=
ou can=E2=80=99t evaluate an access expression within its own initializer i=
n the first place.

Different order between evaluation and initialization is easy to model with=
 copy-initialization, because you can generate the temporary objects in lis=
t order and then use them in subobject order. It might be impossible with d=
irect-initialization, though.

Wouldn=E2=80=99t it be reasonable to require that designated initializers u=
sing direct-initialization appear in order? Essentially, require the orderi=
ng warning to be implemented, and upgrade it to an error upon direct-initia=
lization.

--=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/.

--Apple-Mail=_8B0F3A17-F12D-46DC-A12B-DD98CFD81871
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset=UTF-8

<html><head><meta http-equiv=3D"Content-Type" content=3D"text/html charset=
=3Dwindows-1252"></head><body style=3D"word-wrap: break-word; -webkit-nbsp-=
mode: space; -webkit-line-break: after-white-space;" class=3D"">(Replying t=
o an old post.)<div class=3D""><br class=3D""><div><blockquote type=3D"cite=
" class=3D""><div class=3D"">On 2013=E2=80=9311=E2=80=9313, at 9:36 AM, Ric=
hard Smith &lt;<a href=3D"mailto:richard@metafoo.co.uk" class=3D"">richard@=
metafoo.co.uk</a>&gt; wrote:</div><br class=3D"Apple-interchange-newline"><=
div class=3D""><span style=3D"font-family: Helvetica; font-size: 12px; font=
-style: normal; font-variant: normal; font-weight: normal; letter-spacing: =
normal; line-height: normal; orphans: auto; text-align: start; text-indent:=
 0px; text-transform: none; white-space: normal; widows: auto; word-spacing=
: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !import=
ant;" class=3D"">And, just as with constructor initializers, we need to seq=
uence the subobject initialization in subobject order, in order to get dest=
ructors to run in the right order.</span></div></blockquote></div><br class=
=3D""><div class=3D"">There=E2=80=99s still a decision to be made, whether =
side effects of aggregate initializers are sequenced in subobject order or =
in order of appearance, per [dcl.init.list] =C2=A78.5.4/4.</div><div class=
=3D""><br class=3D""></div><div class=3D"">Currently it=E2=80=99s unspecifi=
ed (as far as I know) that the initialization of an aggregate subobject is =
part of the full-expression of an aggregate initializer, or otherwise subje=
ct to the sequencing rule of =C2=A78.5.4/4. On one hand, it=E2=80=99s usual=
ly assumed to be the case, and =C2=A78.5.1/13 comes pretty close to specify=
ing it. On the other, code with such an assumption is brittle. It will only=
 work with aggregate initialization and not with constructors, which don=E2=
=80=99t begin execution until all parameters are initialized, after the ent=
ire list is evaluated. And the entire object doesn=E2=80=99t begin to exist=
 until all its subobjects are created, so you can=E2=80=99t evaluate an acc=
ess expression within its own initializer in the first place.</div><div cla=
ss=3D""><br class=3D""></div><div class=3D"">Different order between evalua=
tion and initialization is easy to model with copy-initialization, because =
you can generate the temporary objects in list order and then use them in s=
ubobject order. It might be impossible with direct-initialization, though.<=
/div></div><div class=3D""><br class=3D""></div><div class=3D"">Wouldn=E2=
=80=99t it be reasonable to require that designated initializers using dire=
ct-initialization appear in order? Essentially, require the ordering warnin=
g to be implemented, and upgrade it to an error upon direct-initialization.=
</div></body></html>

<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 />

--Apple-Mail=_8B0F3A17-F12D-46DC-A12B-DD98CFD81871--

.