Topic: First Draft Proposal of Index-Based For Loop
Author: Andrew Tomazos <andrewtomazos@gmail.com>
Date: Sat, 16 Jan 2016 10:38:16 +0100
Raw View
--001a114199748540f005297047ee
Content-Type: multipart/alternative; boundary=001a114199748540e905297047ec
--001a114199748540e905297047ec
Content-Type: text/plain; charset=UTF-8
Please find attached a rough incomplete 2-page draft entitled "Proposal of
Index-Based For Loop"
Preliminary thoughts appreciated.
Thanks,
Andrew.
--
---
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 https://groups.google.com/a/isocpp.org/group/std-proposals/.
--001a114199748540e905297047ec
Content-Type: text/html; charset=UTF-8
<div dir="ltr">Please find attached a rough incomplete 2-page draft entitled "Proposal of Index-Based For Loop"<div><br></div><div>Preliminary thoughts appreciated.</div><div><br></div><div>Thanks,</div><div>Andrew.</div><div><br></div></div>
<p></p>
-- <br />
<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 email to <a href="mailto:std-proposals+unsubscribe@isocpp.org">std-proposals+unsubscribe@isocpp.org</a>.<br />
To post to this group, send email to <a href="mailto:std-proposals@isocpp.org">std-proposals@isocpp.org</a>.<br />
Visit this group at <a href="https://groups.google.com/a/isocpp.org/group/std-proposals/">https://groups.google.com/a/isocpp.org/group/std-proposals/</a>.<br />
--001a114199748540e905297047ec--
--001a114199748540f005297047ee
Content-Type: application/pdf; name="ProposalofIndex-BasedForLoop.pdf"
Content-Disposition: attachment; filename="ProposalofIndex-BasedForLoop.pdf"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_ijgx33nt0
JVBERi0xLjQKJb/3ov4KNiAwIG9iago8PCAvTGluZWFyaXplZCAxIC9MIDg3ODY2IC9IIFsgOTUx
IDE5MCBdIC9PIDkgL0UgNzcyMTggL04gMyAvVCA4NzYyOCA+PgplbmRvYmoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKeHJlZgo2IDI2CjAw
MDAwMDAwMTUgMDAwMDAgbiAKMDAwMDAwMDkwMiAwMDAwMCBuIAowMDAwMDAwOTUxIDAwMDAwIG4g
CjAwMDAwMDExNDEgMDAwMDAgbiAKMDAwMDAwMTU0OCAwMDAwMCBuIAowMDAwMDAxNjg1IDAwMDAw
IG4gCjAwMDAwMDE4MjkgMDAwMDAgbiAKMDAwMDAwOTYyMSAwMDAwMCBuIAowMDAwMDA5ODM0IDAw
MDAwIG4gCjAwMDAwMTAxMjkgMDAwMDAgbiAKMDAwMDAxMDQ2MSAwMDAwMCBuIAowMDAwMDEwODMw
IDAwMDAwIG4gCjAwMDAwMTEwNTYgMDAwMDAgbiAKMDAwMDAxNzM1MSAwMDAwMCBuIAowMDAwMDE3
NTg5IDAwMDAwIG4gCjAwMDAwMzA5OTUgMDAwMDAgbiAKMDAwMDAzMTA5MSAwMDAwMCBuIAowMDAw
MDMxMjI4IDAwMDAwIG4gCjAwMDAwMzEzNzIgMDAwMDAgbiAKMDAwMDAzMjA3MCAwMDAwMCBuIAow
MDAwMDMyNDc4IDAwMDAwIG4gCjAwMDAwMzI3MDMgMDAwMDAgbiAKMDAwMDAzMzEwNSAwMDAwMCBu
IAowMDAwMDMzMzM0IDAwMDAwIG4gCjAwMDAwNTc5NjQgMDAwMDAgbiAKMDAwMDA1ODE5MiAwMDAw
MCBuIAp0cmFpbGVyIDw8IC9Sb290IDcgMCBSIC9TaXplIDMyIC9QcmV2IDg3NjIwICAgICAgICAg
ICAgICAgICAvSUQgWzxkODE0MTRiOGExYTE0OTFiOTNmMjY4M2Q0NTQ2MjM2OD48ZDgxNDE0Yjhh
MWExNDkxYjkzZjI2ODNkNDU0NjIzNjg+XSA+PgpzdGFydHhyZWYKMAolJUVPRgo3IDAgb2JqCjw8
IC9QYWdlcyA1IDAgUiAvVHlwZSAvQ2F0YWxvZyA+PgplbmRvYmoKOCAwIG9iago8PCAvRmlsdGVy
IC9GbGF0ZURlY29kZSAvUyA2NSAvTGVuZ3RoIDExMiA+PgpzdHJlYW0KeJxjYGBgYmBg3s7ACmRI
MQgyQAGYzQISZWBZwTC5s5PzAAMDd0JyzA+34KU5x/YJL4CKIQFxKGZgSGDgZ8pjWMLY+JCBb4Hh
gTJGQUaWhDssxfYPGBi4HCSYopgKmFg4J3BE/zqgqPITpAMAy08Z7AplbmRzdHJlYW0KZW5kb2Jq
CjkgMCBvYmoKPDwgL0Fubm90cyBbIDw8IC9BIDw8IC9TIC9VUkkgL1R5cGUgL0FjdGlvbiAvVVJJ
IChtYWlsdG86YW5kcmV3dG9tYXpvc0BnbWFpbC5jb20pID4+IC9Cb3JkZXIgWyAwIDAgMCBdIC9S
ZWN0IFsgMjA0Ljc1IDYzNy41IDM0NSA2NTAuMjUgXSAvU3VidHlwZSAvTGluayAvVHlwZSAvQW5u
b3QgPj4gXSAvQ29udGVudHMgMTIgMCBSIC9NZWRpYUJveCBbIDAgMCA2MTIgNzkyIF0gL1BhcmVu
dCA1IDAgUiAvUmVzb3VyY2VzIDw8IC9FeHRHU3RhdGUgPDwgL0cwIDIxIDAgUiA+PiAvRm9udCA8
PCAvRjAgMjIgMCBSIC9GMSAxMCAwIFIgL0YyIDExIDAgUiAvRjMgMjMgMCBSID4+IC9Qcm9jU2V0
cyBbIC9QREYgL1RleHQgL0ltYWdlQiAvSW1hZ2VDIC9JbWFnZUkgXSA+PiAvVHlwZSAvUGFnZSA+
PgplbmRvYmoKMTAgMCBvYmoKPDwgL0Jhc2VGb250IC9HYXV0YW1pIC9EZXNjZW5kYW50Rm9udHMg
WyAxMyAwIFIgXSAvRW5jb2RpbmcgL0lkZW50aXR5LUggL1N1YnR5cGUgL1R5cGUwIC9Ub1VuaWNv
ZGUgMTQgMCBSIC9UeXBlIC9Gb250ID4+CmVuZG9iagoxMSAwIG9iago8PCAvQmFzZUZvbnQgL0Fy
aWFsLUl0YWxpY01UIC9EZXNjZW5kYW50Rm9udHMgWyAxNSAwIFIgXSAvRW5jb2RpbmcgL0lkZW50
aXR5LUggL1N1YnR5cGUgL1R5cGUwIC9Ub1VuaWNvZGUgMTYgMCBSIC9UeXBlIC9Gb250ID4+CmVu
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
fjNQeYP9x/E4fI3hzNsH+88gp68xBCQ39s8T3dg/Rr7vrzFsJKevMZzZf3+N4YyW+2sM54nurzGc
J7q/xrCRnL7GcObL/TWGjbvO9vj4GkMwyOtrDNsgp68xBKO8vsawjXL6GkMwyutrDNsop68xnEe5
v8awjfLdrzG4Ub/2kX+3Vz3OPuiri8VDcuxiMY52+t3FYhzNwLuLxTiaZ3cXi3G0WnNFfE9OdCN5
k0safUSrRfs7tJAOVisQzSJ/93msjbO+ySc3dxwt9dxkQ4VKNBHeg86mRnFyHk3sxSUIRnk9KxtH
G3t9VTiNFk2ETjyN1EE73xwPldMMSNbLs96D1X645moMm99BHx5kOM+HuBrhI8MZzCOQYzwZ3Uax
4hdPRrti3NsuFshwBqPgySju8cb+Ny0qMiyjbRT3oY7Pzw4Ha0GTnaTg79ayWthHNxFaaagdu88F
45MIGvyuQQXQNCPurw4VQx2Q73E/ZcdVHbPN7uSOj7iXgCmrzx6rA3JrWX32eo3WIkgYCNGehU8V
JJTS94mcrsY3aCCfg+XyarkYXZDasmw672Bxvjk+KcxFgcXGCQQso1A4Eb46jMTYpiBcC4rVjW+j
+Fa8uM438uprPfX7yuDx+ZZ3P/k3+fP/02gaFGVuZHN0cmVhbQplbmRvYmoKMTMgMCBvYmoKPDwg
L0Jhc2VGb250IC9HYXV0YW1pIC9DSURTeXN0ZW1JbmZvIDw8IC9PcmRlcmluZyAoSWRlbnRpdHkp
IC9SZWdpc3RyeSAoQWRvYmUpIC9TdXBwbGVtZW50IDAgPj4gL0NJRFRvR0lETWFwIC9JZGVudGl0
eSAvRm9udERlc2NyaXB0b3IgMTcgMCBSIC9TdWJ0eXBlIC9DSURGb250VHlwZTIgL1R5cGUgL0Zv
bnQgL1cgWyAwIFsgNTAwIF0gXSA+PgplbmRvYmoKMTQgMCBvYmoKPDwgL0ZpbHRlciAvRmxhdGVE
ZWNvZGUgL0xlbmd0aCAyMjMgPj4Kc3RyZWFtCnicXZBBasQwDEX3PoWWM4vBSdYh0E4pZNFpadoD
OLaSGhrZKM4it6/shilUYIP8/xPf0tf+qSefQL9xsAMmmDw5xjVsbBFGnD2pugHnbTq6ctvFRKUF
HvY14dLTFFTbAuh3UdfEO5weXBjxrPQrO2RPM5w+r4P0wxbjNy5ICSrVdeBwkkkvJt7MgqALdumd
6D7tF2H+HB97RGhKX/+mscHhGo1FNjSjaiupDtpnqU4huX/6QY2T/TJc3LW4m6p6LO7jPXP5f/dQ
dmOWPGUJJUiO4Anve4ohZiqfH0T5b0llbmRzdHJlYW0KZW5kb2JqCjE1IDAgb2JqCjw8IC9CYXNl
Rm9udCAvQXJpYWwtSXRhbGljTVQgL0NJRFN5c3RlbUluZm8gPDwgL09yZGVyaW5nIChJZGVudGl0
eSkgL1JlZ2lzdHJ5IChBZG9iZSkgL1N1cHBsZW1lbnQgMCA+PiAvQ0lEVG9HSURNYXAgL0lkZW50
aXR5IC9Gb250RGVzY3JpcHRvciAxOSAwIFIgL1N1YnR5cGUgL0NJREZvbnRUeXBlMiAvVHlwZSAv
Rm9udCAvVyBbIDAgWyA3NTAgMCAwIDI3Ny44MzIgXSAxNiBbIDMzMy4wMDc4IF0gMzcgWyA2NjYu
OTkyMiAwIDAgMCA2MTAuODM5OCAwIDAgMjc3LjgzMiBdIDQ1IDg0IDU1Ni4xNTIzIDg1IFsgMzMz
LjAwNzggXSA4NiA5MSA1MDAgXSA+PgplbmRvYmoKMTYgMCBvYmoKPDwgL0ZpbHRlciAvRmxhdGVE
ZWNvZGUgL0xlbmd0aCAyOTcgPj4Kc3RyZWFtCnicXZHLboMwEEX3/opZpouIR4AkEkJKSSOx6EOl
/QBiD6mlYizjLPj7mpk0lWoJpMPMvb7MRHVzbIz2EL25UbbooddGOZzGq5MIZ7xoI5IUlJb+RvSW
Q2dFFMTtPHkcGtOPoiwBovdQnbybYXVQ4xkfRPTqFDptLrD6rNvA7dXabxzQeIhFVYHCPjg9d/al
GxAikq0bFeraz+ug+ev4mC1CSpxwGjkqnGwn0XXmgqKMw6mgPIVTCTTqX33HqnMvvzpH3ZvQHceH
uFooiZmORGlOlKVMe6aCqWbaM52YaqIsIyoSovyRaLujPLebN7857rGzLVvsWJuxNiHKOWTxxB85
Vl6wb3rzZafll5fV3Ocpr86FUdL+aIbL9LTB+4rtaBfV8vwAuSmYDGVuZHN0cmVhbQplbmRvYmoK
MTcgMCBvYmoKPDwgL0FzY2VudCA5MjMuODI4MSAvQ2FwSGVpZ2h0IDY2MC42NDQ1IC9EZXNjZW50
IC04MTIuNSAvRmxhZ3MgNCAvRm9udEJCb3ggWyAtMTQ2MS45MTQxIC04MTIuNSAxNzIyLjY1NjMg
MTEzNC43NjU2IF0gL0ZvbnRGaWxlMiAxOCAwIFIgL0ZvbnROYW1lIC9HYXV0YW1pIC9JdGFsaWNB
bmdsZSAwIC9TdGVtViAyNDguNTM1MiAvVHlwZSAvRm9udERlc2NyaXB0b3IgPj4KZW5kb2JqCjE4
IDAgb2JqCjw8IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlIC9MZW5ndGgxIDE2NzgwIC9MZW5ndGggNjIw
NyA+PgpzdHJlYW0KeJztWgl0XNV5/t+9M5IsjYxsnCAsg648eJcl44XYwoBsLUheZUt2JMMhepp5
0jwYzQyzSLYKjoBAjFjiuGxJSOpQUvbkmZDWoZQ6LU0ICUlKKFDq5BiSEgqGBiIbbI08/e59b0aj
xWxpctpzPOP/vf/999+Xe98cmTQiKqB+4rTI161HUv8y+HuiyS8RuZivJy7K6mbGiM78ApFGnZGu
7l/d+K0HiaYeJHInuoI7Or8tvo7nuXOhZXXA0P2/3rbz74E/ATgvAEL+v+dBFw0Czgl0x7e/8PS1
P4Cu5USFe4Nhn0506BdE06G/8N5ufXvEPTcnhfVi8IuQ3m2cYT3ZDf1B+CAiUSNy47bnjhMVt4Cn
kqTv7tc636yj7Z87beURKskj+dn3A+Pv5P0nG94sGNxwrL/w6UnT8DiJmJKQoVCu/1i/dunkvMEN
w78rfNqhZz48ICm4PkJ59BXKh2QRVdNmiNa7E+Qm5iLkDB/Wb4O2mdpYBVXzG2gGf5gW86fA/zRN
0Z6jakA5z6coL6eoFqImto0u0wLUxItouqsY64OUzy1awx+nFtdSauGXUxX/Ge5n03n8CdyfoRbJ
r2Ruo2r2BHTdRhewB6nafQe1sHNgF7rknd0NHNnlM2D/DTqffxrPg4AkfALdfSH8fRp8EnbRRcrn
l+FDO7nd+6Hvt4AbaFXOUXWvzq2n6vz5VJ2Th+d8wEo6V9LTkLOIprkCuBNtlfe8UGZtkgO2/Ou0
Cvh5kidbfgKoA5ADiiZ1Sh1K9ik6T9Jcb9hrjj7Fn/s8YgsO3UV0fEACO5oS7vqUYNembne1pG4n
GtJtOH4T7tdL0N5PHiAaXkd0ol/SPf2w12/rde2GbsTP7wX+OvBL6UKXpXJZ7faAtgc5rD3+DusY
/hlrHd6lHUj+nrWfmMpm4Lln+LB26/HHid4vtyF5Nex4AIeBv4G7H7D/5PQhzFgSvX/0oWycvZsq
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
/x+QnsFnZW5kc3RyZWFtCmVuZG9iagoxOSAwIG9iago8PCAvQXNjZW50IDkwNS4yNzM0IC9DYXBI
ZWlnaHQgNzE1LjgyMDMgL0Rlc2NlbnQgLTIxMS45MTQxIC9GbGFncyA2OCAvRm9udEJCb3ggWyAt
NTE3LjA4OTggLTMyNC43MDcgMTA4MS41NDMgMTAyNC45MDIzIF0gL0ZvbnRGaWxlMiAyMCAwIFIg
L0ZvbnROYW1lIC9BcmlhbC1JdGFsaWNNVCAvSXRhbGljQW5nbGUgLTEyIC9TdGVtViAyMzcuNzkz
IC9UeXBlIC9Gb250RGVzY3JpcHRvciA+PgplbmRvYmoKMjAgMCBvYmoKPDwgL0ZpbHRlciAvRmxh
dGVEZWNvZGUgL0xlbmd0aDEgMjgxMTYgL0xlbmd0aCAxMzMxNyA+PgpzdHJlYW0KeJztfXl4VEXW
96mq21u27uwboW+nkxCyQhLCFkkDSQQj+2KCRNJJOklDkg7pDiGgiCsYXFDGHRUFUXFr9oAbKor7
Nuo4AyKO6Lgh6OAKSX+n6t7uJKAz877fPN8f30Pac+vcqlOnTv3qnFNVTUAgABAMK4HBsNpme+tn
cQvuBjClI/29dolHHvuD5XWArFcANFPrWxuaE7vPdwFYQvB9XENTZ/2H1gWDAMbju3Fqo8Net7/u
Fhk1Po1U2IgVIUZ9IfInkVIamz1LQ4q1owAIUtiJJletHUbEzQXIi8P3k832pa3aFXo9tuM7yC32
ZscjE4akAUyfD5DU3trmaF1/p+MOgLQLAbTLgdtO3/327/fft2uBsehHfTx2xZ+NbS88x8ud5207
dOrjngb9Q/p8oGBAeSIE8Kkb1zsVJur3YXu5/iGwgA76/bCnuQx7Gh/FMA802NsEuTAehxuK4zKg
WlUVHR0gN/0LCZbcsADJqUuCA5q5cD9ZRSS6BR6nW3zrWBJ8Kz0G3Sg7HOsWYLmEjvbdgfI3S26S
i+VSpFakKqQbkR5F+gXpTqQulG/nfbmOALmJpDeDSzPX9xccr1JzAPYiXYz8fOkzqNKORjsOwFze
VwIowfqLUddM7RaYh/V12P4U1lVg+Qy+VyO/Fvv5kH8Z+V7dDQRQ93PIH8f6PNQTivQE2r2aPY+y
bt8KuoVkoM55SCU4hhvLJqSFKMfnMYLXkwNwHjng02N7GfKFOP5EIe+GOtTxDccMMeH9p3Is8X0l
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
9pIhJJ0MJRlwFD4nH8CH8An8Ff4GB+Ew/AU+Jscx1L/HXP4D+Sc5SX4iP5Nf8Gz5G8kkp8hp0kN6
SRbmeaCEUsqoRDVUS3VUTw00iGTTYDzRhtIwaqQmGk4jaCSNIjk0msaQXDKMxtI4Gk8TaCIdRJPo
YGqmMr2eWmgyGU7yqBVvdCk0labRITSdDqUZNJOuptexTexBNoqNZmPYWFbEzmPjWDGzsfFsApvI
SlgpK2Pns0lsMruAlbML2RQ2lU1j09kMNpPNYrPZHDaXXcQqWCWbxy5m81kVu4QtYNXMzmpYLatj
DlbPGlgjc7KFbBFrYs2shblYK1vM2pibeVg7W8I62FLWyZax5exSdhlm9MvZSnYFu5Jdhbn9GnYt
W8VWs+vIZ+Qo7nZrMNvfgPn+JtiKt/wuUgA7YRe8SD6H7bAD9sOV8Dysot/SY/QE/Y4ep/+kJ+mP
9Cf6Pf0BfiT/oPtYBDwNd8IxjJUH4RZSDDeR8WQJuRn3mHWkA7rJpeQY+Y5pmJZFMx39mf5Cf6W/
0VMsDvebYBbPglgCC2WJbBBLYoOZmckshKUzC0vG3SiFpbIMlsNy2TA2nOWxTJbFslk4y2cFbAQr
ZCNxb9eC+n03lhQf9IyI59+WSxqtTm8ICg4JDTOawiMio6JjYuPiExIHJQ02y5Zka0pq2pD0oRmZ
Wdk5ucOG5+UXjCgcOWr0mLFF540rto2fMLGktOz8SZMvKL9wytRp02fMnDV7ztyLKirnXTy/6pIF
1Xaoqa1z1Dc0OhcuampucbUubnN72pd0LO1ctvzSy1ZcvvKKK6+6+pprV62+rmvN9TfceNPam29Z
96dbb7v9jjvvunv9Pffet+H+BzZuenDzQw8/suVR9tjjTzzp3bpt+46du3Z379n71NPPPPvcvudf
eHH/Sy8feOXV115/48233n4H3n3vz+9/8OFfPvrr3w4e+vjwJ+dOOedOOedOOedOOX3V50455045
5045//+ccmw2W/G484rGjhk9auSIgvy84cNyc7KzMjOGpg9JS02xJltk8+CkQYkJ8XGxMdFRkRHh
JmNYaEhwkEGv02okRglklVrLqmVvWrVXSrNOmpTN3612rLD3q6j2ylhVNlDGK1cLMXmgpA0l68+Q
tCmStoAkMclFUJSdJZdaZe+bJVa5m8ybUYH8DSXWStl7TPBTBC+liZdQfLFYsIdcGtdYIntJtVzq
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
Qk0gL05vcm1hbCAvQ0EgMSAvTEMgMCAvTEogMCAvTFcgMCAvTUwgNCAvU0EgdHJ1ZSAvVHlwZSAv
RXh0R1N0YXRlIC9jYSAxID4+CmVuZG9iagoyMiAwIG9iago8PCAvQmFzZUZvbnQgL0FyaWFsTVQg
L0Rlc2NlbmRhbnRGb250cyBbIDI0IDAgUiBdIC9FbmNvZGluZyAvSWRlbnRpdHktSCAvU3VidHlw
ZSAvVHlwZTAgL1RvVW5pY29kZSAyNSAwIFIgL1R5cGUgL0ZvbnQgPj4KZW5kb2JqCjIzIDAgb2Jq
Cjw8IC9CYXNlRm9udCAvQ291cmllck5ld1BTTVQgL0Rlc2NlbmRhbnRGb250cyBbIDI2IDAgUiBd
IC9FbmNvZGluZyAvSWRlbnRpdHktSCAvU3VidHlwZSAvVHlwZTAgL1RvVW5pY29kZSAyNyAwIFIg
L1R5cGUgL0ZvbnQgPj4KZW5kb2JqCjI0IDAgb2JqCjw8IC9CYXNlRm9udCAvQXJpYWxNVCAvQ0lE
U3lzdGVtSW5mbyA8PCAvT3JkZXJpbmcgKElkZW50aXR5KSAvUmVnaXN0cnkgKEFkb2JlKSAvU3Vw
cGxlbWVudCAwID4+IC9DSURUb0dJRE1hcCAvSWRlbnRpdHkgL0ZvbnREZXNjcmlwdG9yIDI4IDAg
UiAvU3VidHlwZSAvQ0lERm9udFR5cGUyIC9UeXBlIC9Gb250IC9XIFsgMCBbIDc1MCAwIDAgMjc3
LjgzMiBdIDExIDEyIDMzMy4wMDc4IDE0IFsgNTgzLjk4NDQgMjc3LjgzMiAzMzMuMDA3OCAyNzcu
ODMyIDI3Ny44MzIgXSAxOSAyOCA1NTYuMTUyMyAyOSBbIDI3Ny44MzIgXSAzMCAzNCA1ODMuOTg0
NCAzNSBbIDEwMTUuMTM2NyA2NjYuOTkyMiA2NjYuOTkyMiA3MjIuMTY4IDcyMi4xNjggNjY2Ljk5
MjIgNjEwLjgzOTggMCAwIDI3Ny44MzIgMCAwIDU1Ni4xNTIzIDgzMy4wMDc4IDcyMi4xNjggNzc3
LjgzMiA2NjYuOTkyMiAwIDcyMi4xNjggNjY2Ljk5MjIgNjEwLjgzOTggMCAwIDk0My44NDc3IF0g
NTkgNjcgMjc3LjgzMiA2OCA2OSA1NTYuMTUyMyA3MCBbIDUwMCA1NTYuMTUyMyA1NTYuMTUyMyAy
NzcuODMyIDU1Ni4xNTIzIDU1Ni4xNTIzIDIyMi4xNjggMjIyLjE2OCA1MDAgMjIyLjE2OCA4MzMu
MDA3OCBdIDgxIDg0IDU1Ni4xNTIzIDg1IFsgMzMzLjAwNzggNTAwIDI3Ny44MzIgNTU2LjE1MjMg
NTAwIDcyMi4xNjggXSA5MSA5MyA1MDAgXSA+PgplbmRvYmoKMjUgMCBvYmoKPDwgL0ZpbHRlciAv
RmxhdGVEZWNvZGUgL0xlbmd0aCAzMzYgPj4Kc3RyZWFtCnicXZLPjoIwEMbvPEWP7sHQVtQ1ISQK
mnDYP1ncB8B2cJsspSn1wNtv20FNtgk0v858wzdM07Kuaq0cST/tIBpwpFNaWhiHmxVALnBVOmGc
SCXcTPEt+tYkqRc30+igr3U3JHlOSPrlo6OzE1ns5XCBlyT9sBKs0ley+C4bz83NmF/oQTtCk6Ig
Ejpf6a01720PJI2yZS19XLlp6TXPjPNkgPDIDN2IQcJoWgG21VdIcupXQfKTX0UCWv6LM4qySyd+
WhvTVz6d0j0tAjGKVCHtIq02SBXSHumEVEbiDOmIVEbKdpG8INB6i3REOkTK8HvrKpqdXW3vHp89
HWIaxbr8NWopVqJohGNBhkbYBg9nP9gjx3YybJXPDWAswz5Wazzcoi2OJrO7ybBt2OwV3YV/HO7C
Y4DiZq2fXbwwcWhhXErD406ZwQRVeP4AQy+ub2VuZHN0cmVhbQplbmRvYmoKMjYgMCBvYmoKPDwg
L0Jhc2VGb250IC9Db3VyaWVyTmV3UFNNVCAvQ0lEU3lzdGVtSW5mbyA8PCAvT3JkZXJpbmcgKElk
ZW50aXR5KSAvUmVnaXN0cnkgKEFkb2JlKSAvU3VwcGxlbWVudCAwID4+IC9DSURUb0dJRE1hcCAv
SWRlbnRpdHkgL0ZvbnREZXNjcmlwdG9yIDMwIDAgUiAvU3VidHlwZSAvQ0lERm9udFR5cGUyIC9U
eXBlIC9Gb250IC9XIFsgMCBbIDYwMC4wOTc3IF0gXSA+PgplbmRvYmoKMjcgMCBvYmoKPDwgL0Zp
bHRlciAvRmxhdGVEZWNvZGUgL0xlbmd0aCAzMzAgPj4Kc3RyZWFtCnicXZLLboMwEEX3fIWX6SLC
vEIiIaSUJBKLPlTaDwB7SC0VYxlnwd/XzNBEqiWQzszc8bXHYVWfaq0cC9/tKBpwrFdaWpjGmxXA
OrgqHUQxk0q4lfAvhtYEoRc38+RgqHU/BkXBWPjhs5OzM9sc5djBUxC+WQlW6SvbfFWN5+ZmzA8M
oB3jQVkyCb3v9NKa13YAFqJsW0ufV27ees2j4nM2wGLkiNyIUcJkWgG21VcICu5XyYqLX2UAWv7L
+5OgrOvFd2uxPPHlnB95iXRGip+RohNSciTCXJKfkZIIc+lKOVKWElGXjLqknOhElCLtIqID0Y6o
IjogeflC+R4PsjrO/vw/zktlnLTxnrzGSNGeghcKXojIT1LRLqs7uoYdmcwyCpI8j1cHtOdyq8v0
7yMTN2v9tPCJ4JiWASkN91dkRrOolu8XA0Srq2VuZHN0cmVhbQplbmRvYmoKMjggMCBvYmoKPDwg
L0FzY2VudCA5MDUuMjczNCAvQ2FwSGVpZ2h0IDcxNS44MjAzIC9EZXNjZW50IC0yMTEuOTE0MSAv
RmxhZ3MgNCAvRm9udEJCb3ggWyAtNjY0LjU1MDggLTMyNC43MDcgMjAyOC4zMjAzIDEwMzcuMTA5
NCBdIC9Gb250RmlsZTIgMjkgMCBSIC9Gb250TmFtZSAvQXJpYWxNVCAvSXRhbGljQW5nbGUgMCAv
U3RlbVYgODcuODkwNiAvVHlwZSAvRm9udERlc2NyaXB0b3IgPj4KZW5kb2JqCjI5IDAgb2JqCjw8
IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlIC9MZW5ndGgxIDQ1MDkyIC9MZW5ndGggMjQ1NDEgPj4Kc3Ry
ZWFtCnic7L15fFNF9z9+Zu7cm31t0qRp2iRNk0LL2oVSqDQsZZF9b5FK2TcRSgEBBYrsBQQXEFDZ
3FgllIKloKDyuKAILqACAiooLggqolia/M7cpAg8fj7P8/0t//xe5PK+Z9Y7M2fOnHNmbhqAAIAG
ykCAJkPHDZ4wsrLrMgDr5wAxjw2dMsm9csLHUwBa2AGkJiMmjBz3UMrm3wHqjwIQgyMfmDbi9EWD
BqDPTwAB/6jhg4cdzrm2HJ+4H9FsFCaYx5m2YPgqInnUuElTD28sDQCQ5gCW9Q+MHzqYtBxxL9bt
iPEXxg2eOkH1ofZJzMf2wP3g4HHD3yAjcwFWWADidRMmDp/w4/aSrwEaY766Fnjf6Uc/PTz//OpB
htzflfFK4J+N36Skcrr7nop3/9pRO9LYQtkFoyosT+QCeFe0CnWDtkb4a0cow9gimn7zI9bjKWI9
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
QxpWQbPItQN1gsX3Z9KAGthMwCgs6FBdKssUGH9OFLnG1EKVUTWaUfvBKtUUWFVh6yZlfRztfDzb
C+iTqRwYEqqSGtEi+qAemd5zBaQYRwulbdWBAZ3qGCwniY6rkRYnUbboEc5jKqrHdNohIIL1xhLJ
bSnDsNGGsTAxBjaT6Y/qqWFKB3AZ4o6BcQP/oKqRccUweFNC5xJCeXQN5jtHPd72jJZCMuArI1oy
bvYgafKNlVPDiUx0AGx1VNfGDBc3rfu0HmhSA68xkHeLuT4CW+iMI+m8jmnHVJPrwQujRZZzDUxf
YSICOmq6g1ZY37NYmavUL2prn620z1s0t6WtpYXn16+GwpZ589ra4Nw+v11pX7ggtCDkEobT6ZGO
5uaxsbGmWFbxkUSscExoytKkOkZlAUMQmAJM6xL9MELXgs9KgINvpIM0qUd0VelRcWykYMZa1PoJ
uJuH07FocywdV2Nacyx1rUr9RBMt/DsbjGlRKNU+uwm9ajbliLUhGEpgGkwDkDgGupACMi6YzLfC
9fsYCmTv92CwSEMiGrQMWL5uOWB5yvI0HI9bnrA8WoBLxcAge/0bxK2dQ0s7Bxvis1Za51lXW1dY
L4FzCGqrmCIOmOHIMLOf+baFYIhHH8IkMTyjOAj5X/XUHDVlbmRzdHJlYW0KZW5kb2JqCjMwIDAg
b2JqCjw8IC9Bc2NlbnQgODMyLjUxOTUgL0NhcEhlaWdodCAwIC9EZXNjZW50IC0zMDAuMjkzIC9G
bGFncyA1IC9Gb250QkJveCBbIC0yMS40ODQ0IC02NzkuNjg3NSA2MzcuNjk1MyAxMDIwLjk5NjEg
XSAvRm9udEZpbGUyIDMxIDAgUiAvRm9udE5hbWUgL0NvdXJpZXJOZXdQU01UIC9JdGFsaWNBbmds
ZSAwIC9TdGVtViAxMjAuNjA1NSAvVHlwZSAvRm9udERlc2NyaXB0b3IgPj4KZW5kb2JqCjMxIDAg
b2JqCjw8IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlIC9MZW5ndGgxIDM4Mzc2IC9MZW5ndGggMTg5Mzcg
Pj4Kc3RyZWFtCnic7L15YFRF8jhe3e/NPZM5M8kkk8ybmdw3OSCQQCbkkENuEMIhORggmJCQBPAG
bwQU0MULVFyPVUAJ4TCACioeeK+iroKCLqi7LoouuirJzK+630wOQD/7+X2/v79+zJvqrtdd3V1d
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
HsXLin8qzij1ylilSzlEOVF5hbJRuUjZprxeeavyPuVjyqeU25RvKT9UnlD+Gn9L/K+SUYqU4iWP
lCTlSHnSEKlYGiaVS8ukx6S/SFvdCrfVbXd73EnuLPdk9+Xu9e4nPdSj9Bg9Fk+kJ8bj8qR60j0j
PDUev5d6TV43miZN1CeaEm2J0YnOxITEjMT8xOLEhsTliTcnrkhcnXh34iOJWxM7EvcmPpd4MPHN
xHcTP0n8Kqk4yZc0PKk6qS5pbtIV3yi+MX9j/Sb6m6LT9LTmdM5ZelY6O/Bs8dlhZ0vPlp+dcLbq
bOPZ686uOrv+bLBL0xXRZenK7SrvGtdV1VXbtaCruWtx15qudV1/6nqi68muzV1bu9q7Puz6W9dn
3TndJd0run8MdAWCwa5gEFUh4T7BJL6JbMOI8zeU+Kso8b+hmw5L/GaU+J3CoyIRI8QJ4uXiWvEe
8QHxz+IzYqf4N/EbRbtin+I9xemQxN1Kn7IaJd58QYmfjl8ev0nSS1YpSpK4xHOlwT0SfxQlvrmf
xCe5Z7jX9kjcjBJ3eOJDEq/2zOESl35H4uN7JL42cVPi5h6Jv4ES/xtKfEiPxP1JC74hXOKR3+Se
JqfF08azBCWedrYQJe47W3a28uxlZxecvfrsyrN3nu3qUnOJD+gq6RrbNa3rcpR4Y1dr151c4ht7
JH4IJf4pSryYS3y5LPHg33Eh3B20oYyfEzKDRynuaQEjroB1GBUsIIu6NuF9PXfc6YG0QGogBdGr
cZW1wQKYi7FRcddnXUe73ut6s+t41/td7zLKrvu77sP07q5H8Lq7a1nXzV03dtV35XWhj/z7LIAv
j8pbyvFbjq//Ysbxm4//+sWTx5cefxZL1iKsPH7dF4uPLTh21fG9f08/fuexJ4/d8/k9n//581UA
nz/B2h2L+nzR57PxLudz3+d5nyccrTxacbT46OCjA4/mHc05mnrUczT2qO0oOfLdkW+PfHPk5JEv
Wasjrx7Zf+SFIzjKkVeOPH5k25GKI8OPlB5JOOI54j4SH3MgpivmbMxvMV+YXmDUihdUT6geVG1U
bVA9oMITrOqQao/qadUjqocRz1alq1JUWmVA+ZPylPIfyi+Vx5WfK19VvqJ8Wfmccp9yr3KPcrfy
IeVG5QblSOUwxc+KOxQgBsQG5mPIwv4bqxAvQ7/7FGFsz/3GC+7H4dpbhU6e/+2Cta8i4H4s3iqu
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
ss0XSuTaC/aKyYqbKz3m6BXltW7zuajpArMNv8an7e/aHPxxS/CNbcFz0dP/X/QZqSUm/V0+TQJc
OLHrwaSfMn3zH79lqtnBP36vQE2hzlass3gSyn/vRvqDmfRZBmlPTVkWwD7XTw2enBL89cI3x0P/
ydqCK38+5tEQ+pxHIHKFEGR4z+8NA2kli0WRYImwvC+9SOUPtMQAw/vTKxSc/r6+9Aoqyh8JBRje
n16p5PTtfemVIXplgOH96VUqTv863jp76RW/S69Wc/oTfek1gkyv6WZ4f3qNhtHz8aN76ZW/S6/V
cvrovv3rBBWv13UzvD+9Tsfp8/v2rxND9F0M70+v13P6S/vS60X5w0V9F8P70xsMnH5OX3pDiN7Q
xfD+9BERnP7avvzrFRq5/7MM709vNHL6fvo1KLRy/2cZ3p/eZOL0/fRrDNEbzzK8P73ZzOn76deo
0P0uvcXC6fvpN0Ip00f8xvD+9FYro+ed9PBjUup5vek3hvent9k4fT/9mpUGXm/+jeH96SMjCWE5
sE83Bb7imMSVoAfLOeV2Xh4B9nPKMzhuAsc55RUcN0NMTznlE5kN7AfpFaBUBLrgnDr2X5bVqEON
IvAbnNPfrcA+XXVA8jltnmaqjGD7ZPev57Y5zKYNCTCofzlhArdCCgw9p3wE4jZIA1//McgKVm7W
gF7T9f/sO5odjEeAbCkGM4YgVHEmMXAcWDFEoJrFBPKjjAg3Az/3729o/mc6BJXjQ5EDm8cMMg80
cpWDqoe5CchWE+dlEOT99YUBAFpvMm5lbmRzdHJlYW0KZW5kb2JqCjEgMCBvYmoKPDwgL0NvbnRl
bnRzIDIgMCBSIC9NZWRpYUJveCBbIDAgMCA2MTIgNzkyIF0gL1BhcmVudCA1IDAgUiAvUmVzb3Vy
Y2VzIDw8IC9FeHRHU3RhdGUgPDwgL0cwIDIxIDAgUiA+PiAvRm9udCA8PCAvRjAgMjIgMCBSIC9G
MSAyMyAwIFIgPj4gL1Byb2NTZXRzIFsgL1BERiAvVGV4dCAvSW1hZ2VCIC9JbWFnZUMgL0ltYWdl
SSBdID4+IC9UeXBlIC9QYWdlID4+CmVuZG9iagoyIDAgb2JqCjw8IC9GaWx0ZXIgL0ZsYXRlRGVj
b2RlIC9MZW5ndGggOTUwNCA+PgpzdHJlYW0KeJydXevKLTlu/d9PcV5gany/QAike6bnd0JDHiAk
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
bSla+LO2FMBy/iQtmlDuGjUkrzFL0/+k7/Oa76waLCNIMcx3vOYpCnWnGbNkFMMTliedS2CjGErR
fMerDFEr5yVwfcaHvYdmjpip1v61eNstmjF58UPAnQ9r4UbO0t4DzsRh6Vnq+QbiV3bM0potoqI9
sS08T1ZPbAtRhze0cpfM9e4TfBuzGNrC9pwK20OV9jzMmLx0X4WW46KhzzylPNgeoiNq0T5V5Dvo
Oa1PUu/3J0MMe5tMnLNqp0qn+iCFH55nKlrvv+cECs26eroWavjZL6F/4Mz36Aq9yF+M+pDac7YM
uo1Z3Lo451CB15jkvwNbIvcPn/mmaAH8v37zWAMiF+I7DXiN2WvAa8yCmUp8Ybjbd1y4NyKhNCPk
chuzuGLhB0pmzNIoacjxVRfzbcziip1HD25dT4QmQdCu3zwVmiRDvxOa+5id0NzG7IRm/cz3QnP7
zbWif5X//h9T7GATZW5kc3RyZWFtCmVuZG9iagozIDAgb2JqCjw8IC9Db250ZW50cyA0IDAgUiAv
TWVkaWFCb3ggWyAwIDAgNjEyIDc5MiBdIC9QYXJlbnQgNSAwIFIgL1Jlc291cmNlcyA8PCAvRXh0
R1N0YXRlIDw8IC9HMCAyMSAwIFIgPj4gL0ZvbnQgPDwgL0YwIDIyIDAgUiA+PiAvUHJvY1NldHMg
WyAvUERGIC9UZXh0IC9JbWFnZUIgL0ltYWdlQyAvSW1hZ2VJIF0gPj4gL1R5cGUgL1BhZ2UgPj4K
ZW5kb2JqCjQgMCBvYmoKPDwgL0ZpbHRlciAvRmxhdGVEZWNvZGUgL0xlbmd0aCAyNjEgPj4Kc3Ry
ZWFtCnicjZBhSgMxEIX/5xS5QNN5k8wkARFUtL+VBQ8gtiBUsN4fnOy2dDfWIgPL8PZ7bzIDT1Yr
2CdX9m979+WaouBROLy7V//ZxJBlZI/NClJS4+FbvWz81Bx2br0hv/u2GIalFKgHibao7ZjdlAgt
J+UixkxlFKvS2Upt0NTYoPvBrZ8M1aCq2Q9bh9M6VS3BnMPe3RDFu1s/fJz/ghEgNc0Z4Y6JEmpJ
S0Y6JqVQFJgzKXeM1KAGLZiHjlEJSoUXs9AxhUKKccGkaa/H4dopUGXuodh5kP44n93neL5+JUqh
Ci+Z/nzQEIXznOE+x55bY74Qc/11iGXu+fdGEb8tz1Y/VV+ZI2VuZHN0cmVhbQplbmRvYmoKNSAw
IG9iago8PCAvQ291bnQgMyAvS2lkcyBbIDkgMCBSIDEgMCBSIDMgMCBSIF0gL1R5cGUgL1BhZ2Vz
ID4+CmVuZG9iagp4cmVmCjAgNgowMDAwMDAwMDAwIDY1NTM1IGYgCjAwMDAwNzcyMTggMDAwMDAg
biAKMDAwMDA3NzQzNSAwMDAwMCBuIAowMDAwMDg3MDExIDAwMDAwIG4gCjAwMDAwODcyMTcgMDAw
MDAgbiAKMDAwMDA4NzU0OSAwMDAwMCBuIAp0cmFpbGVyIDw8IC9TaXplIDYgL0lEIFs8ZDgxNDE0
YjhhMWExNDkxYjkzZjI2ODNkNDU0NjIzNjg+PGQ4MTQxNGI4YTFhMTQ5MWI5M2YyNjgzZDQ1NDYy
MzY4Pl0gPj4Kc3RhcnR4cmVmCjIxNgolJUVPRgo=
--001a114199748540f005297047ee--
.
Author: "dgutson ." <danielgutson@gmail.com>
Date: Sat, 16 Jan 2016 07:05:17 -0300
Raw View
--047d7bd756e828bc12052970a82d
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
El 16/1/2016 6:38, "Andrew Tomazos" <andrewtomazos@gmail.com> escribi=C3=B3=
:
>
> Please find attached a rough incomplete 2-page draft entitled "Proposal
of Index-Based For Loop"
>
> Preliminary thoughts appreciated.
I would prefer a library facility for iterating over a numeric range
(preferably integral types) with steps support:
for (auto i : std::numeric_range(4, 12, 2))
stmt;
Where i will go from 4 to 12 stepping by 2 (the last argument, step, should
default to 1).
>
> Thanks,
> Andrew.
>
> --
>
> ---
> 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
https://groups.google.com/a/isocpp.org/group/std-proposals/.
--=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 https://groups.google.com/a/isocpp.org/group/std-propos=
als/.
--047d7bd756e828bc12052970a82d
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<p dir=3D"ltr"><br>
El 16/1/2016 6:38, "Andrew Tomazos" <<a href=3D"mailto:andrewt=
omazos@gmail.com">andrewtomazos@gmail.com</a>> escribi=C3=B3:<br>
><br>
> Please find attached a rough incomplete 2-page draft entitled "Pr=
oposal of Index-Based For Loop"<br>
><br>
> Preliminary thoughts appreciated.</p>
<p dir=3D"ltr">I would prefer a library facility for iterating over a numer=
ic range (preferably integral types) with steps support:</p>
<p dir=3D"ltr">=C2=A0=C2=A0 for (auto i : std::numeric_range(4, 12, 2))<br>
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 stmt;</p>
<p dir=3D"ltr">Where i will go from 4 to 12 stepping by 2 (the last argumen=
t, step, should default to 1).<br></p>
<p dir=3D"ltr">><br>
> Thanks,<br>
> Andrew.<br>
><br>
> -- <br>
><br>
> --- <br>
> You received this message because you are subscribed to the Google Gro=
ups "ISO C++ Standard - Future Proposals" group.<br>
> To unsubscribe from this group and stop receiving emails from it, send=
an email to <a href=3D"mailto:std-proposals%2Bunsubscribe@isocpp.org">std-=
proposals+unsubscribe@isocpp.org</a>.<br>
> To post to this group, send email to <a href=3D"mailto:std-proposals@i=
socpp.org">std-proposals@isocpp.org</a>.<br>
> Visit this group at <a href=3D"https://groups.google.com/a/isocpp.org/=
group/std-proposals/">https://groups.google.com/a/isocpp.org/group/std-prop=
osals/</a>.<br>
</p>
<p></p>
-- <br />
<br />
--- <br />
You received this message because you are subscribed to the Google Groups &=
quot;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"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"https://groups.google.com/a/isocpp.org/group=
/std-proposals/">https://groups.google.com/a/isocpp.org/group/std-proposals=
/</a>.<br />
--047d7bd756e828bc12052970a82d--
.
Author: Andrew Tomazos <andrewtomazos@gmail.com>
Date: Sat, 16 Jan 2016 11:20:01 +0100
Raw View
--001a11419974d58e46052970dc59
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
On Sat, Jan 16, 2016 at 11:05 AM, dgutson . <danielgutson@gmail.com> wrote:
>
> El 16/1/2016 6:38, "Andrew Tomazos" <andrewtomazos@gmail.com> escribi=C3=
=B3:
> >
> > Please find attached a rough incomplete 2-page draft entitled "Proposal
> of Index-Based For Loop"
> >
> > Preliminary thoughts appreciated.
>
> I would prefer a library facility for iterating over a numeric range
> (preferably integral types) with steps support:
>
> for (auto i : std::numeric_range(4, 12, 2))
> stmt;
>
You can already do this more tersely as follows:
for (int i =3D 4; i < 12; i +=3D 2)
notice that this is shorter than:
for (int i : std::numeric_range(4, 12, 2))
The premise of the proposal is that iterating over the specific "zero-based
index" range {0,1,2,...,N-1} is far more common in C and C++ than iterating
with a different starting point or different step. (Similar to
std::make_index_sequence.) We therefore propose a short-hand notation
specifically for that common use case, and leave the other less common use
cases up to the general for loop (as they are implemented now).
Admittedly I need to back up that claim with hard data.
> Where i will go from 4 to 12 stepping by 2 (the last argument, step,
> should default to 1).
>
> >
> > Thanks,
> > Andrew.
> >
> > --
> >
> > ---
> > 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
> https://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
> https://groups.google.com/a/isocpp.org/group/std-proposals/.
>
--=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 https://groups.google.com/a/isocpp.org/group/std-propos=
als/.
--001a11419974d58e46052970dc59
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><br><div class=3D"gmail_extra"><br><div class=3D"gmail_quo=
te">On Sat, Jan 16, 2016 at 11:05 AM, dgutson . <span dir=3D"ltr"><<a hr=
ef=3D"mailto:danielgutson@gmail.com" target=3D"_blank">danielgutson@gmail.c=
om</a>></span> wrote:<br><blockquote class=3D"gmail_quote" style=3D"marg=
in:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,20=
4);border-left-style:solid;padding-left:1ex"><span class=3D""><p dir=3D"ltr=
"><br>
El 16/1/2016 6:38, "Andrew Tomazos" <<a href=3D"mailto:andrewt=
omazos@gmail.com" target=3D"_blank">andrewtomazos@gmail.com</a>> escribi=
=C3=B3:<br>
><br>
> Please find attached a rough incomplete 2-page draft entitled "Pr=
oposal of Index-Based For Loop"<br>
><br>
> Preliminary thoughts appreciated.</p>
</span><p dir=3D"ltr">I would prefer a library facility for iterating over =
a numeric range (preferably integral types) with steps support:</p>
<p dir=3D"ltr">=C2=A0=C2=A0 for (auto i : std::numeric_range(4, 12, 2))<br>
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 stmt;</p></blockquote><div>You can alr=
eady do this more tersely as follows:</div><div><br></div><div><font face=
=3D"monospace, monospace">=C2=A0 for (int i =3D 4; i < 12; i +=3D 2)</fo=
nt></div><div><font face=3D"monospace, monospace"><br></font></div><div><fo=
nt face=3D"arial, helvetica, sans-serif">notice that this is shorter than:<=
/font></div><div><font face=3D"monospace, monospace"><br></font></div><div>=
<font face=3D"monospace, monospace">=C2=A0 for (int i : std::numeric_range(=
4, 12, 2))</font></div><div>=C2=A0</div><div>The premise of the proposal is=
that iterating over the specific "zero-based index" range {0,1,2=
,...,N-1} is far more common in C and C++ than iterating with a different s=
tarting point or different step. =C2=A0(Similar to std::make_index_sequence=
..) =C2=A0 We therefore propose a short-hand notation specifically for that =
common use case, and leave the other less common use cases up to the genera=
l for loop (as they are implemented now).</div><div><br></div><div>Admitted=
ly I need to back up that claim with hard data.</div><blockquote class=3D"g=
mail_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">
<p dir=3D"ltr">Where i will go from 4 to 12 stepping by 2 (the last argumen=
t, step, should default to 1).<br></p>
<p dir=3D"ltr">><br>
> Thanks,<br>
> Andrew.<span class=3D""><font color=3D"#888888"><br>
><br>
> -- <br>
><br>
> --- <br>
> You received this message because you are subscribed to the Google Gro=
ups "ISO C++ Standard - Future Proposals" group.<br>
> To unsubscribe from this group and stop receiving emails from it, send=
an email to <a href=3D"mailto:std-proposals%2Bunsubscribe@isocpp.org" targ=
et=3D"_blank">std-proposals+unsubscribe@isocpp.org</a>.<br>
> To post to this group, send email to <a href=3D"mailto:std-proposals@i=
socpp.org" target=3D"_blank">std-proposals@isocpp.org</a>.<br>
> Visit this group at <a href=3D"https://groups.google.com/a/isocpp.org/=
group/std-proposals/" target=3D"_blank">https://groups.google.com/a/isocpp.=
org/group/std-proposals/</a>.<br>
</font></span></p><span class=3D""><font color=3D"#888888">
<p></p>
-- <br>
<br>
--- <br>
You received this message because you are subscribed to the Google Groups &=
quot;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"mailto:std-proposals+unsubscribe@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"https://groups.google.com/a/isocpp.org/group=
/std-proposals/" target=3D"_blank">https://groups.google.com/a/isocpp.org/g=
roup/std-proposals/</a>.<br>
</font></span></blockquote></div><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" 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"https://groups.google.com/a/isocpp.org/group=
/std-proposals/">https://groups.google.com/a/isocpp.org/group/std-proposals=
/</a>.<br />
--001a11419974d58e46052970dc59--
.
Author: "dgutson ." <danielgutson@gmail.com>
Date: Sat, 16 Jan 2016 07:35:46 -0300
Raw View
--94eb2c07589424284a0529711500
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
El 16/1/2016 7:20, "Andrew Tomazos" <andrewtomazos@gmail.com> escribi=C3=B3=
:
>
>
>
> On Sat, Jan 16, 2016 at 11:05 AM, dgutson . <danielgutson@gmail.com>
wrote:
>>
>>
>> El 16/1/2016 6:38, "Andrew Tomazos" <andrewtomazos@gmail.com> escribi=C3=
=B3:
>> >
>> > Please find attached a rough incomplete 2-page draft entitled
"Proposal of Index-Based For Loop"
>> >
>> > Preliminary thoughts appreciated.
>>
>> I would prefer a library facility for iterating over a numeric range
(preferably integral types) with steps support:
>>
>> for (auto i : std::numeric_range(4, 12, 2))
>> stmt;
>
> You can already do this more tersely as follows:
>
> for (int i =3D 4; i < 12; i +=3D 2)
>
> notice that this is shorter than:
>
> for (int i : std::numeric_range(4, 12, 2))
>
But this facility has the following advantages:
1) the range can be returned by a function:
for(auto i : f() )
2) convenient helpers can be provided:
for (auto i : upto(N)) // replaces yor proposal
for (auto i : downto(-10)) // 0 to -9
3) the numeric_range can automatically determine the step as -1 if
start > end
> The premise of the proposal is that iterating over the specific
"zero-based index" range {0,1,2,...,N-1} is far more common in C and C++
than iterating with a different starting point or different step. (Similar
to std::make_index_sequence.) We therefore propose a short-hand notation
specifically for that common use case, and leave the other less common use
cases up to the general for loop (as they are implemented now).
>
> Admittedly I need to back up that claim with hard data.
>>
>> Where i will go from 4 to 12 stepping by 2 (the last argument, step,
should default to 1).
>>
>> >
>> > Thanks,
>> > Andrew.
>> >
>> > --
>> >
>> > ---
>> > 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
https://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
https://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
https://groups.google.com/a/isocpp.org/group/std-proposals/.
--=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 https://groups.google.com/a/isocpp.org/group/std-propos=
als/.
--94eb2c07589424284a0529711500
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<p dir=3D"ltr"><br>
El 16/1/2016 7:20, "Andrew Tomazos" <<a href=3D"mailto:andrewt=
omazos@gmail.com">andrewtomazos@gmail.com</a>> escribi=C3=B3:<br>
><br>
><br>
><br>
> On Sat, Jan 16, 2016 at 11:05 AM, dgutson . <<a href=3D"mailto:dani=
elgutson@gmail.com">danielgutson@gmail.com</a>> wrote:<br>
>><br>
>><br>
>> El 16/1/2016 6:38, "Andrew Tomazos" <<a href=3D"mailt=
o:andrewtomazos@gmail.com">andrewtomazos@gmail.com</a>> escribi=C3=B3:<b=
r>
>> ><br>
>> > Please find attached a rough incomplete 2-page draft entitled=
"Proposal of Index-Based For Loop"<br>
>> ><br>
>> > Preliminary thoughts appreciated.<br>
>><br>
>> I would prefer a library facility for iterating over a numeric ran=
ge (preferably integral types) with steps support:<br>
>><br>
>> =C2=A0=C2=A0 for (auto i : std::numeric_range(4, 12, 2))<br>
>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 stmt;<br>
><br>
> You can already do this more tersely as follows:<br>
><br>
> =C2=A0 for (int i =3D 4; i < 12; i +=3D 2)<br>
><br>
> notice that this is shorter than:<br>
><br>
> =C2=A0 for (int i : std::numeric_range(4, 12, 2))<br>
> =C2=A0</p>
<p dir=3D"ltr">But this facility has the following advantages:</p>
<p dir=3D"ltr">=C2=A0=C2=A0 1) the range can be returned by a function:<br>
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 for(auto i : f() )</p>
<p dir=3D"ltr">=C2=A0=C2=A0 2) convenient helpers can be provided:<br>
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 for (auto i : upto(N)) // replaces yor=
proposal<br>
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 for (auto i : downto(-10)) // 0 to -9<=
/p>
<p dir=3D"ltr">=C2=A0=C2=A0=C2=A0 3) the numeric_range can automatically de=
termine the step as -1 if start > end<br><br><br></p>
<p dir=3D"ltr">> The premise of the proposal is that iterating over the =
specific "zero-based index" range {0,1,2,...,N-1} is far more com=
mon in C and C++ than iterating with a different starting point or differen=
t step. =C2=A0(Similar to std::make_index_sequence.) =C2=A0 We therefore pr=
opose a short-hand notation specifically for that common use case, and leav=
e the other less common use cases up to the general for loop (as they are i=
mplemented now).<br>
><br>
> Admittedly I need to back up that claim with hard data.<br>
>><br>
>> Where i will go from 4 to 12 stepping by 2 (the last argument, ste=
p, should default to 1).<br>
>><br>
>> ><br>
>> > Thanks,<br>
>> > Andrew.<br>
>> ><br>
>> > -- <br>
>> ><br>
>> > --- <br>
>> > You received this message because you are subscribed to the G=
oogle Groups "ISO C++ Standard - Future Proposals" group.<br>
>> > To unsubscribe from this group and stop receiving emails from=
it, send an email to <a href=3D"mailto:std-proposals%2Bunsubscribe@isocpp.=
org">std-proposals+unsubscribe@isocpp.org</a>.<br>
>> > To post to this group, send email to <a href=3D"mailto:std-pr=
oposals@isocpp.org">std-proposals@isocpp.org</a>.<br>
>> > Visit this group at <a href=3D"https://groups.google.com/a/is=
ocpp.org/group/std-proposals/">https://groups.google.com/a/isocpp.org/group=
/std-proposals/</a>.<br>
>><br>
>> -- <br>
>><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 email to <a href=3D"mailto:std-proposals%2Bunsubscribe@isocpp.org">=
std-proposals+unsubscribe@isocpp.org</a>.<br>
>> To post to this group, send email to <a href=3D"mailto:std-proposa=
ls@isocpp.org">std-proposals@isocpp.org</a>.<br>
>> Visit this group at <a href=3D"https://groups.google.com/a/isocpp.=
org/group/std-proposals/">https://groups.google.com/a/isocpp.org/group/std-=
proposals/</a>.<br>
><br>
><br>
> -- <br>
><br>
> --- <br>
> You received this message because you are subscribed to the Google Gro=
ups "ISO C++ Standard - Future Proposals" group.<br>
> To unsubscribe from this group and stop receiving emails from it, send=
an email to <a href=3D"mailto:std-proposals%2Bunsubscribe@isocpp.org">std-=
proposals+unsubscribe@isocpp.org</a>.<br>
> To post to this group, send email to <a href=3D"mailto:std-proposals@i=
socpp.org">std-proposals@isocpp.org</a>.<br>
> Visit this group at <a href=3D"https://groups.google.com/a/isocpp.org/=
group/std-proposals/">https://groups.google.com/a/isocpp.org/group/std-prop=
osals/</a>.<br>
</p>
<p></p>
-- <br />
<br />
--- <br />
You received this message because you are subscribed to the Google Groups &=
quot;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"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"https://groups.google.com/a/isocpp.org/group=
/std-proposals/">https://groups.google.com/a/isocpp.org/group/std-proposals=
/</a>.<br />
--94eb2c07589424284a0529711500--
.
Author: Andrew Tomazos <andrewtomazos@gmail.com>
Date: Sat, 16 Jan 2016 11:52:57 +0100
Raw View
--089e01229a7699bc7505297152e8
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
On Sat, Jan 16, 2016 at 11:35 AM, dgutson . <danielgutson@gmail.com> wrote:
>
> El 16/1/2016 7:20, "Andrew Tomazos" <andrewtomazos@gmail.com> escribi=C3=
=B3:
> >
> >
> >
> > On Sat, Jan 16, 2016 at 11:05 AM, dgutson . <danielgutson@gmail.com>
> wrote:
> >>
> >>
> >> El 16/1/2016 6:38, "Andrew Tomazos" <andrewtomazos@gmail.com> escribi=
=C3=B3:
> >> >
> >> > Please find attached a rough incomplete 2-page draft entitled
> "Proposal of Index-Based For Loop"
> >> >
> >> > Preliminary thoughts appreciated.
> >>
> >> I would prefer a library facility for iterating over a numeric range
> (preferably integral types) with steps support:
> >>
> >> for (auto i : std::numeric_range(4, 12, 2))
> >> stmt;
> >
> > You can already do this more tersely as follows:
> >
> > for (int i =3D 4; i < 12; i +=3D 2)
> >
> > notice that this is shorter than:
> >
> > for (int i : std::numeric_range(4, 12, 2))
> >
>
> But this facility has the following advantages:
>
> 1) the range can be returned by a function:
> for(auto i : f() )
>
2) convenient helpers can be provided:
> for (auto i : upto(N)) // replaces yor proposal
> for (auto i : downto(-10)) // 0 to -9
>
> 3) the numeric_range can automatically determine the step as -1 if
> start > end
>
Don't get me wrong, I think a std::numeric_range type is a good idea and
should be part of the ranges proposals/initiative. It is not mutually
exclusive with this proposal.
What we are trying to do with this proposal is provide a short-hand for a
specific very common pattern of code that occurs in existing practice.
You are correct this could easily be implemented as a library feature:
for (auto i : std::upto(N))
However as a core feature it is more compact:
for (auto i : N)
My claim is that this specific use case is so common, that it warrants its
own terse core feature over the more verbose library solution.
>
> > The premise of the proposal is that iterating over the specific
> "zero-based index" range {0,1,2,...,N-1} is far more common in C and C++
> than iterating with a different starting point or different step. (Simil=
ar
> to std::make_index_sequence.) We therefore propose a short-hand notatio=
n
> specifically for that common use case, and leave the other less common us=
e
> cases up to the general for loop (as they are implemented now).
> >
> > Admittedly I need to back up that claim with hard data.
> >>
> >> Where i will go from 4 to 12 stepping by 2 (the last argument, step,
> should default to 1).
> >>
> >> >
> >> > Thanks,
> >> > Andrew.
> >> >
> >> > --
> >> >
> >> > ---
> >> > 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
> https://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
> https://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
> https://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
> https://groups.google.com/a/isocpp.org/group/std-proposals/.
>
--=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 https://groups.google.com/a/isocpp.org/group/std-propos=
als/.
--089e01229a7699bc7505297152e8
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><br><div class=3D"gmail_extra"><br><div class=3D"gmail_quo=
te">On Sat, Jan 16, 2016 at 11:35 AM, dgutson . <span dir=3D"ltr"><<a hr=
ef=3D"mailto:danielgutson@gmail.com" target=3D"_blank">danielgutson@gmail.c=
om</a>></span> wrote:<br><blockquote class=3D"gmail_quote" style=3D"marg=
in:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,20=
4);border-left-style:solid;padding-left:1ex"><span class=3D""><p dir=3D"ltr=
"><br>
El 16/1/2016 7:20, "Andrew Tomazos" <<a href=3D"mailto:andrewt=
omazos@gmail.com" target=3D"_blank">andrewtomazos@gmail.com</a>> escribi=
=C3=B3:<br>
><br>
><br>
><br>
> On Sat, Jan 16, 2016 at 11:05 AM, dgutson . <<a href=3D"mailto:dani=
elgutson@gmail.com" target=3D"_blank">danielgutson@gmail.com</a>> wrote:=
<br>
>><br>
>><br>
>> El 16/1/2016 6:38, "Andrew Tomazos" <<a href=3D"mailt=
o:andrewtomazos@gmail.com" target=3D"_blank">andrewtomazos@gmail.com</a>>=
; escribi=C3=B3:<br>
>> ><br>
>> > Please find attached a rough incomplete 2-page draft entitled=
"Proposal of Index-Based For Loop"<br>
>> ><br>
>> > Preliminary thoughts appreciated.<br>
>><br>
>> I would prefer a library facility for iterating over a numeric ran=
ge (preferably integral types) with steps support:<br>
>><br>
>> =C2=A0=C2=A0 for (auto i : std::numeric_range(4, 12, 2))<br>
>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 stmt;<br>
><br>
> You can already do this more tersely as follows:<br>
><br>
> =C2=A0 for (int i =3D 4; i < 12; i +=3D 2)<br>
><br>
> notice that this is shorter than:<br>
><br>
> =C2=A0 for (int i : std::numeric_range(4, 12, 2))<br>
> =C2=A0</p>
</span><p dir=3D"ltr">But this facility has the following advantages:</p>
<p dir=3D"ltr">=C2=A0=C2=A0 1) the range can be returned by a function:<br>
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 for(auto i : f() )</p></blockquote><bl=
ockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-lef=
t-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padd=
ing-left:1ex">
<p dir=3D"ltr">=C2=A0=C2=A0 2) convenient helpers can be provided:<br>
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 for (auto i : upto(N)) // replaces yor=
proposal<br>
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 for (auto i : downto(-10)) // 0 to -9<=
/p>
<p dir=3D"ltr">=C2=A0=C2=A0=C2=A0 3) the numeric_range can automatically de=
termine the step as -1 if start > end</p></blockquote><div>Don't get=
me wrong, I think a std::numeric_range type is a good idea and should be p=
art of the ranges proposals/initiative.=C2=A0 It is not mutually exclusive =
with this proposal.</div><div><br></div><div>What we are trying to do with =
this proposal is provide a short-hand for a specific very common pattern of=
code that occurs in existing practice.</div><div><br></div><div>You are co=
rrect this could easily be implemented as a library feature:</div><div><br>=
</div><div><font face=3D"monospace, monospace">=C2=A0 for (auto i : std::up=
to(N))<br></font></div><div><br></div><div>However as a core feature it is =
more compact:</div><div><br></div><div><div><font face=3D"monospace, monosp=
ace">=C2=A0 for (auto i : N)<br></font></div></div><div><br></div><div>My c=
laim is that this specific use case is so common, that it warrants its own =
terse core feature over the more verbose library solution.</div><div>=C2=A0=
</div><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;b=
order-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:s=
olid;padding-left:1ex"><p dir=3D"ltr"><br></p><div class=3D""><div class=3D=
"h5">
<p dir=3D"ltr">> The premise of the proposal is that iterating over the =
specific "zero-based index" range {0,1,2,...,N-1} is far more com=
mon in C and C++ than iterating with a different starting point or differen=
t step. =C2=A0(Similar to std::make_index_sequence.) =C2=A0 We therefore pr=
opose a short-hand notation specifically for that common use case, and leav=
e the other less common use cases up to the general for loop (as they are i=
mplemented now).<br>
><br>
> Admittedly I need to back up that claim with hard data.<br>
>><br>
>> Where i will go from 4 to 12 stepping by 2 (the last argument, ste=
p, should default to 1).<br>
>><br>
>> ><br>
>> > Thanks,<br>
>> > Andrew.<br>
>> ><br>
>> > -- <br>
>> ><br>
>> > --- <br>
>> > You received this message because you are subscribed to the G=
oogle Groups "ISO C++ Standard - Future Proposals" group.<br>
>> > To unsubscribe from this group and stop receiving emails from=
it, send an email 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-pr=
oposals@isocpp.org" target=3D"_blank">std-proposals@isocpp.org</a>.<br>
>> > Visit this group at <a href=3D"https://groups.google.com/a/is=
ocpp.org/group/std-proposals/" target=3D"_blank">https://groups.google.com/=
a/isocpp.org/group/std-proposals/</a>.<br>
>><br>
>> -- <br>
>><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 email 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-proposa=
ls@isocpp.org" target=3D"_blank">std-proposals@isocpp.org</a>.<br>
>> Visit this group at <a href=3D"https://groups.google.com/a/isocpp.=
org/group/std-proposals/" target=3D"_blank">https://groups.google.com/a/iso=
cpp.org/group/std-proposals/</a>.<br>
><br>
><br>
> -- <br>
><br>
> --- <br>
> You received this message because you are subscribed to the Google Gro=
ups "ISO C++ Standard - Future Proposals" group.<br>
> To unsubscribe from this group and stop receiving emails from it, send=
an email to <a href=3D"mailto:std-proposals%2Bunsubscribe@isocpp.org" targ=
et=3D"_blank">std-proposals+unsubscribe@isocpp.org</a>.<br>
> To post to this group, send email to <a href=3D"mailto:std-proposals@i=
socpp.org" target=3D"_blank">std-proposals@isocpp.org</a>.<br>
> Visit this group at <a href=3D"https://groups.google.com/a/isocpp.org/=
group/std-proposals/" target=3D"_blank">https://groups.google.com/a/isocpp.=
org/group/std-proposals/</a>.<br>
</p>
<p></p>
-- <br>
<br>
--- <br>
You received this message because you are subscribed to the Google Groups &=
quot;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"mailto:std-proposals+unsubscribe@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"https://groups.google.com/a/isocpp.org/group=
/std-proposals/" target=3D"_blank">https://groups.google.com/a/isocpp.org/g=
roup/std-proposals/</a>.<br>
</div></div></blockquote></div><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" 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"https://groups.google.com/a/isocpp.org/group=
/std-proposals/">https://groups.google.com/a/isocpp.org/group/std-proposals=
/</a>.<br />
--089e01229a7699bc7505297152e8--
.
Author: Sam Kellett <samkellett@gmail.com>
Date: Sat, 16 Jan 2016 10:59:06 +0000
Raw View
--001a114015749cec140529716841
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
On 16 January 2016 at 10:52, Andrew Tomazos <andrewtomazos@gmail.com> wrote=
:
>
>
> On Sat, Jan 16, 2016 at 11:35 AM, dgutson . <danielgutson@gmail.com>
> wrote:
>
>>
>> El 16/1/2016 7:20, "Andrew Tomazos" <andrewtomazos@gmail.com> escribi=C3=
=B3:
>> >
>> >
>> >
>> > On Sat, Jan 16, 2016 at 11:05 AM, dgutson . <danielgutson@gmail.com>
>> wrote:
>> >>
>> >>
>> >> El 16/1/2016 6:38, "Andrew Tomazos" <andrewtomazos@gmail.com>
>> escribi=C3=B3:
>> >> >
>> >> > Please find attached a rough incomplete 2-page draft entitled
>> "Proposal of Index-Based For Loop"
>> >> >
>> >> > Preliminary thoughts appreciated.
>> >>
>> >> I would prefer a library facility for iterating over a numeric range
>> (preferably integral types) with steps support:
>> >>
>> >> for (auto i : std::numeric_range(4, 12, 2))
>> >> stmt;
>> >
>> > You can already do this more tersely as follows:
>> >
>> > for (int i =3D 4; i < 12; i +=3D 2)
>> >
>> > notice that this is shorter than:
>> >
>> > for (int i : std::numeric_range(4, 12, 2))
>> >
>>
>> But this facility has the following advantages:
>>
>> 1) the range can be returned by a function:
>> for(auto i : f() )
>>
> 2) convenient helpers can be provided:
>> for (auto i : upto(N)) // replaces yor proposal
>> for (auto i : downto(-10)) // 0 to -9
>>
>> 3) the numeric_range can automatically determine the step as -1 if
>> start > end
>>
> Don't get me wrong, I think a std::numeric_range type is a good idea and
> should be part of the ranges proposals/initiative. It is not mutually
> exclusive with this proposal.
>
> What we are trying to do with this proposal is provide a short-hand for a
> specific very common pattern of code that occurs in existing practice.
>
> You are correct this could easily be implemented as a library feature:
>
> for (auto i : std::upto(N))
>
> However as a core feature it is more compact:
>
> for (auto i : N)
>
> My claim is that this specific use case is so common, that it warrants it=
s
> own terse core feature over the more verbose library solution.
>
what about the comma operator?
auto operator,(int from, int to) -> std::numeric_range
{
return {from, to, 1};
}
const int N{10};
for (auto i : 0, N) {
std::cout << i << std::endl;
}
--=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 https://groups.google.com/a/isocpp.org/group/std-propos=
als/.
--001a114015749cec140529716841
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><br><div class=3D"gmail_extra"><br><div class=3D"gmail_quo=
te">On 16 January 2016 at 10:52, Andrew Tomazos <span dir=3D"ltr"><<a hr=
ef=3D"mailto:andrewtomazos@gmail.com" target=3D"_blank">andrewtomazos@gmail=
..com</a>></span> wrote:<br><blockquote class=3D"gmail_quote" style=3D"ma=
rgin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"lt=
r"><br><div class=3D"gmail_extra"><br><div class=3D"gmail_quote"><span clas=
s=3D"">On Sat, Jan 16, 2016 at 11:35 AM, dgutson . <span dir=3D"ltr"><<a=
href=3D"mailto:danielgutson@gmail.com" target=3D"_blank">danielgutson@gmai=
l.com</a>></span> wrote:<br><blockquote class=3D"gmail_quote" style=3D"m=
argin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204=
,204);border-left-style:solid;padding-left:1ex"><span><p dir=3D"ltr"><br>
El 16/1/2016 7:20, "Andrew Tomazos" <<a href=3D"mailto:andrewt=
omazos@gmail.com" target=3D"_blank">andrewtomazos@gmail.com</a>> escribi=
=C3=B3:<br>
><br>
><br>
><br>
> On Sat, Jan 16, 2016 at 11:05 AM, dgutson . <<a href=3D"mailto:dani=
elgutson@gmail.com" target=3D"_blank">danielgutson@gmail.com</a>> wrote:=
<br>
>><br>
>><br>
>> El 16/1/2016 6:38, "Andrew Tomazos" <<a href=3D"mailt=
o:andrewtomazos@gmail.com" target=3D"_blank">andrewtomazos@gmail.com</a>>=
; escribi=C3=B3:<br>
>> ><br>
>> > Please find attached a rough incomplete 2-page draft entitled=
"Proposal of Index-Based For Loop"<br>
>> ><br>
>> > Preliminary thoughts appreciated.<br>
>><br>
>> I would prefer a library facility for iterating over a numeric ran=
ge (preferably integral types) with steps support:<br>
>><br>
>> =C2=A0=C2=A0 for (auto i : std::numeric_range(4, 12, 2))<br>
>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 stmt;<br>
><br>
> You can already do this more tersely as follows:<br>
><br>
> =C2=A0 for (int i =3D 4; i < 12; i +=3D 2)<br>
><br>
> notice that this is shorter than:<br>
><br>
> =C2=A0 for (int i : std::numeric_range(4, 12, 2))<br>
> =C2=A0</p>
</span><p dir=3D"ltr">But this facility has the following advantages:</p>
<p dir=3D"ltr">=C2=A0=C2=A0 1) the range can be returned by a function:<br>
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 for(auto i : f() )</p></blockquote><bl=
ockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-lef=
t-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padd=
ing-left:1ex">
<p dir=3D"ltr">=C2=A0=C2=A0 2) convenient helpers can be provided:<br>
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 for (auto i : upto(N)) // replaces yor=
proposal<br>
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 for (auto i : downto(-10)) // 0 to -9<=
/p>
<p dir=3D"ltr">=C2=A0=C2=A0=C2=A0 3) the numeric_range can automatically de=
termine the step as -1 if start > end</p></blockquote></span><div>Don=
9;t get me wrong, I think a std::numeric_range type is a good idea and shou=
ld be part of the ranges proposals/initiative.=C2=A0 It is not mutually exc=
lusive with this proposal.</div><div><br></div><div>What we are trying to d=
o with this proposal is provide a short-hand for a specific very common pat=
tern of code that occurs in existing practice.</div><div><br></div><div>You=
are correct this could easily be implemented as a library feature:</div><d=
iv><br></div><div><font face=3D"monospace, monospace">=C2=A0 for (auto i : =
std::upto(N))<br></font></div><div><br></div><div>However as a core feature=
it is more compact:</div><div><br></div><div><div><font face=3D"monospace,=
monospace">=C2=A0 for (auto i : N)<br></font></div></div><div><br></div><d=
iv>My claim is that this specific use case is so common, that it warrants i=
ts own terse core feature over the more verbose library solution.</div></di=
v></div></div></blockquote><div><br></div><div>what about the comma operato=
r?<br><br></div><div>auto operator,(int from, int to) -> std::numeric_ra=
nge<br>{<br></div><div>=C2=A0 return {from, to, 1};<br></div><div>}<br><br>=
</div><div>const int N{10};<br></div><div>for (auto i : 0, N) {<br></div><d=
iv>=C2=A0 std::cout << i << std::endl;<br></div><div>}<br><br><=
/div></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" 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"https://groups.google.com/a/isocpp.org/group=
/std-proposals/">https://groups.google.com/a/isocpp.org/group/std-proposals=
/</a>.<br />
--001a114015749cec140529716841--
.
Author: Andrew Tomazos <andrewtomazos@gmail.com>
Date: Sat, 16 Jan 2016 12:06:27 +0100
Raw View
--001a11419974de8d7405297182eb
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
On Sat, Jan 16, 2016 at 11:59 AM, Sam Kellett <samkellett@gmail.com> wrote:
>
>
> On 16 January 2016 at 10:52, Andrew Tomazos <andrewtomazos@gmail.com>
> wrote:
>
>>
>>
>> On Sat, Jan 16, 2016 at 11:35 AM, dgutson . <danielgutson@gmail.com>
>> wrote:
>>
>>>
>>> El 16/1/2016 7:20, "Andrew Tomazos" <andrewtomazos@gmail.com> escribi=
=C3=B3:
>>> >
>>> >
>>> >
>>> > On Sat, Jan 16, 2016 at 11:05 AM, dgutson . <danielgutson@gmail.com>
>>> wrote:
>>> >>
>>> >>
>>> >> El 16/1/2016 6:38, "Andrew Tomazos" <andrewtomazos@gmail.com>
>>> escribi=C3=B3:
>>> >> >
>>> >> > Please find attached a rough incomplete 2-page draft entitled
>>> "Proposal of Index-Based For Loop"
>>> >> >
>>> >> > Preliminary thoughts appreciated.
>>> >>
>>> >> I would prefer a library facility for iterating over a numeric range
>>> (preferably integral types) with steps support:
>>> >>
>>> >> for (auto i : std::numeric_range(4, 12, 2))
>>> >> stmt;
>>> >
>>> > You can already do this more tersely as follows:
>>> >
>>> > for (int i =3D 4; i < 12; i +=3D 2)
>>> >
>>> > notice that this is shorter than:
>>> >
>>> > for (int i : std::numeric_range(4, 12, 2))
>>> >
>>>
>>> But this facility has the following advantages:
>>>
>>> 1) the range can be returned by a function:
>>> for(auto i : f() )
>>>
>> 2) convenient helpers can be provided:
>>> for (auto i : upto(N)) // replaces yor proposal
>>> for (auto i : downto(-10)) // 0 to -9
>>>
>>> 3) the numeric_range can automatically determine the step as -1 if
>>> start > end
>>>
>> Don't get me wrong, I think a std::numeric_range type is a good idea and
>> should be part of the ranges proposals/initiative. It is not mutually
>> exclusive with this proposal.
>>
>> What we are trying to do with this proposal is provide a short-hand for =
a
>> specific very common pattern of code that occurs in existing practice.
>>
>> You are correct this could easily be implemented as a library feature:
>>
>> for (auto i : std::upto(N))
>>
>> However as a core feature it is more compact:
>>
>> for (auto i : N)
>>
>> My claim is that this specific use case is so common, that it warrants
>> its own terse core feature over the more verbose library solution.
>>
>
> what about the comma operator?
>
> auto operator,(int from, int to) -> std::numeric_range
> {
> return {from, to, 1};
> }
>
> const int N{10};
> for (auto i : 0, N) {
> std::cout << i << std::endl;
> }
>
Again, the common use case is a looping over an index sequence
specifically. That is 0,1,2,...,N-1. Starting from an integer other than
0 is far less common, so I think we can leave those use cases to the
general for loop.
--=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 https://groups.google.com/a/isocpp.org/group/std-propos=
als/.
--001a11419974de8d7405297182eb
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><br><div class=3D"gmail_extra"><br><div class=3D"gmail_quo=
te">On Sat, Jan 16, 2016 at 11:59 AM, Sam Kellett <span dir=3D"ltr"><<a =
href=3D"mailto:samkellett@gmail.com" target=3D"_blank">samkellett@gmail.com=
</a>></span> wrote:<br><blockquote class=3D"gmail_quote" style=3D"margin=
:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr"><=
br><div class=3D"gmail_extra"><br><div class=3D"gmail_quote"><div><div clas=
s=3D"h5">On 16 January 2016 at 10:52, Andrew Tomazos <span dir=3D"ltr"><=
<a href=3D"mailto:andrewtomazos@gmail.com" target=3D"_blank">andrewtomazos@=
gmail.com</a>></span> wrote:<br><blockquote class=3D"gmail_quote" style=
=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=
=3D"ltr"><br><div class=3D"gmail_extra"><br><div class=3D"gmail_quote"><spa=
n>On Sat, Jan 16, 2016 at 11:35 AM, dgutson . <span dir=3D"ltr"><<a href=
=3D"mailto:danielgutson@gmail.com" target=3D"_blank">danielgutson@gmail.com=
</a>></span> wrote:<br><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"><span><p dir=3D"ltr"><br>
El 16/1/2016 7:20, "Andrew Tomazos" <<a href=3D"mailto:andrewt=
omazos@gmail.com" target=3D"_blank">andrewtomazos@gmail.com</a>> escribi=
=C3=B3:<br>
><br>
><br>
><br>
> On Sat, Jan 16, 2016 at 11:05 AM, dgutson . <<a href=3D"mailto:dani=
elgutson@gmail.com" target=3D"_blank">danielgutson@gmail.com</a>> wrote:=
<br>
>><br>
>><br>
>> El 16/1/2016 6:38, "Andrew Tomazos" <<a href=3D"mailt=
o:andrewtomazos@gmail.com" target=3D"_blank">andrewtomazos@gmail.com</a>>=
; escribi=C3=B3:<br>
>> ><br>
>> > Please find attached a rough incomplete 2-page draft entitled=
"Proposal of Index-Based For Loop"<br>
>> ><br>
>> > Preliminary thoughts appreciated.<br>
>><br>
>> I would prefer a library facility for iterating over a numeric ran=
ge (preferably integral types) with steps support:<br>
>><br>
>> =C2=A0=C2=A0 for (auto i : std::numeric_range(4, 12, 2))<br>
>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 stmt;<br>
><br>
> You can already do this more tersely as follows:<br>
><br>
> =C2=A0 for (int i =3D 4; i < 12; i +=3D 2)<br>
><br>
> notice that this is shorter than:<br>
><br>
> =C2=A0 for (int i : std::numeric_range(4, 12, 2))<br>
> =C2=A0</p>
</span><p dir=3D"ltr">But this facility has the following advantages:</p>
<p dir=3D"ltr">=C2=A0=C2=A0 1) the range can be returned by a function:<br>
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 for(auto i : f() )</p></blockquote><bl=
ockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-lef=
t-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padd=
ing-left:1ex">
<p dir=3D"ltr">=C2=A0=C2=A0 2) convenient helpers can be provided:<br>
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 for (auto i : upto(N)) // replaces yor=
proposal<br>
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 for (auto i : downto(-10)) // 0 to -9<=
/p>
<p dir=3D"ltr">=C2=A0=C2=A0=C2=A0 3) the numeric_range can automatically de=
termine the step as -1 if start > end</p></blockquote></span><div>Don=
9;t get me wrong, I think a std::numeric_range type is a good idea and shou=
ld be part of the ranges proposals/initiative.=C2=A0 It is not mutually exc=
lusive with this proposal.</div><div><br></div><div>What we are trying to d=
o with this proposal is provide a short-hand for a specific very common pat=
tern of code that occurs in existing practice.</div><div><br></div><div>You=
are correct this could easily be implemented as a library feature:</div><d=
iv><br></div><div><font face=3D"monospace, monospace">=C2=A0 for (auto i : =
std::upto(N))<br></font></div><div><br></div><div>However as a core feature=
it is more compact:</div><div><br></div><div><div><font face=3D"monospace,=
monospace">=C2=A0 for (auto i : N)<br></font></div></div><div><br></div><d=
iv>My claim is that this specific use case is so common, that it warrants i=
ts own terse core feature over the more verbose library solution.</div></di=
v></div></div></blockquote><div><br></div></div></div><div>what about the c=
omma operator?<br><br></div><div>auto operator,(int from, int to) -> std=
::numeric_range<br>{<br></div><div>=C2=A0 return {from, to, 1};<br></div><d=
iv>}<br><br></div><div>const int N{10};<br></div><div>for (auto i : 0, N) {=
<br></div><div>=C2=A0 std::cout << i << std::endl;<br></div><di=
v>}<br></div></div></div></div></blockquote><div><br></div><div>Again, the =
common use case is a looping over an index sequence specifically.=C2=A0 Tha=
t is 0,1,2,...,N-1.=C2=A0 Starting from an integer other than 0 is far less=
common, so I think we can leave those use cases to the general for loop.</=
div><div><br></div></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" 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"https://groups.google.com/a/isocpp.org/group=
/std-proposals/">https://groups.google.com/a/isocpp.org/group/std-proposals=
/</a>.<br />
--001a11419974de8d7405297182eb--
.
Author: Nicol Bolas <jmckesson@gmail.com>
Date: Sat, 16 Jan 2016 08:04:28 -0800 (PST)
Raw View
------=_Part_1207_1803120594.1452960268410
Content-Type: multipart/alternative;
boundary="----=_Part_1208_1911946784.1452960268411"
------=_Part_1208_1911946784.1452960268411
Content-Type: text/plain; charset=UTF-8
On Saturday, January 16, 2016 at 4:38:19 AM UTC-5, Andrew Tomazos wrote:
>
> Please find attached a rough incomplete 2-page draft entitled "Proposal of
> Index-Based For Loop"
>
> Preliminary thoughts appreciated.
>
First thought: why a PDF? It's a preliminary rough draft; a text file would
have been just fine, and I wouldn't have to download it, virus check it,
and load it into my PDF viewer.
Beyond that, your proposal is poorly prepared. Motivation needs to be step
1, because the primary argument against this feature is that it is
*unnecessary*.
You need to convince people that your syntax should be adopted over a
library solution like this:
for(auto i : std::monotonic(10)) //Always goes from 0 to X
or:
for(auto i : std::irange(10)) //One parameter means it goes from 0 to X.
Could take an alternate starting index and an increment/decrement
And so forth.
It doesn't matter how high the proportion of such cases are. If a library
solution will solve the problem with the exact same fidelity and
readability as a language solution, with only a minimum of syntactical
difference, then there is no justification for making it a language
solution.
From my perspective, this is a non-starter without a *much* better
justification section. It needs to explain, not just that the pattern gets
used a lot, but why a library solution should be considered an inadequate
replacement.
--
---
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 https://groups.google.com/a/isocpp.org/group/std-proposals/.
------=_Part_1208_1911946784.1452960268411
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr">On Saturday, January 16, 2016 at 4:38:19 AM UTC-5, Andrew =
Tomazos wrote:<blockquote class=3D"gmail_quote" style=3D"margin: 0;margin-l=
eft: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"ltr"=
>Please find attached a rough incomplete 2-page draft entitled "Propos=
al of Index-Based For Loop"<div><br></div><div>Preliminary thoughts ap=
preciated.</div></div></blockquote><div><br>First thought: why a PDF? It=
9;s a preliminary rough draft; a text file would have been just fine, and I=
wouldn't have to download it, virus check it, and load it into my PDF =
viewer.<br><br>Beyond that, your proposal is poorly prepared. Motivation ne=
eds to be step 1, because the primary argument against this feature is that=
it is <i>unnecessary</i>.<br><br>You need to convince people that your syn=
tax should be adopted over a library solution like this:<br><br><div class=
=3D"prettyprint" style=3D"background-color: rgb(250, 250, 250); border-colo=
r: rgb(187, 187, 187); border-style: solid; border-width: 1px; word-wrap: b=
reak-word;"><code class=3D"prettyprint"><div class=3D"subprettyprint"><span=
style=3D"color: #008;" class=3D"styled-by-prettify">for</span><span style=
=3D"color: #660;" class=3D"styled-by-prettify">(</span><span style=3D"color=
: #008;" class=3D"styled-by-prettify">auto</span><span style=3D"color: #000=
;" class=3D"styled-by-prettify"> i </span><span style=3D"color: #660;" clas=
s=3D"styled-by-prettify">:</span><span style=3D"color: #000;" class=3D"styl=
ed-by-prettify"> std</span><span style=3D"color: #660;" class=3D"styled-by-=
prettify">::</span><span style=3D"color: #000;" class=3D"styled-by-prettify=
">monotonic</span><span style=3D"color: #660;" class=3D"styled-by-prettify"=
>(</span><span style=3D"color: #066;" class=3D"styled-by-prettify">10</span=
><span style=3D"color: #660;" class=3D"styled-by-prettify">))</span><span s=
tyle=3D"color: #000;" class=3D"styled-by-prettify"> </span><span style=3D"c=
olor: #800;" class=3D"styled-by-prettify">//Always goes from 0 to X</span><=
span style=3D"color: #000;" class=3D"styled-by-prettify"><br></span></div><=
/code></div><br>or:<br><br><div class=3D"prettyprint" style=3D"background-c=
olor: rgb(250, 250, 250); border-color: rgb(187, 187, 187); border-style: s=
olid; border-width: 1px; word-wrap: break-word;"><code class=3D"prettyprint=
"><div class=3D"subprettyprint"><span style=3D"color: #008;" class=3D"style=
d-by-prettify">for</span><span style=3D"color: #660;" class=3D"styled-by-pr=
ettify">(</span><span style=3D"color: #008;" class=3D"styled-by-prettify">a=
uto</span><span style=3D"color: #000;" class=3D"styled-by-prettify"> i </sp=
an><span style=3D"color: #660;" class=3D"styled-by-prettify">:</span><span =
style=3D"color: #000;" class=3D"styled-by-prettify"> std</span><span style=
=3D"color: #660;" class=3D"styled-by-prettify">::</span><span style=3D"colo=
r: #000;" class=3D"styled-by-prettify">irange</span><span style=3D"color: #=
660;" class=3D"styled-by-prettify">(</span><span style=3D"color: #066;" cla=
ss=3D"styled-by-prettify">10</span><span style=3D"color: #660;" class=3D"st=
yled-by-prettify">))</span><span style=3D"color: #000;" class=3D"styled-by-=
prettify"> </span><span style=3D"color: #800;" class=3D"styled-by-prettify"=
>//One parameter means it goes from 0 to X. Could take an alternate startin=
g index and an increment/decrement</span><span style=3D"color: #000;" class=
=3D"styled-by-prettify"><br></span></div></code></div><br>And so forth.<br>=
<br>It doesn't matter how high the proportion of such cases are. If a l=
ibrary solution will solve the problem with the exact same fidelity and rea=
dability as a language solution, with only a minimum of syntactical differe=
nce, then there is no justification for making it a language solution.<br><=
br>From my perspective, this is a non-starter without a <i>much</i> better =
justification section. It needs to explain, not just that the pattern gets =
used a lot, but why a library solution should be considered an inadequate r=
eplacement.<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" 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"https://groups.google.com/a/isocpp.org/group=
/std-proposals/">https://groups.google.com/a/isocpp.org/group/std-proposals=
/</a>.<br />
------=_Part_1208_1911946784.1452960268411--
------=_Part_1207_1803120594.1452960268410--
.
Author: Farid Mehrabi <farid.mehrabi@gmail.com>
Date: Sat, 16 Jan 2016 19:38:58 +0330
Raw View
--001a11c151e223e3ad052975bf89
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
Hi Andrew,
AFIAK, changing the core of language just to remove one short word of
typing has never been a convincing proposal.
the subject u r addressing does not even remove any duplication, nor does
it increase run-time performance or even readability. It does not increase
expressive of the language.
Core-language modifications - even minimal ones - r generally considered
heavy lifts and avoid, unless there are great motivations that in the
current context I (as an experimental programmer) can't see it.
The library solution can be handled quite elegantly via template/constexpr
and other modern C++ features:
for(auto i: to(10));
for(auto i: from(-10));
for(auto i: to(10),3);
for(auto i: to(10),from(5),3);
for(auto i: to(10),from(15),3);//downward step=3D3
for(auto i: from(4),-to(10),3);//upward step=3D3 rang=3D[4,10) (exclude 10)
for(auto i: from(16),-to(10),3);//downward step=3D3 rang=3D(10,16] (exclude=
10)
for(auto i: in(5,15));
for(auto i: in(5,15)-2);//downward step=3D2
for(auto i: -+in(5,15));//downward range=3D(5,15] (exclude 5)
for(auto i: +-in(5,15),2);//upward step=3D2 range=3D[5,15) (exclude 15)
for(auto d: in(5.5,15.5)-0.5);//downward step=3D0.5 in float range
for(auto d: -+in(5.5,15.5)|exp);//downward with exponential growth float
range=3D(5.5,15.5] (exclude 5.5)
//upward with user-defined growth ,float range=3D(5.5,15.5] (exclude 15.5)=
:
for(auto d: +-in(5.5,15.5) | fn([](float x)->float{return pow(x,x);}));
in fact, the library approach can remove the common caveat of mistaken
conditioning/stepping/initialization:
for(int i=3D0 ; i > 10 ; --i);// downward step, starting from 0 , as long a=
s
i is above 10!!!!!!
regards,
FM.
2016-01-16 14:36 GMT+03:30 Andrew Tomazos <andrewtomazos@gmail.com>:
>
>
> On Sat, Jan 16, 2016 at 11:59 AM, Sam Kellett <samkellett@gmail.com>
> wrote:
>
>>
>>
>> On 16 January 2016 at 10:52, Andrew Tomazos <andrewtomazos@gmail.com>
>> wrote:
>>
>>>
>>>
>>> On Sat, Jan 16, 2016 at 11:35 AM, dgutson . <danielgutson@gmail.com>
>>> wrote:
>>>
>>>>
>>>> El 16/1/2016 7:20, "Andrew Tomazos" <andrewtomazos@gmail.com> escribi=
=C3=B3:
>>>> >
>>>> >
>>>> >
>>>> > On Sat, Jan 16, 2016 at 11:05 AM, dgutson . <danielgutson@gmail.com>
>>>> wrote:
>>>> >>
>>>> >>
>>>> >> El 16/1/2016 6:38, "Andrew Tomazos" <andrewtomazos@gmail.com>
>>>> escribi=C3=B3:
>>>> >> >
>>>> >> > Please find attached a rough incomplete 2-page draft entitled
>>>> "Proposal of Index-Based For Loop"
>>>> >> >
>>>> >> > Preliminary thoughts appreciated.
>>>> >>
>>>> >> I would prefer a library facility for iterating over a numeric rang=
e
>>>> (preferably integral types) with steps support:
>>>> >>
>>>> >> for (auto i : std::numeric_range(4, 12, 2))
>>>> >> stmt;
>>>> >
>>>> > You can already do this more tersely as follows:
>>>> >
>>>> > for (int i =3D 4; i < 12; i +=3D 2)
>>>> >
>>>> > notice that this is shorter than:
>>>> >
>>>> > for (int i : std::numeric_range(4, 12, 2))
>>>> >
>>>>
>>>> But this facility has the following advantages:
>>>>
>>>> 1) the range can be returned by a function:
>>>> for(auto i : f() )
>>>>
>>> 2) convenient helpers can be provided:
>>>> for (auto i : upto(N)) // replaces yor proposal
>>>> for (auto i : downto(-10)) // 0 to -9
>>>>
>>>> 3) the numeric_range can automatically determine the step as -1 if
>>>> start > end
>>>>
>>> Don't get me wrong, I think a std::numeric_range type is a good idea an=
d
>>> should be part of the ranges proposals/initiative. It is not mutually
>>> exclusive with this proposal.
>>>
>>> What we are trying to do with this proposal is provide a short-hand for
>>> a specific very common pattern of code that occurs in existing practice=
..
>>>
>>> You are correct this could easily be implemented as a library feature:
>>>
>>> for (auto i : std::upto(N))
>>>
>>> However as a core feature it is more compact:
>>>
>>> for (auto i : N)
>>>
>>> My claim is that this specific use case is so common, that it warrants
>>> its own terse core feature over the more verbose library solution.
>>>
>>
>> what about the comma operator?
>>
>> auto operator,(int from, int to) -> std::numeric_range
>> {
>> return {from, to, 1};
>> }
>>
>> const int N{10};
>> for (auto i : 0, N) {
>> std::cout << i << std::endl;
>> }
>>
>
> Again, the common use case is a looping over an index sequence
> specifically. That is 0,1,2,...,N-1. Starting from an integer other tha=
n
> 0 is far less common, so I think we can leave those use cases to the
> general for loop.
>
> --
---
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
https://groups.google.com/a/isocpp.org/group/std-proposals/.
--=20
how am I supposed to end the twisted road of your hair in such a dark
night??
unless the candle of your face does shed some light upon my way!!!
--=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 https://groups.google.com/a/isocpp.org/group/std-propos=
als/.
--001a11c151e223e3ad052975bf89
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"rtl"><div class=3D"gmail_default" style=3D"font-family:'ari=
al narrow',sans-serif;font-size:large" dir=3D"ltr">Hi Andrew,</div><div=
class=3D"gmail_default" style=3D"font-family:'arial narrow',sans-s=
erif;font-size:large" dir=3D"ltr"><br></div><div class=3D"gmail_default" st=
yle=3D"font-family:'arial narrow',sans-serif;font-size:large" dir=
=3D"ltr">AFIAK, changing the core of language just to remove one short word=
of typing has never been a convincing proposal.</div><div class=3D"gmail_d=
efault" style=3D"font-family:'arial narrow',sans-serif;font-size:la=
rge" dir=3D"ltr">the subject u r addressing does not even remove any duplic=
ation, nor does it increase run-time performance or even readability. It do=
es not increase expressive of the language.=C2=A0</div><div class=3D"gmail_=
default" style=3D"font-family:'arial narrow',sans-serif;font-size:l=
arge" dir=3D"ltr">Core-language modifications - even minimal ones - r gener=
ally considered heavy lifts and avoid, unless there are great motivations t=
hat in the current context I (as an experimental programmer) can't see =
it.</div><div class=3D"gmail_default" style=3D"font-family:'arial narro=
w',sans-serif;font-size:large" dir=3D"ltr">The library solution can be =
handled quite elegantly via template/constexpr and other modern C++ feature=
s:</div><div class=3D"gmail_default" style=3D"font-family:'arial narrow=
',sans-serif;font-size:large" dir=3D"ltr"><br></div><div class=3D"gmail=
_default" style=3D"font-family:'arial narrow',sans-serif;font-size:=
large" dir=3D"ltr"><div class=3D"gmail_default" dir=3D"ltr">for(auto i: to(=
10));<br></div><div><div class=3D"gmail_default" dir=3D"ltr">for(auto i: fr=
om(-10));<br></div></div><div><div class=3D"gmail_default" dir=3D"ltr"><div=
><div class=3D"gmail_default" dir=3D"ltr">for(auto i: to(10),3);<br></div><=
/div><div><div class=3D"gmail_default" dir=3D"ltr"><div><div class=3D"gmail=
_default" dir=3D"ltr">for(auto i: to(10),from(5),3);<br></div></div><div><d=
iv class=3D"gmail_default" dir=3D"ltr"><div><div class=3D"gmail_default" di=
r=3D"ltr">for(auto i: to(10),from(15),3);//downward step=3D3<br></div></div=
><div><div class=3D"gmail_default" dir=3D"ltr"><div><div class=3D"gmail_def=
ault" dir=3D"ltr">for(auto i: from(4),-to(10),3);//upward step=3D3 rang=3D[=
4,10) (exclude 10)</div></div><div><div class=3D"gmail_default" dir=3D"ltr"=
><div><div class=3D"gmail_default" dir=3D"ltr">for(auto i: from(16),-to(10)=
,3);//downward=C2=A0step=3D3 rang=3D(10,16] (exclude 10)</div></div><div><d=
iv class=3D"gmail_default" dir=3D"ltr"><br></div><div class=3D"gmail_defaul=
t" dir=3D"ltr"><div><div class=3D"gmail_default" dir=3D"ltr">for(auto i: in=
(5,15));</div></div><div><div class=3D"gmail_default" dir=3D"ltr"><div><div=
class=3D"gmail_default" dir=3D"ltr">for(auto i: in(5,15)-2);//downward ste=
p=3D2</div></div><div><div class=3D"gmail_default" dir=3D"ltr"><div><div cl=
ass=3D"gmail_default" dir=3D"ltr">for(auto i: -+in(5,15));//downward =C2=A0=
range=3D(5,15]=C2=A0(exclude 5)</div></div><div><div><div class=3D"gmail_de=
fault" dir=3D"ltr">for(auto i: +-in(5,15),2);//upward =C2=A0step=3D2 range=
=3D[5,15) (exclude 15)</div></div></div><div class=3D"gmail_default" dir=3D=
"ltr"><br></div><div class=3D"gmail_default" dir=3D"ltr"><div><div class=3D=
"gmail_default" dir=3D"ltr"><div class=3D"gmail_default" dir=3D"ltr"><div><=
div class=3D"gmail_default" dir=3D"ltr">for(auto d: in(5.5,15.5)-0.5);//dow=
nward step=3D0.5 in float range</div></div><div><div class=3D"gmail_default=
" dir=3D"ltr"><div><div class=3D"gmail_default" dir=3D"ltr"><div><div class=
=3D"gmail_default" dir=3D"ltr">for(auto d: -+in(5.5,15.5)|exp);//downward w=
ith exponential growth =C2=A0float range=3D(5.5,15.5]=C2=A0(exclude 5.5)</d=
iv></div><div><div><div class=3D"gmail_default" dir=3D"ltr"><div><div class=
=3D"gmail_default" dir=3D"ltr"><br></div><div class=3D"gmail_default" dir=
=3D"ltr">//upward with user-defined growth =C2=A0,float range=3D(5.5,15.5]=
=C2=A0(exclude 15.5):</div></div></div><div class=3D"gmail_default" dir=3D"=
ltr">for(auto d: +-in(5.5,15.5) | fn([](float x)->float{return pow(x,x);=
}));</div></div></div><div class=3D"gmail_default" dir=3D"ltr"><br></div><d=
iv class=3D"gmail_default">in fact, the library approach can remove the com=
mon caveat =C2=A0of mistaken conditioning/stepping/initialization:</div><di=
v class=3D"gmail_default">for(int i=3D0 ; i > 10 ; --i);// downward step=
, starting from 0 , as long as i is above 10!!!!!!</div><div class=3D"gmail=
_default"><br></div><div class=3D"gmail_default">=C2=A0regards,</div><div c=
lass=3D"gmail_default">FM.</div></div></div><div><div class=3D"gmail_defaul=
t" dir=3D"ltr"><div></div></div></div></div></div><div><div class=3D"gmail_=
default" dir=3D"ltr"><div></div></div></div></div></div></div></div></div><=
/div></div></div></div></div></div></div></div></div></div></div></div></di=
v></div></div></div></div><div class=3D"gmail_extra"><div dir=3D"ltr"><br><=
div class=3D"gmail_quote">2016-01-16 14:36 GMT+03:30 Andrew Tomazos <span d=
ir=3D"ltr"><<a href=3D"mailto:andrewtomazos@gmail.com" target=3D"_blank"=
>andrewtomazos@gmail.com</a>></span>:<br><blockquote class=3D"gmail_quot=
e" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">=
<br><div class=3D"gmail_extra"><br><div class=3D"gmail_quote"><div><div cla=
ss=3D"h5">On Sat, Jan 16, 2016 at 11:59 AM, Sam Kellett <span dir=3D"ltr">&=
lt;<a href=3D"mailto:samkellett@gmail.com" target=3D"_blank">samkellett@gma=
il.com</a>></span> wrote:<br><blockquote class=3D"gmail_quote" style=3D"=
margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"=
ltr"><br><div class=3D"gmail_extra"><br><div class=3D"gmail_quote"><div><di=
v>On 16 January 2016 at 10:52, Andrew Tomazos <span dir=3D"ltr"><<a href=
=3D"mailto:andrewtomazos@gmail.com" target=3D"_blank">andrewtomazos@gmail.c=
om</a>></span> wrote:<br><blockquote class=3D"gmail_quote" style=3D"marg=
in:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr"=
><br><div class=3D"gmail_extra"><br><div class=3D"gmail_quote"><span>On Sat=
, Jan 16, 2016 at 11:35 AM, dgutson . <span dir=3D"ltr"><<a href=3D"mail=
to:danielgutson@gmail.com" target=3D"_blank">danielgutson@gmail.com</a>>=
</span> wrote:<br><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"><span><p dir=3D"ltr"><br>
El 16/1/2016 7:20, "Andrew Tomazos" <<a href=3D"mailto:andrewt=
omazos@gmail.com" target=3D"_blank">andrewtomazos@gmail.com</a>> escribi=
=C3=B3:<br>
><br>
><br>
><br>
> On Sat, Jan 16, 2016 at 11:05 AM, dgutson . <<a href=3D"mailto:dani=
elgutson@gmail.com" target=3D"_blank">danielgutson@gmail.com</a>> wrote:=
<br>
>><br>
>><br>
>> El 16/1/2016 6:38, "Andrew Tomazos" <<a href=3D"mailt=
o:andrewtomazos@gmail.com" target=3D"_blank">andrewtomazos@gmail.com</a>>=
; escribi=C3=B3:<br>
>> ><br>
>> > Please find attached a rough incomplete 2-page draft entitled=
"Proposal of Index-Based For Loop"<br>
>> ><br>
>> > Preliminary thoughts appreciated.<br>
>><br>
>> I would prefer a library facility for iterating over a numeric ran=
ge (preferably integral types) with steps support:<br>
>><br>
>> =C2=A0=C2=A0 for (auto i : std::numeric_range(4, 12, 2))<br>
>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 stmt;<br>
><br>
> You can already do this more tersely as follows:<br>
><br>
> =C2=A0 for (int i =3D 4; i < 12; i +=3D 2)<br>
><br>
> notice that this is shorter than:<br>
><br>
> =C2=A0 for (int i : std::numeric_range(4, 12, 2))<br>
> =C2=A0</p>
</span><p dir=3D"ltr">But this facility has the following advantages:</p>
<p dir=3D"ltr">=C2=A0=C2=A0 1) the range can be returned by a function:<br>
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 for(auto i : f() )</p></blockquote><bl=
ockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-lef=
t-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padd=
ing-left:1ex">
<p dir=3D"ltr">=C2=A0=C2=A0 2) convenient helpers can be provided:<br>
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 for (auto i : upto(N)) // replaces yor=
proposal<br>
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 for (auto i : downto(-10)) // 0 to -9<=
/p>
<p dir=3D"ltr">=C2=A0=C2=A0=C2=A0 3) the numeric_range can automatically de=
termine the step as -1 if start > end</p></blockquote></span><div>Don=
9;t get me wrong, I think a std::numeric_range type is a good idea and shou=
ld be part of the ranges proposals/initiative.=C2=A0 It is not mutually exc=
lusive with this proposal.</div><div><br></div><div>What we are trying to d=
o with this proposal is provide a short-hand for a specific very common pat=
tern of code that occurs in existing practice.</div><div><br></div><div>You=
are correct this could easily be implemented as a library feature:</div><d=
iv><br></div><div><font face=3D"monospace, monospace">=C2=A0 for (auto i : =
std::upto(N))<br></font></div><div><br></div><div>However as a core feature=
it is more compact:</div><div><br></div><div><div><font face=3D"monospace,=
monospace">=C2=A0 for (auto i : N)<br></font></div></div><div><br></div><d=
iv>My claim is that this specific use case is so common, that it warrants i=
ts own terse core feature over the more verbose library solution.</div></di=
v></div></div></blockquote><div><br></div></div></div><div>what about the c=
omma operator?<br><br></div><div>auto operator,(int from, int to) -> std=
::numeric_range<br>{<br></div><div>=C2=A0 return {from, to, 1};<br></div><d=
iv>}<br><br></div><div>const int N{10};<br></div><div>for (auto i : 0, N) {=
<br></div><div>=C2=A0 std::cout << i << std::endl;<br></div><di=
v>}<br></div></div></div></div></blockquote><div><br></div></div></div><div=
>Again, the common use case is a looping over an index sequence specificall=
y.=C2=A0 That is 0,1,2,...,N-1.=C2=A0 Starting from an integer other than 0=
is far less common, so I think we can leave those use cases to the general=
for loop.</div><div><br></div></div></div></blockquote></div><div class=3D=
"HOEnZb"><div class=3D"h5">
<p></p>
-- <br>
<br>
--- <br>
You received this message because you are subscribed to the Google Groups &=
quot;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"mailto:std-proposals+unsubscribe@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"https://groups.google.com/a/isocpp.org/group=
/std-proposals/" target=3D"_blank">https://groups.google.com/a/isocpp.org/g=
roup/std-proposals/</a>.<br>
</div></div></div><br clear=3D"all"><div><br></div>-- <br><div class=3D"gma=
il_signature"><div dir=3D"rtl"><div><div dir=3D"ltr">how am I supposed to e=
nd the twisted road of=C2=A0 your hair in such a dark night??<br>unless the=
candle of your face does shed some light upon my way!!!<br></div></div></d=
iv></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" 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"https://groups.google.com/a/isocpp.org/group=
/std-proposals/">https://groups.google.com/a/isocpp.org/group/std-proposals=
/</a>.<br />
--001a11c151e223e3ad052975bf89--
.
Author: Andrew Tomazos <andrewtomazos@gmail.com>
Date: Sat, 16 Jan 2016 19:18:31 +0100
Raw View
--089e01229a7611ebcd0529778cd8
Content-Type: text/plain; charset=UTF-8
On Sat, Jan 16, 2016 at 5:08 PM, Farid Mehrabi <farid.mehrabi@gmail.com>
wrote:
> AFIAK, changing the core of language just to remove one short word of
> typing has never been a convincing proposal.
>
Why have a built-in + operator? Why not have a std::add library function
instead? It just removes one short word of typing. The answer is that for
common-enough use cases, we provide a terse built-in syntax - even at the
added implementation expense of core changes compared to library facilities.
--
---
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 https://groups.google.com/a/isocpp.org/group/std-proposals/.
--089e01229a7611ebcd0529778cd8
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><div class=3D"gmail_extra"><div class=3D"gmail_quote">On S=
at, Jan 16, 2016 at 5:08 PM, Farid Mehrabi <span dir=3D"ltr"><<a href=3D=
"mailto:farid.mehrabi@gmail.com" target=3D"_blank">farid.mehrabi@gmail.com<=
/a>></span> wrote:<br><blockquote class=3D"gmail_quote" style=3D"margin:=
0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"rtl"><d=
iv style=3D"font-family:'arial narrow',sans-serif;font-size:large" =
dir=3D"ltr">AFIAK, changing the core of language just to remove one short w=
ord of typing has never been a convincing proposal.<br></div></div></blockq=
uote><div>=C2=A0</div><div>Why have a built-in + operator?=C2=A0 Why not ha=
ve a std::add library function instead?=C2=A0 It just removes one short wor=
d of typing.=C2=A0 The answer is that for common-enough use cases, we provi=
de a terse built-in syntax - even at the added implementation expense of co=
re changes compared to library facilities.</div><div><br></div></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" 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"https://groups.google.com/a/isocpp.org/group=
/std-proposals/">https://groups.google.com/a/isocpp.org/group/std-proposals=
/</a>.<br />
--089e01229a7611ebcd0529778cd8--
.
Author: Nicol Bolas <jmckesson@gmail.com>
Date: Sat, 16 Jan 2016 11:03:52 -0800 (PST)
Raw View
------=_Part_3365_321165725.1452971033053
Content-Type: multipart/alternative;
boundary="----=_Part_3366_365887592.1452971033053"
------=_Part_3366_365887592.1452971033053
Content-Type: text/plain; charset=UTF-8
On Saturday, January 16, 2016 at 1:18:33 PM UTC-5, Andrew Tomazos wrote:
>
> On Sat, Jan 16, 2016 at 5:08 PM, Farid Mehrabi <farid....@gmail.com
> <javascript:>> wrote:
>
>> AFIAK, changing the core of language just to remove one short word of
>> typing has never been a convincing proposal.
>>
>
> Why have a built-in + operator? Why not have a std::add library function
> instead? It just removes one short word of typing. The answer is that for
> common-enough use cases, we provide a terse built-in syntax - even at the
> added implementation expense of core changes compared to library facilities.
>
.... is that *really* the best argument you can put forward for this? "Well,
we did it with + and integers, why not do it with looping from 0 to X?"
Seriously, who exactly do you expect to convince with that?
People can argue that many things are "common-enough use cases". That
*alone* is insufficient.
One of the primary reasons why we added range-based for was because people
*consistently* wrote range loops incorrectly. Common mistakes include using
the slower (or non-existent) postfix ++ operator to increment the iterator
and constantly calling the potentially expensive `end` function. And doing
it correctly involves creating new scopes manually or leaking variables.
By making range-based for a first-class language feature, you eliminate
these problems. Something similar goes for the recent `for/else` proposal;
it's taking a problem people often implement incorrectly or oddly and make
those implementations more correct.
What problem does your proposal solve? Are people frequently writing
monotonic loops over the range [0, X) incorrectly?
The most frequent error I see with such loops is people accidentally
modifying the loop counter. Which can be resolved just fine with a library
solution.
--
---
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 https://groups.google.com/a/isocpp.org/group/std-proposals/.
------=_Part_3366_365887592.1452971033053
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
On Saturday, January 16, 2016 at 1:18:33 PM UTC-5, Andrew Tomazos wrote:<bl=
ockquote class=3D"gmail_quote" style=3D"margin: 0;margin-left: 0.8ex;border=
-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"ltr"><div><div class=
=3D"gmail_quote">On Sat, Jan 16, 2016 at 5:08 PM, Farid Mehrabi <span dir=
=3D"ltr"><<a href=3D"javascript:" target=3D"_blank" gdf-obfuscated-mailt=
o=3D"NoKR5ALNFgAJ" rel=3D"nofollow" onmousedown=3D"this.href=3D'javascr=
ipt:';return true;" onclick=3D"this.href=3D'javascript:';return=
true;">farid....@gmail.com</a>></span> wrote:<br><blockquote class=3D"g=
mail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-l=
eft:1ex"><div dir=3D"rtl"><div style=3D"font-family:'arial narrow',=
sans-serif;font-size:large" dir=3D"ltr">AFIAK, changing the core of languag=
e just to remove one short word of typing has never been a convincing propo=
sal.<br></div></div></blockquote><div>=C2=A0</div><div>Why have a built-in =
+ operator?=C2=A0 Why not have a std::add library function instead?=C2=A0 I=
t just removes one short word of typing.=C2=A0 The answer is that for commo=
n-enough use cases, we provide a terse built-in syntax - even at the added =
implementation expense of core changes compared to library facilities.</div=
></div></div></div></blockquote><div><br>... is that <i>really</i> the best=
argument you can put forward for this? "Well, we did it with + and in=
tegers, why not do it with looping from 0 to X?" Seriously, who exactl=
y do you expect to convince with that?<br><br>People can argue that many th=
ings are "common-enough use cases". That <i>alone</i> is insuffic=
ient.<br><br>One of the primary reasons why we added range-based for was be=
cause people <i>consistently</i> wrote range loops incorrectly. Common mist=
akes include using the slower (or non-existent) postfix ++ operator to incr=
ement the iterator and constantly calling the potentially expensive `end` f=
unction. And doing it correctly involves creating new scopes manually or le=
aking variables.<br><br>By making range-based for a first-class language fe=
ature, you eliminate these problems. Something similar goes for the recent =
`for/else` proposal; it's taking a problem people often implement incor=
rectly or oddly and make those implementations more correct.<br><br>What pr=
oblem does your proposal solve? Are people frequently writing monotonic loo=
ps over the range [0, X) incorrectly?<br><br>The most frequent error I see =
with such loops is people accidentally modifying the loop counter. Which ca=
n be resolved just fine with a library solution.<br></div>
<p></p>
-- <br />
<br />
--- <br />
You received this message because you are subscribed to the Google Groups &=
quot;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"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"https://groups.google.com/a/isocpp.org/group=
/std-proposals/">https://groups.google.com/a/isocpp.org/group/std-proposals=
/</a>.<br />
------=_Part_3366_365887592.1452971033053--
------=_Part_3365_321165725.1452971033053--
.
Author: Izzy Coding <matthew.i.greenwood@gmail.com>
Date: Sun, 17 Jan 2016 06:55:06 -0800 (PST)
Raw View
------=_Part_2841_741776683.1453042506479
Content-Type: text/plain; charset=UTF-8
I do believe that this is probably pointless.
Current work in both libraries and in the Ranges proposals would make this pointless. Also for an index that does not start from zero, how would this syntax help?
I would prefer something like this:
for(auto val : std::range(12,56))
printf("index is: %s", val);
Than the following:
for(auto val : 56)
if(val > 12)
printf("index is: %s", val);
--
---
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 https://groups.google.com/a/isocpp.org/group/std-proposals/.
------=_Part_2841_741776683.1453042506479--
.
Author: Farid Mehrabi <farid.mehrabi@gmail.com>
Date: Sun, 17 Jan 2016 19:50:04 +0330
Raw View
--001a11c1550ca8d60305298a046f
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
2016-01-16 21:48 GMT+03:30 Andrew Tomazos <andrewtomazos@gmail.com>:
> Why have a
> =E2=80=8B=E2=80=8B
> built-in + operator? Why not have a std::add library function instead?
> It just removes one short word of typing. The answer is that for
> common-enough use cases, we provide a terse built-in syntax - even at the
> added implementation expense of core changes compared to library faciliti=
es.
>
=E2=80=8BThe 'operator +' has been there since day one. No need to change t=
he core
language to have it.
Have u ever joined a programmer team working on project larger than a few
tens of thousand lines of code spattered in several (more than somewhat 20)
modules? can you imagine the amount time of effort spent to detect and
remove compile and run time errors due to simple - but buggy - change? And
this is just a meer application project. A software - more specifically a
programming language - project is far more complex and delicate. The price
of a small change in core language is rather too high; it involves long
development cycles including community programmers and testers.Therefore
modification of the core is generally avoided unless:
1. There is great determination due to an urgent need ***and***,
2. There exists no close-to-optimal library implementation of the feature(A=
fter
all one purpose of creating libraries has always been to prevent core
language modifications).
As u might have noticed in my previous post, I believe that criteria NO.1
is correct for indexed loops (removing the caveat of wrong
initialization/conditioning/stepping in for loops). ***But*** criteria NO.2
???
My answer is no. I have already given code snippets to show how flexibly
the library can handle the syntax for the discussed feature.
cheers,
FM.
--=20
how am I supposed to end the twisted road of your hair in such a dark
night??
unless the candle of your face does shed some light upon my way!!!
--=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 https://groups.google.com/a/isocpp.org/group/std-propos=
als/.
--001a11c1550ca8d60305298a046f
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"rtl"><div class=3D"gmail_default" style=3D"font-family:'ari=
al narrow',sans-serif;font-size:large"><br></div><div class=3D"gmail_ex=
tra"><div dir=3D"ltr"><br><div class=3D"gmail_quote">2016-01-16 21:48 GMT+0=
3:30 Andrew Tomazos <span dir=3D"ltr"><<a href=3D"mailto:andrewtomazos@g=
mail.com" target=3D"_blank">andrewtomazos@gmail.com</a>></span>:<br><blo=
ckquote class=3D"gmail_quote" style=3D"margin:0px 0.8ex;border-left-width:1=
px;border-left-color:rgb(204,204,204);border-left-style:solid;border-right-=
width:1px;border-right-color:rgb(204,204,204);border-right-style:solid;padd=
ing-left:1ex;padding-right:1ex"><div class=3D"gmail_extra"><div class=3D"gm=
ail_quote"><div>Why have a <div class=3D"gmail_default" style=3D"font-famil=
y:'arial narrow',sans-serif;font-size:large;display:inline">=E2=80=
=8B=E2=80=8B</div>built-in + operator?=C2=A0 Why not have a std::add librar=
y function instead?=C2=A0 It just removes one short word of typing.=C2=A0 T=
he answer is that for common-enough use cases, we provide a terse built-in =
syntax - even at the added implementation expense of core changes compared =
to library facilities.</div></div></div></blockquote><div><br></div><div><d=
iv class=3D"gmail_default"><font face=3D"arial narrow, sans-serif" size=3D"=
4">=E2=80=8BThe 'operator +' has been there since day one. No need =
to change the core language to have it.=C2=A0</font></div><div class=3D"gma=
il_default"><font face=3D"arial narrow, sans-serif" size=3D"4">Have u ever =
joined a programmer team working on project larger than a few tens of thous=
and=C2=A0lines of code spattered in several (more than somewhat 20) modules=
? can you imagine the amount time of effort spent to detect and remove comp=
ile and run time errors due to simple - but buggy - change? And this is jus=
t a meer application project. A software - more specifically a programming =
language - project is far more complex and delicate. The price of a small c=
hange in core language is rather too high; it involves long development cyc=
les including community programmers and testers.Therefore modification of t=
he core is generally avoided unless:</font></div></div><div class=3D"gmail_=
default"><font face=3D"arial narrow, sans-serif" size=3D"4"><br></font></di=
v><div class=3D"gmail_default"><font face=3D"arial narrow, sans-serif" size=
=3D"4">1. There is great determination due to an urgent need ***and***,</fo=
nt></div><div class=3D"gmail_default"><font face=3D"arial narrow, sans-seri=
f" size=3D"4">2. There exists no close-to-optimal library implementation of=
the feature(</font><span style=3D"font-family:'arial narrow',sans-=
serif;font-size:large">After all one purpose of creating libraries has alwa=
ys been to prevent core language modifications).</span></div><div class=3D"=
gmail_default"><span style=3D"font-family:'arial narrow',sans-serif=
;font-size:large"><br></span></div><div class=3D"gmail_default"><span style=
=3D"font-family:'arial narrow',sans-serif;font-size:large">As u mig=
ht have noticed in my previous post, I believe that criteria NO.1 is correc=
t for indexed loops (removing the caveat of wrong initialization/conditioni=
ng/stepping in for loops). ***But*** criteria NO.2 ???</span></div><div cla=
ss=3D"gmail_default"><span style=3D"font-family:'arial narrow',sans=
-serif;font-size:large">My answer is no. I have=C2=A0</span><span style=3D"=
font-family:'arial narrow',sans-serif;font-size:large">already</spa=
n><span style=3D"font-family:'arial narrow',sans-serif;font-size:la=
rge">=C2=A0given code snippets to show how flexibly the library can handle =
the syntax for the discussed feature.</span></div><div class=3D"gmail_defau=
lt"><span style=3D"font-family:'arial narrow',sans-serif;font-size:=
large"><br></span></div><div class=3D"gmail_default"><span style=3D"font-fa=
mily:'arial narrow',sans-serif;font-size:large">cheers,</span></div=
><div class=3D"gmail_default"><span style=3D"font-family:'arial narrow&=
#39;,sans-serif;font-size:large">FM.</span></div></div><div class=3D""><div=
class=3D"h5">
<p></p>
--=C2=A0<br></div><div class=3D"h5"><br></div></div></div><div class=3D"gma=
il_signature"><div dir=3D"rtl"><div><div dir=3D"ltr">how am I supposed to e=
nd the twisted road of=C2=A0 your hair in such a dark night??<br>unless the=
candle of your face does shed some light upon my way!!!<br></div></div></d=
iv></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" 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"https://groups.google.com/a/isocpp.org/group=
/std-proposals/">https://groups.google.com/a/isocpp.org/group/std-proposals=
/</a>.<br />
--001a11c1550ca8d60305298a046f--
.
Author: Nicol Bolas <jmckesson@gmail.com>
Date: Sun, 17 Jan 2016 13:39:35 -0800 (PST)
Raw View
------=_Part_107_1614991443.1453066775850
Content-Type: multipart/alternative;
boundary="----=_Part_108_494792052.1453066775850"
------=_Part_108_494792052.1453066775850
Content-Type: text/plain; charset=UTF-8
On Sunday, January 17, 2016 at 9:55:06 AM UTC-5, Izzy Coding wrote:
>
> I do believe that this is probably pointless.
> Current work in both libraries and in the Ranges proposals would make this
> pointless. Also for an index that does not start from zero, how would this
> syntax help?
> I would prefer something like this:
>
> for(auto val : std::range(12,56))
> printf("index is: %s", val);
>
> Than the following:
>
> for(auto val : 56)
> if(val > 12)
> printf("index is: %s", val);
>
I hadn't realized that such a syntax would encourage such code, but your
code made me realize something else as well.
Seeing the full range in the code makes it clear exactly what's going on.
So if someone can understand what this means:
for(auto &value : vec)
Then they can easily guess at what this means:
for(auto &value : irange(0, 35))
Whereas this:
for(auto &value : 35)
Is a bit less clear exactly what's going on. It's using "range for" syntax,
but there's no *range*; it's just a number. Whereas a user can see `irange`
with two values and take a reasonable guess at what that means, even if
they've never seen it before.
I don't think the proposal improves clarity.
--
---
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 https://groups.google.com/a/isocpp.org/group/std-proposals/.
------=_Part_108_494792052.1453066775850
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr">On Sunday, January 17, 2016 at 9:55:06 AM UTC-5, Izzy Codi=
ng wrote:<blockquote class=3D"gmail_quote" style=3D"margin: 0;margin-left: =
0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;">I do believe that thi=
s is probably pointless.<br>Current work in both libraries and in the Range=
s proposals would make this pointless. Also for an index that does not star=
t from zero, how would this syntax help?<br>I would prefer something like t=
his:<p>for(auto val : std::range(12,56))<br>=C2=A0 =C2=A0 printf("inde=
x is: %s", val);</p><p>Than the following:</p><p>for(auto val : 56)<br=
>=C2=A0 =C2=A0 if(val > 12)<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 printf("=
index is: %s", val);</p></blockquote><div><br>I hadn't realized th=
at such a syntax would encourage such code, but your code made me realize s=
omething else as well.<br><br>Seeing the full range in the code makes it cl=
ear exactly what's going on. So if someone can understand what this mea=
ns:<br><br><div class=3D"prettyprint" style=3D"background-color: rgb(250, 2=
50, 250); border-color: rgb(187, 187, 187); border-style: solid; border-wid=
th: 1px; word-wrap: break-word;"><code class=3D"prettyprint"><div class=3D"=
subprettyprint"><span style=3D"color: #008;" class=3D"styled-by-prettify">f=
or</span><span style=3D"color: #660;" class=3D"styled-by-prettify">(</span>=
<span style=3D"color: #008;" class=3D"styled-by-prettify">auto</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">value </span><span style=3D"color: #6=
60;" class=3D"styled-by-prettify">:</span><span style=3D"color: #000;" clas=
s=3D"styled-by-prettify"> vec</span><span style=3D"color: #660;" class=3D"s=
tyled-by-prettify">)</span></div></code></div><br>Then they can easily gues=
s at what this means:<br><br><div class=3D"prettyprint" style=3D"background=
-color: rgb(250, 250, 250); border-color: rgb(187, 187, 187); border-style:=
solid; border-width: 1px; word-wrap: break-word;"><code class=3D"prettypri=
nt"><div class=3D"subprettyprint"><span style=3D"color: #008;" class=3D"sty=
led-by-prettify">for</span><span style=3D"color: #660;" class=3D"styled-by-=
prettify">(</span><span style=3D"color: #008;" class=3D"styled-by-prettify"=
>auto</span><span style=3D"color: #000;" class=3D"styled-by-prettify"> </sp=
an><span style=3D"color: #660;" class=3D"styled-by-prettify">&</span><s=
pan style=3D"color: #000;" class=3D"styled-by-prettify">value </span><span =
style=3D"color: #660;" class=3D"styled-by-prettify">:</span><span style=3D"=
color: #000;" class=3D"styled-by-prettify"> irange</span><span style=3D"col=
or: #660;" 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"styled-by-prettify">,</span><span style=3D"color: #000;" class=3D"style=
d-by-prettify"> </span><span style=3D"color: #066;" class=3D"styled-by-pret=
tify">35</span><span style=3D"color: #660;" class=3D"styled-by-prettify">))=
</span></div></code></div><br>Whereas this:<br><br><div class=3D"prettyprin=
t" style=3D"background-color: rgb(250, 250, 250); border-color: rgb(187, 18=
7, 187); border-style: solid; border-width: 1px; word-wrap: break-word;"><c=
ode class=3D"prettyprint"><div class=3D"subprettyprint"><span style=3D"colo=
r: #008;" class=3D"styled-by-prettify">for</span><span style=3D"color: #660=
;" class=3D"styled-by-prettify">(</span><span style=3D"color: #008;" class=
=3D"styled-by-prettify">auto</span><span style=3D"color: #000;" class=3D"st=
yled-by-prettify"> </span><span style=3D"color: #660;" class=3D"styled-by-p=
rettify">&</span><span style=3D"color: #000;" class=3D"styled-by-pretti=
fy">value </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: #066;" class=3D"styled-by-prettify">35</span><span sty=
le=3D"color: #660;" class=3D"styled-by-prettify">)</span></div></code></div=
><br>Is a bit less clear exactly what's going on. It's using "=
range for" syntax, but there's no <i>range</i>; it's just a nu=
mber. Whereas a user can see `irange` with two values and take a reasonable=
guess at what that means, even if they've never seen it before.<br><br=
>I don't think the proposal improves clarity.<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" 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"https://groups.google.com/a/isocpp.org/group=
/std-proposals/">https://groups.google.com/a/isocpp.org/group/std-proposals=
/</a>.<br />
------=_Part_108_494792052.1453066775850--
------=_Part_107_1614991443.1453066775850--
.
Author: "dgutson ." <danielgutson@gmail.com>
Date: Sun, 17 Jan 2016 19:56:31 -0300
Raw View
(intentionally top posting since this is not a specific reply).
Andrew, I humbly suggest you to focus your efforts in a
library-version proposal.
As a non solicited helping hand, here is a 5 minutes implementation.
I called it make_range rather than irange as other suggested.
I didn't either put much effort in checking if this has previously been pro=
posed
and/or the ranges SG has already one.
Of course I know you can write it yourself, but I'm posting something
to start with as an initial step.
If you or somebody else thinks that this should be a new thread,
please let me know.
If you don't want to write a library version proposal (and there is
none already), I will.
http://ideone.com/CnCwzF
Daniel.
On Sun, Jan 17, 2016 at 6:39 PM, Nicol Bolas <jmckesson@gmail.com> wrote:
> On Sunday, January 17, 2016 at 9:55:06 AM UTC-5, Izzy Coding wrote:
>>
>> I do believe that this is probably pointless.
>> Current work in both libraries and in the Ranges proposals would make th=
is
>> pointless. Also for an index that does not start from zero, how would th=
is
>> syntax help?
>> I would prefer something like this:
>>
>> for(auto val : std::range(12,56))
>> printf("index is: %s", val);
>>
>> Than the following:
>>
>> for(auto val : 56)
>> if(val > 12)
>> printf("index is: %s", val);
>
>
> I hadn't realized that such a syntax would encourage such code, but your
> code made me realize something else as well.
>
> Seeing the full range in the code makes it clear exactly what's going on.=
So
> if someone can understand what this means:
>
> for(auto &value : vec)
>
> Then they can easily guess at what this means:
>
> for(auto &value : irange(0, 35))
>
> Whereas this:
>
> for(auto &value : 35)
>
> Is a bit less clear exactly what's going on. It's using "range for" synta=
x,
> but there's no range; it's just a number. Whereas a user can see `irange`
> with two values and take a reasonable guess at what that means, even if
> they've never seen it before.
>
> I don't think the proposal improves clarity.
>
> --
>
> ---
> 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
> https://groups.google.com/a/isocpp.org/group/std-proposals/.
--=20
Who=E2=80=99s got the sweetest disposition?
One guess, that=E2=80=99s who?
Who=E2=80=99d never, ever start an argument?
Who never shows a bit of temperament?
Who's never wrong but always right?
Who'd never dream of starting a fight?
Who get stuck with all the bad luck?
--=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 https://groups.google.com/a/isocpp.org/group/std-propos=
als/.
.
Author: Andrew Tomazos <andrewtomazos@gmail.com>
Date: Mon, 18 Jan 2016 01:24:22 +0100
Raw View
--047d7ba972225367dc052990c618
Content-Type: text/plain; charset=UTF-8
On Sun, Jan 17, 2016 at 11:56 PM, dgutson . <danielgutson@gmail.com> wrote:
> I humbly suggest you to focus your efforts in a library-version proposal.
>
I don't think people will use a library-based solution for for loops, even
if one was adopted. They will just continue to use the general for loop as
they do now, as it is shorter and doesn't require an include. As evidence
I give you the fact that the library-based solution is easy to implement,
and yet we haven't seen any existing practice of it. On the other hand, I
think the proposed dedicated syntax, which actually is a short-hand, and
doesn't require an include, would get used.
--
---
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 https://groups.google.com/a/isocpp.org/group/std-proposals/.
--047d7ba972225367dc052990c618
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><div class=3D"gmail_extra"><div class=3D"gmail_quote">On S=
un, Jan 17, 2016 at 11:56 PM, dgutson . <span dir=3D"ltr"><<a href=3D"ma=
ilto:danielgutson@gmail.com" target=3D"_blank">danielgutson@gmail.com</a>&g=
t;</span> wrote:<br><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0=
.8ex;border-left:1px #ccc solid;padding-left:1ex">I humbly suggest you to =
focus your efforts in a=C2=A0library-version proposal.<br></blockquote><div=
><br></div><div>I don't think people will use a library-based solution =
for for loops, even if one was adopted.=C2=A0 They will just continue to us=
e the general for loop as they do now, as it is shorter and doesn't req=
uire an include.=C2=A0 As evidence I give you the fact that the library-bas=
ed solution is easy to implement, and yet we haven't seen any existing =
practice of it.=C2=A0 On the other hand, I think the proposed dedicated syn=
tax, which actually is a short-hand, and doesn't require an include, wo=
uld get used.</div><div><br></div></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" 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"https://groups.google.com/a/isocpp.org/group=
/std-proposals/">https://groups.google.com/a/isocpp.org/group/std-proposals=
/</a>.<br />
--047d7ba972225367dc052990c618--
.
Author: Ville Voutilainen <ville.voutilainen@gmail.com>
Date: Mon, 18 Jan 2016 02:53:39 +0200
Raw View
On 18 January 2016 at 02:24, Andrew Tomazos <andrewtomazos@gmail.com> wrote:
> On Sun, Jan 17, 2016 at 11:56 PM, dgutson . <danielgutson@gmail.com> wrote:
>>
>> I humbly suggest you to focus your efforts in a library-version proposal.
> I don't think people will use a library-based solution for for loops, even
> if one was adopted. They will just continue to use the general for loop as
> they do now, as it is shorter and doesn't require an include. As evidence I
> give you the fact that the library-based solution is easy to implement, and
> yet we haven't seen any existing practice of it. On the other hand, I think
> the proposed dedicated syntax, which actually is a short-hand, and doesn't
> require an include, would get used.
Existing practice is not that hard to find, it's right where one would expect it
to be:
http://www.boost.org/doc/libs/1_60_0/libs/range/doc/html/range/reference/ranges/irange.html
--
---
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 https://groups.google.com/a/isocpp.org/group/std-proposals/.
.
Author: "dgutson ." <danielgutson@gmail.com>
Date: Sun, 17 Jan 2016 23:35:25 -0300
Raw View
El 17/1/2016 21:53, "Ville Voutilainen" <ville.voutilainen@gmail.com> escri=
bi=C3=B3:
>
> On 18 January 2016 at 02:24, Andrew Tomazos <andrewtomazos@gmail.com> wro=
te:
> > On Sun, Jan 17, 2016 at 11:56 PM, dgutson . <danielgutson@gmail.com> wr=
ote:
> >>
> >> I humbly suggest you to focus your efforts in a library-version propos=
al.
> > I don't think people will use a library-based solution for for loops, e=
ven
> > if one was adopted. They will just continue to use the general for loo=
p as
> > they do now, as it is shorter and doesn't require an include. As evide=
nce I
> > give you the fact that the library-based solution is easy to implement,=
and
> > yet we haven't seen any existing practice of it.
I don't know how widely Boost's irange is used; the file has copyright
2010 and is not constexpr friendly, so maybe that's a symptom that it
is no very used.
> On the other hand, I think
> > the proposed dedicated syntax, which actually is a short-hand, and does=
n't
> > require an include, would get used.
Maybe, I think it's hard to predict.
>
> Existing practice is not that hard to find, it's right where one would ex=
pect it
> to be:
> http://www.boost.org/doc/libs/1_60_0/libs/range/doc/html/range/reference/=
ranges/irange.html
I don't think we need this feature at all. But if it's decided that
C++ has to make room for it, I do prefer the library solution rather
than the core language one. I said before I was going to write a
library version proposal, but now that I think this better, I won't. I
think we should focus our energy in relevant nowadays problems, like
concepts, contracts, etc., rather than something that has been being
done since 40 years ago and everybody is used to without complain,
just to avoid a few keystrokes.
But that's my humble oppinion.
>
> --
>
> ---
> 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 https://groups.google.com/a/isocpp.org/group/std-prop=
osals/.
--=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 https://groups.google.com/a/isocpp.org/group/std-propos=
als/.
.
Author: Nicol Bolas <jmckesson@gmail.com>
Date: Sun, 17 Jan 2016 20:24:44 -0800 (PST)
Raw View
------=_Part_1810_265308296.1453091084410
Content-Type: multipart/alternative;
boundary="----=_Part_1811_604118281.1453091084410"
------=_Part_1811_604118281.1453091084410
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
On Sunday, January 17, 2016 at 9:35:27 PM UTC-5, dgutson wrote:
>
> El 17/1/2016 21:53, "Ville Voutilainen" <ville.vo...@gmail.com=20
> <javascript:>> escribi=C3=B3:=20
> >=20
> > On 18 January 2016 at 02:24, Andrew Tomazos <andrew...@gmail.com=20
> <javascript:>> wrote:=20
> > > On Sun, Jan 17, 2016 at 11:56 PM, dgutson . <daniel...@gmail.com=20
> <javascript:>> wrote:=20
> > >>=20
> > >> I humbly suggest you to focus your efforts in a library-version=20
> proposal.=20
> > > I don't think people will use a library-based solution for for loops,=
=20
> even=20
> > > if one was adopted. They will just continue to use the general for=
=20
> loop as=20
> > > they do now, as it is shorter and doesn't require an include. As=20
> evidence I=20
> > > give you the fact that the library-based solution is easy to=20
> implement, and=20
> > > yet we haven't seen any existing practice of it.=20
>
> I don't know how widely Boost's irange is used; the file has copyright=20
> 2010 and is not constexpr friendly, so maybe that's a symptom that it=20
> is no very used.=20
>
I think that's true of most, if not all, of Boost.Range. The Range library=
=20
is in an odd development place, since its primary maintainer is developing=
=20
the next version <https://github.com/ericniebler/range-v3>, which I think=
=20
is attempting to align with his Range TS proposal.
So it hasn't seen much work. Range v3 has view::ints and view::iota=20
<https://ericniebler.github.io/range-v3/#range-views>, which serve the same=
=20
purpose as this, but is more C++11-friendly, with constexpr and so forth.=
=20
Though I think it's still limited to C++11, to try to be widely compatible=
=20
across compiler versions.
>=20
> > Existing practice is not that hard to find, it's right where one would=
=20
> expect it=20
> > to be:=20
> >=20
> http://www.boost.org/doc/libs/1_60_0/libs/range/doc/html/range/reference/=
ranges/irange.html=20
>
> I don't think we need this feature at all.
Well, we kinda do; there's a reason why Range v3 includes it. But the main=
=20
motivation for it is not for using range-based `for` to iterate over a=20
sequence of integers. It *can* do that, but it's main purpose is to be able=
=20
to generate a range of numbers, which can then be used in range adapters,=
=20
manipulators, and the like.
So whether you expend energy on it or not, we *will* be seeing it sooner or=
=20
later. Indeed, it's probably best to let the various Range TS proposals=20
sort it out, since they're the ones who will most need it.
=20
> But if it's decided that=20
> C++ has to make room for it, I do prefer the library solution rather=20
> than the core language one. I said before I was going to write a=20
> library version proposal, but now that I think this better, I won't. I=20
> think we should focus our energy in relevant nowadays problems, like=20
> concepts, contracts, etc., rather than something that has been being=20
> done since 40 years ago and everybody is used to without complain,=20
> just to avoid a few keystrokes.=20
> But that's my humble oppinion.
>
--=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 https://groups.google.com/a/isocpp.org/group/std-propos=
als/.
------=_Part_1811_604118281.1453091084410
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
On Sunday, January 17, 2016 at 9:35:27 PM UTC-5, dgutson wrote:<blockquote =
class=3D"gmail_quote" style=3D"margin: 0;margin-left: 0.8ex;border-left: 1p=
x #ccc solid;padding-left: 1ex;">El 17/1/2016 21:53, "Ville Voutilaine=
n" <<a href=3D"javascript:" target=3D"_blank" gdf-obfuscated-mailto=
=3D"lxrI7rQ2FwAJ" rel=3D"nofollow" onmousedown=3D"this.href=3D'javascri=
pt:';return true;" onclick=3D"this.href=3D'javascript:';return =
true;">ville.vo...@gmail.com</a>> escribi=C3=B3:
<br>>
<br>> On 18 January 2016 at 02:24, Andrew Tomazos <<a href=3D"javascr=
ipt:" target=3D"_blank" gdf-obfuscated-mailto=3D"lxrI7rQ2FwAJ" rel=3D"nofol=
low" onmousedown=3D"this.href=3D'javascript:';return true;" onclick=
=3D"this.href=3D'javascript:';return true;">andrew...@gmail.com</a>=
> wrote:
<br>> > On Sun, Jan 17, 2016 at 11:56 PM, dgutson . <<a href=3D"ja=
vascript:" target=3D"_blank" gdf-obfuscated-mailto=3D"lxrI7rQ2FwAJ" rel=3D"=
nofollow" onmousedown=3D"this.href=3D'javascript:';return true;" on=
click=3D"this.href=3D'javascript:';return true;">daniel...@gmail.co=
m</a>> wrote:
<br>> >>
<br>> >> I humbly suggest you to focus your efforts in a library-v=
ersion proposal.
<br>> > I don't think people will use a library-based solution fo=
r for loops, even
<br>> > if one was adopted. =C2=A0They will just continue to use the =
general for loop as
<br>> > they do now, as it is shorter and doesn't require an incl=
ude. =C2=A0As evidence I
<br>> > give you the fact that the library-based solution is easy to =
implement, and
<br>> > yet we haven't seen any existing practice of it.
<br>
<br>I don't know how widely Boost's irange is used; the file has co=
pyright
<br>2010 and is not constexpr friendly, so maybe that's a symptom that =
it
<br>is no very used.
<br></blockquote><div><br>I think that's true of most, if not all, of B=
oost.Range. The Range library is in an odd development place, since its pri=
mary maintainer is developing the <a href=3D"https://github.com/ericniebler=
/range-v3">next version</a>, which I think is attempting to align with his =
Range TS proposal.<br><br>So it hasn't seen much work. Range v3 has <a =
href=3D"https://ericniebler.github.io/range-v3/#range-views">view::ints and=
view::iota</a>, which serve the same purpose as this, but is more C++11-fr=
iendly, with constexpr and so forth. Though I think it's still limited =
to C++11, to try to be widely compatible across compiler versions.<br><br><=
/div><blockquote class=3D"gmail_quote" style=3D"margin: 0;margin-left: 0.8e=
x;border-left: 1px #ccc solid;padding-left: 1ex;">>
<br>> Existing practice is not that hard to find, it's right where o=
ne would expect it
<br>> to be:
<br>> <a href=3D"http://www.boost.org/doc/libs/1_60_0/libs/range/doc/htm=
l/range/reference/ranges/irange.html" target=3D"_blank" rel=3D"nofollow" on=
mousedown=3D"this.href=3D'http://www.google.com/url?q\75http%3A%2F%2Fww=
w.boost.org%2Fdoc%2Flibs%2F1_60_0%2Flibs%2Frange%2Fdoc%2Fhtml%2Frange%2Fref=
erence%2Franges%2Firange.html\46sa\75D\46sntz\0751\46usg\75AFQjCNEtX4MHZH83=
Wr5Ju0Snt19rEfIcSg';return true;" onclick=3D"this.href=3D'http://ww=
w.google.com/url?q\75http%3A%2F%2Fwww.boost.org%2Fdoc%2Flibs%2F1_60_0%2Flib=
s%2Frange%2Fdoc%2Fhtml%2Frange%2Freference%2Franges%2Firange.html\46sa\75D\=
46sntz\0751\46usg\75AFQjCNEtX4MHZH83Wr5Ju0Snt19rEfIcSg';return true;">h=
ttp://www.boost.org/doc/libs/<wbr>1_60_0/libs/range/doc/html/<wbr>range/ref=
erence/ranges/irange.<wbr>html</a>
<br>
<br>I don't think we need this feature at all.</blockquote><div><br>Wel=
l, we kinda do; there's a reason why Range v3 includes it. But the main=
motivation for it is not for using range-based `for` to iterate over a seq=
uence of integers. It <i>can</i> do that, but it's main purpose is to b=
e able to generate a range of numbers, which can then be used in range adap=
ters, manipulators, and the like.<br><br>So whether you expend energy on it=
or not, we <i>will</i> be seeing it sooner or later. Indeed, it's prob=
ably best to let the various Range TS proposals sort it out, since they'=
;re the ones who will most need it.<br>=C2=A0</div><blockquote class=3D"gma=
il_quote" style=3D"margin: 0;margin-left: 0.8ex;border-left: 1px #ccc solid=
;padding-left: 1ex;">But if it's decided that
<br>C++ has to make room for it, I do prefer the library solution rather
<br>than the core language one. I said before I was going to write a
<br>library version proposal, but now that I think this better, I won't=
.. I
<br>think we should focus our energy in relevant nowadays problems, like
<br>concepts, contracts, etc., rather than something that has been being
<br>done since 40 years ago and everybody is used to without complain,
<br>just to avoid a few keystrokes.
<br>But that's my humble oppinion.<br></blockquote>
<p></p>
-- <br />
<br />
--- <br />
You received this message because you are subscribed to the Google Groups &=
quot;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"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"https://groups.google.com/a/isocpp.org/group=
/std-proposals/">https://groups.google.com/a/isocpp.org/group/std-proposals=
/</a>.<br />
------=_Part_1811_604118281.1453091084410--
------=_Part_1810_265308296.1453091084410--
.
Author: Nicol Bolas <jmckesson@gmail.com>
Date: Sun, 17 Jan 2016 20:44:40 -0800 (PST)
Raw View
------=_Part_237_1060530553.1453092280565
Content-Type: multipart/alternative;
boundary="----=_Part_238_2006548636.1453092280566"
------=_Part_238_2006548636.1453092280566
Content-Type: text/plain; charset=UTF-8
On Sunday, January 17, 2016 at 7:24:25 PM UTC-5, Andrew Tomazos wrote:
>
> On Sun, Jan 17, 2016 at 11:56 PM, dgutson . <daniel...@gmail.com
> <javascript:>> wrote:
>
>> I humbly suggest you to focus your efforts in a library-version proposal.
>>
>
> I don't think people will use a library-based solution for for loops, even
> if one was adopted. They will just continue to use the general for loop as
> they do now, as it is shorter and doesn't require an include.
>
How much shorter it is depends on how you name your counting variable:
for(int i : std::irange(0, 50))
for(int i = 0; i < 50; ++i)
That's 4 characters shorter. So if the counting variable is more than 3
letters long, the `irange` version is shorter. And judicious use of `using`
can make the `irange` version *always* shorter.
As evidence I give you the fact that the library-based solution is easy to
> implement, and yet we haven't seen any existing practice of it.
>
Have you actually tried to implement a genuine C++ random access iterator?
You have to not only implement the various methods and member operators,
you have to implement overrides of free functions like `advance`,
`distance`, `next`, etc.
And of course without Concepts, there's pretty much no way to *know* that
you've gotten it right, that you haven't accidentally missed something.
I would be hesitant to call that "easy to implement". Sure, if you take
shortcuts, you could get away with something not entirely terrible. We're
not talking about the complexity of implementing a `variant` or something.
But it's far from trivial.
All of that isn't worth implementing for one project, just over something
as trivial as a loop over a range of integers. If it already existed, sure.
The other thing is how invisible such code tends to be. Many people who
know about Boost and even Boost.Range don't know about `irange`.
If it were part of the C++ core guidelines, I rather suspect things would
be different.
In short, there are plenty of reasons why this isn't common. Most of these
reasons would be solved by having it in the standard library.
That's hardly a guarantee that it will replace the old way. But quite
frankly, replacing old loops is a pipe dream. Most people are not going to
rewrite perfectly functioning code for no reason. The best you could do
under any such goal is to get people writhing *new* loops to use the new
syntax.
And thanks to range-based, there aren't nearly that many loops that could
use what you're suggesting.
--
---
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 https://groups.google.com/a/isocpp.org/group/std-proposals/.
------=_Part_238_2006548636.1453092280566
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<br><br>On Sunday, January 17, 2016 at 7:24:25 PM UTC-5, Andrew Tomazos wro=
te:<blockquote class=3D"gmail_quote" style=3D"margin: 0;margin-left: 0.8ex;=
border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"ltr"><div><div =
class=3D"gmail_quote">On Sun, Jan 17, 2016 at 11:56 PM, dgutson . <span dir=
=3D"ltr"><<a href=3D"javascript:" target=3D"_blank" gdf-obfuscated-mailt=
o=3D"SkW7d44vFwAJ" rel=3D"nofollow" onmousedown=3D"this.href=3D'javascr=
ipt:';return true;" onclick=3D"this.href=3D'javascript:';return=
true;">daniel...@gmail.com</a>></span> wrote:<br><blockquote class=3D"g=
mail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-l=
eft:1ex">I humbly suggest you to focus your efforts in a=C2=A0library-versi=
on proposal.<br></blockquote><div><br></div><div>I don't think people w=
ill use a library-based solution for for loops, even if one was adopted.=C2=
=A0 They will just continue to use the general for loop as they do now, as =
it is shorter and doesn't require an include.</div></div></div></div></=
blockquote><div><br>How much shorter it is depends on how you name your cou=
nting variable:<br><br><div class=3D"prettyprint" style=3D"background-color=
: rgb(250, 250, 250); border-color: rgb(187, 187, 187); border-style: solid=
; border-width: 1px; word-wrap: break-word;"><code class=3D"prettyprint"><d=
iv class=3D"subprettyprint"><span style=3D"color: #008;" class=3D"styled-by=
-prettify">for</span><span style=3D"color: #660;" class=3D"styled-by-pretti=
fy">(</span><span style=3D"color: #008;" class=3D"styled-by-prettify">int</=
span><span style=3D"color: #000;" class=3D"styled-by-prettify"> i </span><s=
pan style=3D"color: #660;" class=3D"styled-by-prettify">:</span><span style=
=3D"color: #000;" class=3D"styled-by-prettify"> std</span><span style=3D"co=
lor: #660;" class=3D"styled-by-prettify">::</span><span style=3D"color: #00=
0;" class=3D"styled-by-prettify">irange</span><span style=3D"color: #660;" =
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"styled-by=
-prettify">,</span><span style=3D"color: #000;" class=3D"styled-by-prettify=
"> </span><span style=3D"color: #066;" class=3D"styled-by-prettify">50</spa=
n><span style=3D"color: #660;" class=3D"styled-by-prettify">))</span><span =
style=3D"color: #000;" class=3D"styled-by-prettify"><br><br></span><span st=
yle=3D"color: #008;" class=3D"styled-by-prettify">for</span><span style=3D"=
color: #660;" 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"> i </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: #066;" class=3D"styled-by-pretti=
fy">0</span><span style=3D"color: #660;" class=3D"styled-by-prettify">;</sp=
an><span style=3D"color: #000;" class=3D"styled-by-prettify"> i </span><spa=
n style=3D"color: #660;" class=3D"styled-by-prettify"><</span><span styl=
e=3D"color: #000;" class=3D"styled-by-prettify"> </span><span style=3D"colo=
r: #066;" class=3D"styled-by-prettify">50</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-pre=
ttify">i</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>That's 4 characters shorter. So if the counting =
variable is more than 3 letters long, the `irange` version is shorter. And =
judicious use of `using` can make the `irange` version <i>always</i> shorte=
r.<br><br></div><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"><div><div class=3D"gmail_quote"><div>As evidence I give you the fact tha=
t the library-based solution is easy to implement, and yet we haven't s=
een any existing practice of it.</div></div></div></div></blockquote><div><=
br>Have you actually tried to implement a genuine C++ random access iterato=
r? You have to not only implement the various methods and member operators,=
you have to implement overrides of free functions like `advance`, `distanc=
e`, `next`, etc.<br><br>And of course without Concepts, there's pretty =
much no way to <i>know</i> that you've gotten it right, that you haven&=
#39;t accidentally missed something.<br><br>I would be hesitant to call tha=
t "easy to implement". Sure, if you take shortcuts, you could get=
away with something not entirely terrible. We're not talking about the=
complexity of implementing a `variant` or something. But it's far from=
trivial.<br><br>All of that isn't worth implementing for one project, =
just over something as trivial as a loop over a range of integers. If it al=
ready existed, sure.<br><br>The other thing is how invisible such code tend=
s to be. Many people who know about Boost and even Boost.Range don't kn=
ow about `irange`.<br><br>If it were part of the C++ core guidelines, I rat=
her suspect things would be different.<br><br>In short, there are plenty of=
reasons why this isn't common. Most of these reasons would be solved b=
y having it in the standard library.<br><br>That's hardly a guarantee t=
hat it will replace the old way. But quite frankly, replacing old loops is =
a pipe dream. Most people are not going to rewrite perfectly functioning co=
de for no reason. The best you could do under any such goal is to get peopl=
e writhing <i>new</i> loops to use the new syntax.<br><br>And thanks to ran=
ge-based, there aren't nearly that many loops that could use what you&#=
39;re suggesting.</div><br>
<p></p>
-- <br />
<br />
--- <br />
You received this message because you are subscribed to the Google Groups &=
quot;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"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"https://groups.google.com/a/isocpp.org/group=
/std-proposals/">https://groups.google.com/a/isocpp.org/group/std-proposals=
/</a>.<br />
------=_Part_238_2006548636.1453092280566--
------=_Part_237_1060530553.1453092280565--
.
Author: Moritz Klammler <moritz.klammler@gmail.com>
Date: Mon, 18 Jan 2016 06:17:55 +0100
Raw View
> Have you actually tried to implement a genuine C++ random access
> iterator? You have to not only implement the various methods and
> member operators, you have to implement overrides of free functions
> like `advance`, `distance`, `next`, etc.
I'm afraid that this is going a little off-topic here but I have never
overloaded `advance`, `distance`, `next`, etc for my own iterators.
Aren't the iterator traits supposed to allow the standard versions to
generate optimal code for my iterators, too?
--
---
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 https://groups.google.com/a/isocpp.org/group/std-proposals/.
.
Author: Ville Voutilainen <ville.voutilainen@gmail.com>
Date: Mon, 18 Jan 2016 08:00:05 +0200
Raw View
On 18 January 2016 at 07:17, Moritz Klammler <moritz.klammler@gmail.com> wrote:
>> Have you actually tried to implement a genuine C++ random access
>> iterator? You have to not only implement the various methods and
>> member operators, you have to implement overrides of free functions
>> like `advance`, `distance`, `next`, etc.
>
> I'm afraid that this is going a little off-topic here but I have never
> overloaded `advance`, `distance`, `next`, etc for my own iterators.
> Aren't the iterator traits supposed to allow the standard versions to
> generate optimal code for my iterators, too?
Yes. You don't need to overload nor specialize advance/distance/next, just
have the nested typedefs that [iterator.traits] mentions (either directly or via
inheritance) and your iterator will fit right in, including
performance optimizations.
--
---
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 https://groups.google.com/a/isocpp.org/group/std-proposals/.
.
Author: Patrice Roy <patricer@gmail.com>
Date: Mon, 18 Jan 2016 03:15:03 -0500
Raw View
--001a113ecbba9348a20529975982
Content-Type: text/plain; charset=UTF-8
I'm not necessarily looking for this, but the suggestions in this thread
made me wonder if extending the fold expressions to allow something like
this:
for(auto n : {32...65})
f(n);
.... to be equivalent to such a thing as:
for(auto n : { 32, 33, 34, ... 64, 65}) // the ... is informal here,
nothing more
f(n);
.... might not be suitable for those who want the feature, and maybe useful
elsewhere, such as replacing:
vector<int> v(100);
iota(begin(v), end(v), 1);
....with:
vector<int> v{ 1...100 };
.... which could be an improvement, I guess. After all, we do allow trailing
operands in fold expressions for some operators.
Just a thought, that being said, not a proposal for the moment. Cheers!
2016-01-18 1:00 GMT-05:00 Ville Voutilainen <ville.voutilainen@gmail.com>:
> On 18 January 2016 at 07:17, Moritz Klammler <moritz.klammler@gmail.com>
> wrote:
> >> Have you actually tried to implement a genuine C++ random access
> >> iterator? You have to not only implement the various methods and
> >> member operators, you have to implement overrides of free functions
> >> like `advance`, `distance`, `next`, etc.
> >
> > I'm afraid that this is going a little off-topic here but I have never
> > overloaded `advance`, `distance`, `next`, etc for my own iterators.
> > Aren't the iterator traits supposed to allow the standard versions to
> > generate optimal code for my iterators, too?
>
> Yes. You don't need to overload nor specialize advance/distance/next, just
> have the nested typedefs that [iterator.traits] mentions (either directly
> or via
> inheritance) and your iterator will fit right in, including
> performance optimizations.
>
> --
>
> ---
> 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
> https://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 https://groups.google.com/a/isocpp.org/group/std-proposals/.
--001a113ecbba9348a20529975982
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><div><div><div><div><div><div><div><div><div><div><div><di=
v>I'm not necessarily looking for this, but the suggestions in this thr=
ead made me wonder if extending the fold expressions to allow something lik=
e this:<br><br></div>for(auto n : {32...65})<br></div>=C2=A0=C2=A0 f(n);<br=
><br></div>... to be equivalent to such a thing as:<br><br></div>for(auto n=
: { 32, 33, 34, ... 64, 65}) // the ... is informal here, nothing more<br>=
</div>=C2=A0=C2=A0 f(n);<br><br></div>... might not be suitable for those w=
ho want the feature, and maybe useful elsewhere, such as replacing:<br><br>=
</div>vector<int> v(100);<br></div>iota(begin(v), end(v), 1);<br><br>=
</div>...with:<br><br></div>vector<int> v{ 1...100 };<br><br></div>..=
.. which could be an improvement, I guess. After all, we do allow trailing o=
perands in fold expressions for some operators.<br><br></div>Just a thought=
, that being said, not a proposal for the moment. Cheers!<br><br></div><div=
class=3D"gmail_extra"><br><div class=3D"gmail_quote">2016-01-18 1:00 GMT-0=
5:00 Ville Voutilainen <span dir=3D"ltr"><<a href=3D"mailto:ville.voutil=
ainen@gmail.com" target=3D"_blank">ville.voutilainen@gmail.com</a>></spa=
n>:<br><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-=
left:1px #ccc solid;padding-left:1ex"><span class=3D"">On 18 January 2016 a=
t 07:17, Moritz Klammler <<a href=3D"mailto:moritz.klammler@gmail.com">m=
oritz.klammler@gmail.com</a>> wrote:<br>
>> Have you actually tried to implement a genuine C++ random access<b=
r>
>> iterator?=C2=A0 You have to not only implement the various methods=
and<br>
>> member operators, you have to implement overrides of free function=
s<br>
>> like `advance`, `distance`, `next`, etc.<br>
><br>
> I'm afraid that this is going a little off-topic here but I have n=
ever<br>
> overloaded `advance`, `distance`, `next`, etc for my own iterators.<br=
>
> Aren't the iterator traits supposed to allow the standard versions=
to<br>
> generate optimal code for my iterators, too?<br>
<br>
</span>Yes. You don't need to overload nor specialize advance/distance/=
next, just<br>
have the nested typedefs that [iterator.traits] mentions (either directly o=
r via<br>
inheritance) and your iterator will fit right in, including<br>
performance optimizations.<br>
<div class=3D"HOEnZb"><div class=3D"h5"><br>
--<br>
<br>
---<br>
You received this message because you are subscribed to the Google Groups &=
quot;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"mailto:std-proposals%2Bunsubscribe@isocpp.org">std-propo=
sals+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"https://groups.google.com/a/isocpp.org/group=
/std-proposals/" rel=3D"noreferrer" target=3D"_blank">https://groups.google=
..com/a/isocpp.org/group/std-proposals/</a>.<br>
</div></div></blockquote></div><br></div>
<p></p>
-- <br />
<br />
--- <br />
You received this message because you are subscribed to the Google Groups &=
quot;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"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"https://groups.google.com/a/isocpp.org/group=
/std-proposals/">https://groups.google.com/a/isocpp.org/group/std-proposals=
/</a>.<br />
--001a113ecbba9348a20529975982--
.
Author: Andrew Tomazos <andrewtomazos@gmail.com>
Date: Mon, 18 Jan 2016 11:00:39 +0100
Raw View
--047d7ba972223cb69f052998d39a
Content-Type: text/plain; charset=UTF-8
Yes this is a good idea (a binary range operator) and others have suggested
it. I do not consider it mutually exclusive with my proposal. I think:
for (int i : N)
is better than
for (int i : {0...N-1})
but certainly the later is more flexible and can be used in other places
than a for loop:
std::vector<int> v = {0...N-1};
That's why I think we should have both things.
The reason for the difference is that on the RHS of a for loop we have a
"linguistic context" that expects something "range-like". When you use an
integral expression there it is reasonable to conceptually contextually
convert it the index sequence of N (0,1,2,...,N-1).
Another completely different way of looking at it is that
for (int i : N)
stmt;
means repeat stmt N times. Enumerate the iterations with their zero-based
index, and store this iteration index in i.
That's why I'm also considering proposing:
for (N)
stmt
to mean repeat stmt N times. It's now easy to see the relationship between
this and the previous. This is what I called a Repetition Statement. The
previous is what I call an Indexed Repetition Statement.
Even without the statistical evidence yet we can start to develop an
intuition for what makes iteration over the "index sequence" 0,1,2,...,N-1
special. It is because it is the zero-based index of the iteration. (The
programmers thinking is "inverted" from how we have been thinking about it.)
On Mon, Jan 18, 2016 at 9:15 AM, Patrice Roy <patricer@gmail.com> wrote:
> I'm not necessarily looking for this, but the suggestions in this thread
> made me wonder if extending the fold expressions to allow something like
> this:
>
> for(auto n : {32...65})
> f(n);
>
> ... to be equivalent to such a thing as:
>
> for(auto n : { 32, 33, 34, ... 64, 65}) // the ... is informal here,
> nothing more
> f(n);
>
> ... might not be suitable for those who want the feature, and maybe useful
> elsewhere, such as replacing:
>
> vector<int> v(100);
> iota(begin(v), end(v), 1);
>
> ...with:
>
> vector<int> v{ 1...100 };
>
> ... which could be an improvement, I guess. After all, we do allow
> trailing operands in fold expressions for some operators.
>
> Just a thought, that being said, not a proposal for the moment. Cheers!
>
>
> 2016-01-18 1:00 GMT-05:00 Ville Voutilainen <ville.voutilainen@gmail.com>:
>
>> On 18 January 2016 at 07:17, Moritz Klammler <moritz.klammler@gmail.com>
>> wrote:
>> >> Have you actually tried to implement a genuine C++ random access
>> >> iterator? You have to not only implement the various methods and
>> >> member operators, you have to implement overrides of free functions
>> >> like `advance`, `distance`, `next`, etc.
>> >
>> > I'm afraid that this is going a little off-topic here but I have never
>> > overloaded `advance`, `distance`, `next`, etc for my own iterators.
>> > Aren't the iterator traits supposed to allow the standard versions to
>> > generate optimal code for my iterators, too?
>>
>> Yes. You don't need to overload nor specialize advance/distance/next, just
>> have the nested typedefs that [iterator.traits] mentions (either directly
>> or via
>> inheritance) and your iterator will fit right in, including
>> performance optimizations.
>>
>> --
>>
>> ---
>> 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
>> https://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
> https://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 https://groups.google.com/a/isocpp.org/group/std-proposals/.
--047d7ba972223cb69f052998d39a
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr">Yes this is a good idea (a binary range operator) and othe=
rs have suggested it.=C2=A0 I do not consider it mutually exclusive with my=
proposal.=C2=A0 I think:<div><br></div><div>=C2=A0 =C2=A0for (int i : N)</=
div><div><br></div><div>is better than</div><div><br></div><div>=C2=A0 =C2=
=A0for (int i : {0...N-1})</div><div><br></div><div>but certainly the later=
is more flexible and can be used in other places than a for loop:</div><di=
v><br></div><div>=C2=A0 =C2=A0std::vector<int> v =3D {0...N-1};</div>=
<div><br></div><div>That's why I think we should have both things.</div=
><div><br></div><div>The reason for the difference is that on the RHS of a =
for loop we have a "linguistic context" that expects something &q=
uot;range-like".=C2=A0 When you use an integral expression there it is=
reasonable to conceptually contextually convert it the index sequence of N=
(0,1,2,...,N-1).</div><div><br></div><div>Another completely different way=
of looking at it is that</div><div><br></div><div>=C2=A0 =C2=A0for (int i =
: N)</div><div>=C2=A0 =C2=A0 =C2=A0stmt;</div><div><br></div><div>means rep=
eat stmt N times.=C2=A0 Enumerate the iterations with their zero-based inde=
x, and store this iteration index in i.</div><div><br></div><div>That's=
why I'm also considering proposing:</div><div><br></div><div>=C2=A0 =
=C2=A0for (N)</div><div>=C2=A0 =C2=A0 =C2=A0stmt</div><div><br></div><div>t=
o mean repeat stmt N times.=C2=A0 It's now easy to see the relationship=
between this and the previous.=C2=A0 This is what I called a Repetition St=
atement.=C2=A0 The previous is what I call an Indexed Repetition Statement.=
<br><div class=3D"gmail_extra"><br></div><div class=3D"gmail_extra">Even wi=
thout the statistical evidence yet we can start to develop an intuition for=
what makes iteration over the "index sequence" 0,1,2,...,N-1 spe=
cial.=C2=A0 It is because it is the zero-based index of the iteration. =C2=
=A0(The programmers thinking is "inverted" from how we have been =
thinking about it.)</div><div class=3D"gmail_extra"><br><div class=3D"gmail=
_quote">On Mon, Jan 18, 2016 at 9:15 AM, Patrice Roy <span dir=3D"ltr"><=
<a href=3D"mailto:patricer@gmail.com" target=3D"_blank">patricer@gmail.com<=
/a>></span> wrote:<br><blockquote class=3D"gmail_quote" style=3D"margin:=
0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr"><d=
iv><div><div><div><div><div><div><div><div><div><div><div>I'm not neces=
sarily looking for this, but the suggestions in this thread made me wonder =
if extending the fold expressions to allow something like this:<br><br></di=
v>for(auto n : {32...65})<br></div>=C2=A0=C2=A0 f(n);<br><br></div>... to b=
e equivalent to such a thing as:<br><br></div>for(auto n : { 32, 33, 34, ..=
.. 64, 65}) // the ... is informal here, nothing more<br></div>=C2=A0=C2=A0 =
f(n);<br><br></div>... might not be suitable for those who want the feature=
, and maybe useful elsewhere, such as replacing:<br><br></div>vector<int=
> v(100);<br></div>iota(begin(v), end(v), 1);<br><br></div>...with:<br><=
br></div>vector<int> v{ 1...100 };<br><br></div>... which could be an=
improvement, I guess. After all, we do allow trailing operands in fold exp=
ressions for some operators.<br><br></div>Just a thought, that being said, =
not a proposal for the moment. Cheers!<br><br></div><div class=3D"HOEnZb"><=
div class=3D"h5"><div class=3D"gmail_extra"><br><div class=3D"gmail_quote">=
2016-01-18 1:00 GMT-05:00 Ville Voutilainen <span dir=3D"ltr"><<a href=
=3D"mailto:ville.voutilainen@gmail.com" target=3D"_blank">ville.voutilainen=
@gmail.com</a>></span>:<br><blockquote class=3D"gmail_quote" style=3D"ma=
rgin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span>On 18 Ja=
nuary 2016 at 07:17, Moritz Klammler <<a href=3D"mailto:moritz.klammler@=
gmail.com" target=3D"_blank">moritz.klammler@gmail.com</a>> wrote:<br>
>> Have you actually tried to implement a genuine C++ random access<b=
r>
>> iterator?=C2=A0 You have to not only implement the various methods=
and<br>
>> member operators, you have to implement overrides of free function=
s<br>
>> like `advance`, `distance`, `next`, etc.<br>
><br>
> I'm afraid that this is going a little off-topic here but I have n=
ever<br>
> overloaded `advance`, `distance`, `next`, etc for my own iterators.<br=
>
> Aren't the iterator traits supposed to allow the standard versions=
to<br>
> generate optimal code for my iterators, too?<br>
<br>
</span>Yes. You don't need to overload nor specialize advance/distance/=
next, just<br>
have the nested typedefs that [iterator.traits] mentions (either directly o=
r via<br>
inheritance) and your iterator will fit right in, including<br>
performance optimizations.<br>
<div><div><br>
--<br>
<br>
---<br>
You received this message because you are subscribed to the Google Groups &=
quot;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"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"https://groups.google.com/a/isocpp.org/group=
/std-proposals/" rel=3D"noreferrer" target=3D"_blank">https://groups.google=
..com/a/isocpp.org/group/std-proposals/</a>.<br>
</div></div></blockquote></div><br></div>
<p></p>
-- <br>
<br>
--- <br>
You received this message because you are subscribed to the Google Groups &=
quot;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"mailto:std-proposals+unsubscribe@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"https://groups.google.com/a/isocpp.org/group=
/std-proposals/" target=3D"_blank">https://groups.google.com/a/isocpp.org/g=
roup/std-proposals/</a>.<br>
</div></div></blockquote></div><br></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" 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"https://groups.google.com/a/isocpp.org/group=
/std-proposals/">https://groups.google.com/a/isocpp.org/group/std-proposals=
/</a>.<br />
--047d7ba972223cb69f052998d39a--
.
Author: Andrew Tomazos <andrewtomazos@gmail.com>
Date: Mon, 18 Jan 2016 11:47:03 +0100
Raw View
--089e013cc314301b12052999798a
Content-Type: text/plain; charset=UTF-8
On Mon, Jan 18, 2016 at 1:53 AM, Ville Voutilainen <
ville.voutilainen@gmail.com> wrote:
> On 18 January 2016 at 02:24, Andrew Tomazos <andrewtomazos@gmail.com>
> wrote:
> > On Sun, Jan 17, 2016 at 11:56 PM, dgutson . <danielgutson@gmail.com>
> wrote:
> >>
> >> I humbly suggest you to focus your efforts in a library-version
> proposal.
> > I don't think people will use a library-based solution for for loops,
> even
> > if one was adopted. They will just continue to use the general for loop
> as
> > they do now, as it is shorter and doesn't require an include. As
> evidence I
> > give you the fact that the library-based solution is easy to implement,
> and
> > yet we haven't seen any existing practice of it. On the other hand, I
> think
> > the proposed dedicated syntax, which actually is a short-hand, and
> doesn't
> > require an include, would get used.
>
> Existing practice is not that hard to find, it's right where one would
> expect it
> to be:
>
> http://www.boost.org/doc/libs/1_60_0/libs/range/doc/html/range/reference/ranges/irange.html
Sure, I mean existing practice of a facility like irange being used as `for
(int i : irange(N))` in lieu of `for (int i = 0; i < N; ++i)`. My claim is
that a library-based solution is too heavyweight (longer syntax, requires
include, using declaration, library dependency) compared to `for (int i =
0; i < N; ++i)`, whereas `for (int i : N)` would (its shorter and doesn't
require all the stuff previously listed).
--
---
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 https://groups.google.com/a/isocpp.org/group/std-proposals/.
--089e013cc314301b12052999798a
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><div class=3D"gmail_extra"><div class=3D"gmail_quote">On M=
on, Jan 18, 2016 at 1:53 AM, Ville Voutilainen <span dir=3D"ltr"><<a hre=
f=3D"mailto:ville.voutilainen@gmail.com" target=3D"_blank">ville.voutilaine=
n@gmail.com</a>></span> wrote:<br><blockquote class=3D"gmail_quote" styl=
e=3D"margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(2=
04,204,204);border-left-style:solid;padding-left:1ex"><div class=3D""><div =
class=3D"h5">On 18 January 2016 at 02:24, Andrew Tomazos <<a href=3D"mai=
lto:andrewtomazos@gmail.com">andrewtomazos@gmail.com</a>> wrote:<br>
> On Sun, Jan 17, 2016 at 11:56 PM, dgutson . <<a href=3D"mailto:dani=
elgutson@gmail.com">danielgutson@gmail.com</a>> wrote:<br>
>><br>
>> I humbly suggest you to focus your efforts in a library-version pr=
oposal.<br>
> I don't think people will use a library-based solution for for loo=
ps, even<br>
> if one was adopted.=C2=A0 They will just continue to use the general f=
or loop as<br>
> they do now, as it is shorter and doesn't require an include.=C2=
=A0 As evidence I<br>
> give you the fact that the library-based solution is easy to implement=
, and<br>
> yet we haven't seen any existing practice of it.=C2=A0 On the othe=
r hand, I think<br>
> the proposed dedicated syntax, which actually is a short-hand, and doe=
sn't<br>
> require an include, would get used.<br>
<br>
</div></div>Existing practice is not that hard to find, it's right wher=
e one would expect it<br>
to be:<br>
<a href=3D"http://www.boost.org/doc/libs/1_60_0/libs/range/doc/html/range/r=
eference/ranges/irange.html" rel=3D"noreferrer" target=3D"_blank">http://ww=
w.boost.org/doc/libs/1_60_0/libs/range/doc/html/range/reference/ranges/iran=
ge.html</a></blockquote><div><br></div><div>Sure, I mean existing practice =
of a facility like irange being used as `for (int i : irange(N))` in lieu o=
f `for (int i =3D 0; i < N; ++i)`.=C2=A0 My claim is that a library-base=
d solution is too heavyweight (longer syntax, requires include, using decla=
ration, library dependency) compared to `for (int i =3D 0; i < N; ++i)`,=
whereas `for (int i : N)` would (its shorter and doesn't require all t=
he stuff previously listed).</div><div><br></div></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" 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"https://groups.google.com/a/isocpp.org/group=
/std-proposals/">https://groups.google.com/a/isocpp.org/group/std-proposals=
/</a>.<br />
--089e013cc314301b12052999798a--
.
Author: =?UTF-8?Q?Agust=c3=adn_K-ballo_Berg=c3=a9?= <kaballo86@hotmail.com>
Date: Mon, 18 Jan 2016 09:04:54 -0300
Raw View
On 1/17/2016 9:24 PM, Andrew Tomazos wrote:
> On Sun, Jan 17, 2016 at 11:56 PM, dgutson . <danielgutson@gmail.com
> <mailto:danielgutson@gmail.com>> wrote:
>
> I humbly suggest you to focus your efforts in a library-version
> proposal.
>
>
> I don't think people will use a library-based solution for for loops,
> even if one was adopted. They will just continue to use the general for
> loop as they do now, as it is shorter and doesn't require an include.
If this were to be the case, it suggests to me that there just isn't a=20
need for it.
> As evidence I give you the fact that the library-based solution is easy
> to implement, and yet we haven't seen any existing practice of it.
Oh, come on! That's so not fair to all the evidence you've gathered...
In the past few days we've learned about several library-based existing=20
solutions, and we've found out that some of them even predate C++11 and=20
the range-based for-loop since it's not just about saving a few keystrokes.
> On
> the other hand, I think the proposed dedicated syntax, which actually is
> a short-hand, and doesn't require an include, would get used.
Can you back that claim up somehow?
For instance, the range-based for-loop proposal (N1868) says all the=20
cool languages are doing it, and points at `BOOST_FOREACH` and=20
`Q_FOREACH` as evidence that people want it badly.
Regards,
--=20
Agust=C3=ADn K-ballo Berg=C3=A9.-
http://talesofcpp.fusionfenix.com
--=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 https://groups.google.com/a/isocpp.org/group/std-propos=
als/.
.
Author: Andrew Tomazos <andrewtomazos@gmail.com>
Date: Mon, 18 Jan 2016 14:37:48 +0100
Raw View
--089e01229a76d7e6f505299bdbf3
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
On Mon, Jan 18, 2016 at 1:04 PM, Agust=C3=ADn K-ballo Berg=C3=A9 <
kaballo86@hotmail.com> wrote:
> On 1/17/2016 9:24 PM, Andrew Tomazos wrote:
>
>> On Sun, Jan 17, 2016 at 11:56 PM, dgutson . <danielgutson@gmail.com
>> <mailto:danielgutson@gmail.com>> wrote:
>>
>> I humbly suggest you to focus your efforts in a library-version
>> proposal.
>>
>>
>> I don't think people will use a library-based solution for for loops,
>> even if one was adopted. They will just continue to use the general for
>> loop as they do now, as it is shorter and doesn't require an include.
>>
>
> If this were to be the case, it suggests to me that there just isn't a
> need for it.
>
Given the three solutions:
1. for (int i =3D 0; i < N; ++i)
2. #include <whatever/irange> using whatever::irange; for (int i :
irange(N))
3. for (int i : N)
The evidence suggests [1] is preferred to [2]. I disagree that we can
conclude from that that [1] would be preferred to [3].
As evidence I give you the fact that the library-based solution is easy
>> to implement, and yet we haven't seen any existing practice of it.
>>
>
> Oh, come on! That's so not fair to all the evidence you've gathered...
>
> In the past few days we've learned about several library-based existing
> solutions, and we've found out that some of them even predate C++11 and t=
he
> range-based for-loop since it's not just about saving a few keystrokes.
I mean an existing practice of *usage* of such a facility. People
generally use [1] rather than [2], despite various versions of [2] being
available and easy to implement.
On
>> the other hand, I think the proposed dedicated syntax, which actually is
>> a short-hand, and doesn't require an include, would get used.
>>
>
> Can you back that claim up somehow?
>
> For instance, the range-based for-loop proposal (N1868) says all the cool
> languages are doing it, and points at `BOOST_FOREACH` and `Q_FOREACH` as
> evidence that people want it badly.
That's hard to do. It's very hard to have existing practice of proposed
core solutions of this kind, very few even consider using non-standard
extensions, so things that would be successful as core solutions, but not
with the library overhead, have to be based on speculation to a certain
extent.
That said, I intend to find out how often [1] occurs, and what percentage
of all for statements fit the pattern of [1]. The claim that [3] will be
preferred to [1], even though [2] wasn't, I expect mostly to be based on an
appeal to intuition though - unless someone can think of a better way of
testing this claim.
--=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 https://groups.google.com/a/isocpp.org/group/std-propos=
als/.
--089e01229a76d7e6f505299bdbf3
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><div class=3D"gmail_extra"><div class=3D"gmail_quote">On M=
on, Jan 18, 2016 at 1:04 PM, Agust=C3=ADn K-ballo Berg=C3=A9 <span dir=3D"l=
tr"><<a href=3D"mailto:kaballo86@hotmail.com" target=3D"_blank">kaballo8=
6@hotmail.com</a>></span> wrote:<br><blockquote class=3D"gmail_quote" st=
yle=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span=
class=3D"">On 1/17/2016 9:24 PM, Andrew Tomazos wrote:<br>
</span><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-=
left:1px #ccc solid;padding-left:1ex"><span class=3D"">
On Sun, Jan 17, 2016 at 11:56 PM, dgutson . <<a href=3D"mailto:danielgut=
son@gmail.com" target=3D"_blank">danielgutson@gmail.com</a><br></span><span=
class=3D"">
<mailto:<a href=3D"mailto:danielgutson@gmail.com" target=3D"_blank">dani=
elgutson@gmail.com</a>>> wrote:<br>
<br>
=C2=A0 =C2=A0 I humbly suggest you to focus your efforts in a library-versi=
on<br>
=C2=A0 =C2=A0 proposal.<br>
<br>
<br>
I don't think people will use a library-based solution for for loops,<b=
r>
even if one was adopted.=C2=A0 They will just continue to use the general f=
or<br>
loop as they do now, as it is shorter and doesn't require an include.<b=
r>
</span></blockquote>
<br>
If this were to be the case, it suggests to me that there just isn't a =
need for it.<span class=3D""><br></span></blockquote><div><br></div><div>Gi=
ven the three solutions:</div><div><br></div><div>=C2=A0 =C2=A01. for (int =
i =3D 0; i < N; ++i)</div><div>=C2=A0 =C2=A02. #include <whatever/ira=
nge> using whatever::irange; =C2=A0for (int i : irange(N))</div><div>=C2=
=A0 =C2=A03. for (int i : N)</div><div><br></div><div>The evidence suggests=
[1] is preferred to [2].=C2=A0 I disagree that we can conclude from that t=
hat [1] would be preferred to [3].</div><div><br></div><blockquote class=3D=
"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding=
-left:1ex"><span class=3D"">
<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
x #ccc solid;padding-left:1ex">
As evidence I give you the fact that the library-based solution is easy<br>
to implement, and yet we haven't seen any existing practice of it.<br>
</blockquote>
<br></span>
Oh, come on! That's so not fair to all the evidence you've gathered=
....<br>
<br>
In the past few days we've learned about several library-based existing=
solutions, and we've found out that some of them even predate C++11 an=
d the range-based for-loop since it's not just about saving a few keyst=
rokes.</blockquote><div><br></div><div>I mean an existing practice of *usag=
e* of such a facility.=C2=A0 People generally use [1] rather than [2], desp=
ite various versions of [2] being available and easy to implement.</div><di=
v><br></div><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;bo=
rder-left:1px #ccc solid;padding-left:1ex"><span class=3D"">
<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
x #ccc solid;padding-left:1ex">
On<br>
the other hand, I think the proposed dedicated syntax, which actually is<br=
>
a short-hand, and doesn't require an include, would get used.<br>
</blockquote>
<br></span>
Can you back that claim up somehow?<br>
<br>
For instance, the range-based for-loop proposal (N1868) says all the cool l=
anguages are doing it, and points at `BOOST_FOREACH` and `Q_FOREACH` as evi=
dence that people want it badly.</blockquote><div>=C2=A0</div><div>That'=
;s hard to do.=C2=A0 It's very hard to have existing practice of propos=
ed core solutions of this kind, very few even consider using non-standard e=
xtensions, so things that would be successful as core solutions, but not wi=
th the library overhead, have to be based on speculation to a certain exten=
t.</div><div><br></div><div>That said, I intend to find out how often [1] o=
ccurs, and what percentage of all for statements fit the pattern of [1].=C2=
=A0 The claim that [3] will be preferred to [1], even though [2] wasn't=
, I expect mostly to be based on an appeal to intuition though - unless som=
eone can think of a better way of testing this claim.</div><div><br></div><=
/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" 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"https://groups.google.com/a/isocpp.org/group=
/std-proposals/">https://groups.google.com/a/isocpp.org/group/std-proposals=
/</a>.<br />
--089e01229a76d7e6f505299bdbf3--
.
Author: =?UTF-8?Q?Agust=c3=adn_K-ballo_Berg=c3=a9?= <kaballo86@hotmail.com>
Date: Mon, 18 Jan 2016 11:45:06 -0300
Raw View
On 1/18/2016 10:37 AM, Andrew Tomazos wrote:
> On Mon, Jan 18, 2016 at 1:04 PM, Agust=C3=ADn K-ballo Berg=C3=A9
> <kaballo86@hotmail.com <mailto:kaballo86@hotmail.com>> wrote:
>
> On 1/17/2016 9:24 PM, Andrew Tomazos wrote:
>
> On Sun, Jan 17, 2016 at 11:56 PM, dgutson .
> <danielgutson@gmail.com <mailto:danielgutson@gmail.com>
> <mailto:danielgutson@gmail.com <mailto:danielgutson@gmail.com>>>
> wrote:
>
> I humbly suggest you to focus your efforts in a library-vers=
ion
> proposal.
>
>
> I don't think people will use a library-based solution for for
> loops,
> even if one was adopted. They will just continue to use the
> general for
> loop as they do now, as it is shorter and doesn't require an
> include.
>
>
> If this were to be the case, it suggests to me that there just isn't
> a need for it.
>
>
> Given the three solutions:
>
> 1. for (int i =3D 0; i < N; ++i)
> 2. #include <whatever/irange> using whatever::irange; for (int i :
> irange(N))
> 3. for (int i : N)
>
> The evidence suggests [1] is preferred to [2]. I disagree that we can
> conclude from that that [1] would be preferred to [3].
Agreed, we cannot conclude anything about [3] from the evidence on [1]=20
and [2]. It's just speculation on both sides.
> As evidence I give you the fact that the library-based solution
> is easy
> to implement, and yet we haven't seen any existing practice of it=
..
>
>
> Oh, come on! That's so not fair to all the evidence you've gathered..=
..
>
> In the past few days we've learned about several library-based
> existing solutions, and we've found out that some of them even
> predate C++11 and the range-based for-loop since it's not just about
> saving a few keystrokes.
>
>
> I mean an existing practice of *usage* of such a facility. People
> generally use [1] rather than [2], despite various versions of [2] being
> available and easy to implement.
Some people claim to have implemented the library solution for personal=20
use, which would suggest they do use such a facility. Perhaps they do so=20
only outside a range-based for-loop, since that has its merits too, so=20
it would be worth a follow up with them.
Personally, I am not convinced of the readability advantages of the=20
proposed solution over a plain for loop, although that is entirely=20
subjective. And I don't think maybe sometimes saving a few keystrokes is=20
a good motivation.
That said, I have been known to occasionally use
for (int i : {1, 2, 4, 8}) { /*...*/ }
for clarity given statically known small Ns, even when that requires an=20
additional include.
> On
> the other hand, I think the proposed dedicated syntax, which
> actually is
> a short-hand, and doesn't require an include, would get used.
>
>
> Can you back that claim up somehow?
>
> For instance, the range-based for-loop proposal (N1868) says all the
> cool languages are doing it, and points at `BOOST_FOREACH` and
> `Q_FOREACH` as evidence that people want it badly.
>
> That's hard to do. It's very hard to have existing practice of proposed
> core solutions of this kind, very few even consider using non-standard
> extensions, so things that would be successful as core solutions, but
> not with the library overhead, have to be based on speculation to a
> certain extent.
I disagree. The existence of MSVC's `for each` says otherwise, as does=20
the fact that Qt dare to define the `foreach` and `forever`=20
"pseudo-keywords". Note in particular that while the MSVC's extension=20
has no library overhead nor requires any additional includes, the Qt=20
approach has (or had?) and that didn't stop it from being adopted.
Regardless, you still have the option of looking at what other languages=20
are doing in this regard. For instance, Pascal has this:
for i:=3D 1 to 10 do /*...*/;
while Python has this:
for i in range(1, 11)
Regards,
--=20
Agust=C3=ADn K-ballo Berg=C3=A9.-
http://talesofcpp.fusionfenix.com
--=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 https://groups.google.com/a/isocpp.org/group/std-propos=
als/.
.
Author: Matthew Woehlke <mwoehlke.floss@gmail.com>
Date: Mon, 18 Jan 2016 10:37:26 -0500
Raw View
On 2016-01-16 05:35, dgutson . wrote:
> But this facility has the following advantages:
>
> 1) the range can be returned by a function:
> for(auto i : f() )
int f() { return 5; }
for (auto i : f())
std::cout << i << std::endl;
....outputs:
0
1
2
3
4
--
Matthew
--
---
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 https://groups.google.com/a/isocpp.org/group/std-proposals/.
.
Author: Farid Mehrabi <farid.mehrabi@gmail.com>
Date: Mon, 18 Jan 2016 19:07:41 +0330
Raw View
--001a114a8696eccb7705299d8a0b
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
2016-01-18 15:34 GMT+03:30 Agust=C3=ADn K-ballo Berg=C3=A9 <kaballo86@hotma=
il.com>:
>
> For instance, the range-based for-loop proposal (N1868) says all the cool
> languages are doing it, and points at `BOOST_FOREACH` and `Q_FOREACH` as
> evidence that people want it badly.
>
=E2=80=8BYou just missed pre-c++11 std::for_each=E2=80=8B !!!!!!!
--=20
how am I supposed to end the twisted road of your hair in such a dark
night??
unless the candle of your face does shed some light upon my way!!!
--=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 https://groups.google.com/a/isocpp.org/group/std-propos=
als/.
--001a114a8696eccb7705299d8a0b
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"rtl"><div class=3D"gmail_default" style=3D"font-family:arial na=
rrow,sans-serif;font-size:large"><br></div><div class=3D"gmail_extra"><br><=
div class=3D"gmail_quote"><div dir=3D"ltr">2016-01-18 15:34 GMT+03:30 Agust=
=C3=ADn K-ballo Berg=C3=A9 <span dir=3D"ltr"><<a href=3D"mailto:kaballo8=
6@hotmail.com" target=3D"_blank">kaballo86@hotmail.com</a>></span>:</div=
><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1=
px #ccc solid;padding-left:1ex"><br><div style=3D"direction:ltr">For instan=
ce, the range-based for-loop proposal (N1868) says all the cool languages a=
re doing it, and points at `BOOST_FOREACH` and `Q_FOREACH` as evidence that=
people want it badly.</div></blockquote></div><br clear=3D"all"><div style=
=3D"direction:ltr"><div class=3D"gmail_default" style=3D"font-family:'a=
rial narrow',sans-serif;font-size:large">=E2=80=8BYou just missed pre-c=
++11 std::for_each=E2=80=8B !!!!!!!</div></div><div style=3D"direction:ltr"=
><br></div>-- <br><div class=3D"gmail_signature"><div dir=3D"rtl"><div><div=
dir=3D"ltr">how am I supposed to end the twisted road of=C2=A0 your hair i=
n such a dark night??<br>unless the candle of your face does shed some ligh=
t upon my way!!!<br></div></div></div></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" 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"https://groups.google.com/a/isocpp.org/group=
/std-proposals/">https://groups.google.com/a/isocpp.org/group/std-proposals=
/</a>.<br />
--001a114a8696eccb7705299d8a0b--
.
Author: Matthew Woehlke <mwoehlke.floss@gmail.com>
Date: Mon, 18 Jan 2016 10:37:49 -0500
Raw View
On 2016-01-16 05:59, Sam Kellett wrote:
> what about the comma operator?
>
> auto operator,(int from, int to) -> std::numeric_range
> {
> return {from, to, 1};
> }
Uh... won't that horribly break, oh, just about *all* existing C++ code?
(A UDL won't help, either, because it needs to work for any integer type.)
--
Matthew
--
---
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 https://groups.google.com/a/isocpp.org/group/std-proposals/.
.
Author: Nicol Bolas <jmckesson@gmail.com>
Date: Mon, 18 Jan 2016 07:43:07 -0800 (PST)
Raw View
------=_Part_372_1193114073.1453131787908
Content-Type: multipart/alternative;
boundary="----=_Part_373_1137603572.1453131787909"
------=_Part_373_1137603572.1453131787909
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
On Monday, January 18, 2016 at 9:45:11 AM UTC-5, Agust=C3=ADn K-ballo Berg=
=C3=A9=20
wrote:
>
> On 1/18/2016 10:37 AM, Andrew Tomazos wrote:=20
>
> >=20
> > That's hard to do. It's very hard to have existing practice of propose=
d=20
> > core solutions of this kind, very few even consider using non-standard=
=20
> > extensions, so things that would be successful as core solutions, but=
=20
> > not with the library overhead, have to be based on speculation to a=20
> > certain extent.=20
>
> I disagree. The existence of MSVC's `for each` says otherwise, as does=20
> the fact that Qt dare to define the `foreach` and `forever`=20
> "pseudo-keywords". Note in particular that while the MSVC's extension=20
> has no library overhead nor requires any additional includes, the Qt=20
> approach has (or had?) and that didn't stop it from being adopted.=20
>
> Regardless, you still have the option of looking at what other languages=
=20
> are doing in this regard. For instance, Pascal has this:=20
>
> for i:=3D 1 to 10 do /*...*/;=20
>
> while Python has this:=20
>
> for i in range(1, 11)=20
>
Actually, that's a very good question.
Is there any prior art, any language or similar construct, where syntax of=
=20
the type this proposal proposes exists? Something of the form:
<loop inducer> <loop variable> <single integer>
Which results in looping from 0 to that number? If that's not the case, if=
=20
most languages require you to provide both the start and end point, then=20
having a language feature that only requires the end point could very=20
easily be confusing.
Python's range function provides this; a single value refers to the=20
terminus. At the same time, Range v3's `view::ints` and `view::iota` allow=
=20
a single value. But that value is an *initial* value, not an end-point.=20
That is, they produce an unbounded range that starts from the beginning.
So there seems to be some disagreement on what a single integer *ought* to=
=20
mean.
--=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 https://groups.google.com/a/isocpp.org/group/std-propos=
als/.
------=_Part_373_1137603572.1453131787909
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
On Monday, January 18, 2016 at 9:45:11 AM UTC-5, Agust=C3=ADn K-ballo Berg=
=C3=A9 wrote:<blockquote class=3D"gmail_quote" style=3D"margin: 0;margin-le=
ft: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;">On 1/18/2016 10:3=
7 AM, Andrew Tomazos wrote:
<br><br>>
<br>> That's hard to do. =C2=A0It's very hard to have existing p=
ractice of proposed
<br>> core solutions of this kind, very few even consider using non-stan=
dard
<br>> extensions, so things that would be successful as core solutions, =
but
<br>> not with the library overhead, have to be based on speculation to =
a
<br>> certain extent.
<br>
<br>I disagree. The existence of MSVC's `for each` says otherwise, as d=
oes=20
<br>the fact that Qt dare to define the `foreach` and `forever`=20
<br>"pseudo-keywords". Note in particular that while the MSVC'=
;s extension=20
<br>has no library overhead nor requires any additional includes, the Qt=20
<br>approach has (or had?) and that didn't stop it from being adopted.
<br>
<br>Regardless, you still have the option of looking at what other language=
s=20
<br>are doing in this regard. For instance, Pascal has this:
<br>
<br>=C2=A0 =C2=A0 =C2=A0for i:=3D 1 to 10 do /*...*/;
<br>
<br>while Python has this:
<br>
<br>=C2=A0 =C2=A0 =C2=A0for i in range(1, 11)
<br></blockquote><div><br><br>Actually, that's a very good question.<br=
><br>Is there any prior art, any language or similar construct, where synta=
x of the type this proposal proposes exists? Something of the form:<br><br>=
<div class=3D"prettyprint" style=3D"background-color: rgb(250, 250, 250); b=
order-color: rgb(187, 187, 187); border-style: solid; border-width: 1px; wo=
rd-wrap: break-word;"><code class=3D"prettyprint"><div class=3D"subprettypr=
int"><span style=3D"color: #008;" class=3D"styled-by-prettify"><loop</sp=
an><span style=3D"color: #000;" class=3D"styled-by-prettify"> </span><span =
style=3D"color: #606;" class=3D"styled-by-prettify">inducer</span><span sty=
le=3D"color: #008;" class=3D"styled-by-prettify">></span><span style=3D"=
color: #000;" class=3D"styled-by-prettify"> </span><span style=3D"color: #0=
08;" class=3D"styled-by-prettify"><loop</span><span style=3D"color: #000=
;" class=3D"styled-by-prettify"> </span><span style=3D"color: #606;" class=
=3D"styled-by-prettify">variable</span><span style=3D"color: #008;" class=
=3D"styled-by-prettify">></span><span style=3D"color: #000;" class=3D"st=
yled-by-prettify"> </span><span style=3D"color: #008;" class=3D"styled-by-p=
rettify"><single</span><span style=3D"color: #000;" class=3D"styled-by-p=
rettify"> </span><span style=3D"color: #606;" class=3D"styled-by-prettify">=
integer</span><span style=3D"color: #008;" class=3D"styled-by-prettify">>=
;</span></div></code></div><br>Which results in looping from 0 to that numb=
er? If that's not the case, if most languages require you to provide bo=
th the start and end point, then having a language feature that only requir=
es the end point could very easily be confusing.<br><br>Python's range =
function provides this; a single value refers to the terminus. At the same =
time, Range v3's `view::ints` and `view::iota` allow a single value. Bu=
t that value is an <i>initial</i> value, not an end-point. That is, they pr=
oduce an unbounded range that starts from the beginning.<br><br>So there se=
ems to be some disagreement on what a single integer <i>ought</i> to mean.<=
br></div>
<p></p>
-- <br />
<br />
--- <br />
You received this message because you are subscribed to the Google Groups &=
quot;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"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"https://groups.google.com/a/isocpp.org/group=
/std-proposals/">https://groups.google.com/a/isocpp.org/group/std-proposals=
/</a>.<br />
------=_Part_373_1137603572.1453131787909--
------=_Part_372_1193114073.1453131787908--
.
Author: Nicol Bolas <jmckesson@gmail.com>
Date: Mon, 18 Jan 2016 07:44:48 -0800 (PST)
Raw View
------=_Part_655_859524278.1453131888855
Content-Type: multipart/alternative;
boundary="----=_Part_656_389241682.1453131888855"
------=_Part_656_389241682.1453131888855
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
On Monday, January 18, 2016 at 10:38:24 AM UTC-5, Farid Mehrabi wrote:
>
> 2016-01-18 15:34 GMT+03:30 Agust=C3=ADn K-ballo Berg=C3=A9 <kaba...@hotma=
il.com=20
> <javascript:>>:
>
>>
>> For instance, the range-based for-loop proposal (N1868) says all the coo=
l=20
>> languages are doing it, and points at `BOOST_FOREACH` and `Q_FOREACH` as=
=20
>> evidence that people want it badly.
>>
>
> =E2=80=8BYou just missed pre-c++11 std::for_each=E2=80=8B !!!!!!!
>
He was talking about prior art for range-based for. `std::for_each` is not=
=20
"range-based"; it's iterator-pair-based. You can't provide it with a single=
=20
range value; you have to provide it with two separate values, which makes=
=20
using it with temporary ranges troublesome.
--=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 https://groups.google.com/a/isocpp.org/group/std-propos=
als/.
------=_Part_656_389241682.1453131888855
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr">On Monday, January 18, 2016 at 10:38:24 AM UTC-5, Farid Me=
hrabi wrote:<br><blockquote class=3D"gmail_quote" style=3D"margin: 0;margin=
-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"rt=
l"><div><br><div class=3D"gmail_quote"><div dir=3D"ltr">2016-01-18 15:34 GM=
T+03:30 Agust=C3=ADn K-ballo Berg=C3=A9 <span dir=3D"ltr"><<a href=3D"ja=
vascript:" target=3D"_blank" gdf-obfuscated-mailto=3D"mbbeu25hFwAJ" rel=3D"=
nofollow" onmousedown=3D"this.href=3D'javascript:';return true;" on=
click=3D"this.href=3D'javascript:';return true;">kaba...@hotmail.co=
m</a>></span>:</div><blockquote class=3D"gmail_quote" style=3D"margin:0 =
0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br><div style=3D"dir=
ection:ltr">For instance, the range-based for-loop proposal (N1868) says al=
l the cool languages are doing it, and points at `BOOST_FOREACH` and `Q_FOR=
EACH` as evidence that people want it badly.</div></blockquote></div><br cl=
ear=3D"all"><div style=3D"direction:ltr"><div style=3D"font-family:'ari=
al narrow',sans-serif;font-size:large">=E2=80=8BYou just missed pre-c++=
11 std::for_each=E2=80=8B !!!!!!!</div></div></div></div></blockquote><div>=
<br>He was talking about prior art for range-based for. `std::for_each` is =
not "range-based"; it's iterator-pair-based. You can't pr=
ovide it with a single range value; you have to provide it with two separat=
e values, which makes using it with temporary ranges troublesome.<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" 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"https://groups.google.com/a/isocpp.org/group=
/std-proposals/">https://groups.google.com/a/isocpp.org/group/std-proposals=
/</a>.<br />
------=_Part_656_389241682.1453131888855--
------=_Part_655_859524278.1453131888855--
.
Author: Matthew Woehlke <mwoehlke.floss@gmail.com>
Date: Mon, 18 Jan 2016 10:39:23 -0500
Raw View
This is a multi-part message in MIME format.
--------------030109040208060804040808
Content-Type: text/plain; charset=UTF-8
On 2016-01-16 04:38, Andrew Tomazos wrote:
> Please find attached a rough incomplete 2-page draft entitled "Proposal of
> Index-Based For Loop"
>
> Preliminary thoughts appreciated.
Do you propose this as a library feature or a language feature? (Yes, a
library solution, even for the syntax as written, is possible! See
attached.)
What about real numbers? A library function to construct a range
iterator from a value would be much more flexible (could include
non-default start, non-default step, accommodate real numbers...). Note:
I don't buy the "old style is more terse" argument; you can't use 'auto'
as the iterator type with the old-style for loop (not without negating
the "more terse" argument, at least).
(As for the non-default cases being less common, I've used the "default
case" dozens of times in many projects, and the non-default many fewer
times, often zero.)
In any case, I definitely think it's well past time we had something
like this standardized...
TBH, I think I'd like both. The common case is sufficiently common that
is does seem that it ought to Just Work. I don't see a reason not to go
with a pure library solution, though... anyone else?
> It can be shown that the number of general for statements in existing
> practice that have all these properties is very high (in a later
> revision of this proposal we will provide a concrete quantification
> of this proportion).
Uh... yeah. I'd show you examples in real code where I'm using a
range-iterator function fairly extensively, except I don't have
permission to release the code (yet). FWIW, some stats from a couple
projects:
sloccount indexrange uses
2k 20+
12k ~40
17k ~80
....and I know I have other projects that, if I got the time to port to
indexrange, would likewise use it a lot.
--
Matthew
--
---
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 https://groups.google.com/a/isocpp.org/group/std-proposals/.
--------------030109040208060804040808
Content-Type: text/x-c++src;
name="indexrange.cpp"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment;
filename="indexrange.cpp"
#include <iostream>
using namespace std;
/*
template <typename T>
class index_range_t
{
public:
class iterator
{
public:
constexpr T operator*() const { return this->_value; }
iterator& operator++() { this->_value +=3D this->_step; return *this;=
}
constexpr bool operator=3D=3D(const iterator& other) const
{ return this->_value =3D=3D other._value; }
constexpr bool operator!=3D(const iterator& other) const
{ return this->_value !=3D other._value; }
protected:
friend class index_range_t;
constexpr iterator(T value, T step) : _value{value}, _step(step) {}
T _value, _step;
};
constexpr index_range_t(T count) :
_begin{0}, _end{count}, _step{1} {}
constexpr index_range_t(T begin, T end, T step) :
_begin{begin}, _end{end}, _step{step} {}
constexpr iterator begin() const { return { this->_begin, this->_step }=
; }
constexpr iterator end() const { return { this->_end, this->_step }; }
protected:
T _begin, _end, _step;
};
template <typename T>
constexpr auto index_range(T count) -> index_range_t<T>
{ return { count }; }
template <typename T>
constexpr auto index_range(T begin, T end, T step =3D 1) -> index_range_t=
<T>
{ return { begin, end, step }; }
int main()
{
cout << "range(10)" << endl;
for (auto const i : index_range(10))
cout << i << endl;
cout << "range(5, 10)" << endl;
for (auto const i : index_range(5, 10))
cout << i << endl;
cout << "range(0, 10, 2)" << endl;
for (auto const i : index_range(0, 10, 2))
cout << i << endl;
cout << "range(10, 0, -1)" << endl;
for (auto const i : index_range(10, 0, -1))
cout << i << endl;
return 0;
}
/*/
template <typename T>
class index_iterator
{
public:
constexpr index_iterator(T value) noexcept : _value{value} {}
constexpr T operator*() const { return this->_value; }
index_iterator& operator++() { ++this->_value; return *this; }
constexpr bool operator=3D=3D(const index_iterator& other) const
{ return this->_value =3D=3D other._value; }
constexpr bool operator!=3D(const index_iterator& other) const
{ return this->_value !=3D other._value; }
protected:
T _value;
};
namespace std
{
constexpr index_iterator<int> begin(int) noexcept { return { 0 }; }
constexpr index_iterator<int> end(int value) noexcept { return { value =
}; }
}
int main()
{
cout << "range(10)" << endl;
for (auto const i : 10)
cout << i << endl;
return 0;
}
//*/
--------------030109040208060804040808--
.
Author: =?UTF-8?Q?Agust=c3=adn_K-ballo_Berg=c3=a9?= <kaballo86@hotmail.com>
Date: Mon, 18 Jan 2016 12:50:34 -0300
Raw View
On 1/18/2016 12:37 PM, Farid Mehrabi wrote:
>
>
> 2016-01-18 15:34 GMT+03:30 Agust=C3=ADn K-ballo Berg=C3=A9 <kaballo86@hot=
mail.com
> <mailto:kaballo86@hotmail.com>>:
>
>
> For instance, the range-based for-loop proposal (N1868) says all the
> cool languages are doing it, and points at `BOOST_FOREACH` and
> `Q_FOREACH` as evidence that people want it badly.
>
>
> =E2=80=8BYou just missed pre-c++11 std::for_each=E2=80=8B !!!!!!!
I was not the author of that paper.
Regards,
--=20
Agust=C3=ADn K-ballo Berg=C3=A9.-
http://talesofcpp.fusionfenix.com
--=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 https://groups.google.com/a/isocpp.org/group/std-propos=
als/.
.
Author: Matthew Woehlke <mwoehlke.floss@gmail.com>
Date: Mon, 18 Jan 2016 10:50:22 -0500
Raw View
On 2016-01-16 14:03, Nicol Bolas wrote:
> On Saturday, January 16, 2016 at 1:18:33 PM UTC-5, Andrew Tomazos wrote:
>> Why have a built-in + operator?
>
> ... is that *really* the best argument you can put forward for this? "Well,
> we did it with + and integers, why not do it with looping from 0 to X?"
> Seriously, who exactly do you expect to convince with that?
>
> People can argue that many things are "common-enough use cases". That
> *alone* is insufficient.
>
> One of the primary reasons why we added range-based for was because people
> *consistently* wrote range loops incorrectly. Common mistakes include using
> the slower (or non-existent) postfix ++ operator to increment the iterator
> and constantly calling the potentially expensive `end` function. And doing
> it correctly involves creating new scopes manually or leaking variables.
Index iteration solves many of the same problems. Using the inefficient
postfix operator (okay, for integers that's probably not really an
issue). Recomputing or having to store the end. Mismatch between the
iterator type and the sentinel value type. The latter in particular is
why I originally wrote my own library version of this in the first
place! (That, and implicit storing of the sentinel.) Because it's *hard*
to get right, otherwise, and much, *much* easier with an index iterator.
But if it's too painful to write, people won't use it.
Note that we don't need a language feature *even for the proposal as
written*. You really can write `for (auto i : 5)` *purely as a library
feature*. I provided a program that does exactly that in a different reply.
> What problem does your proposal solve? Are people frequently writing
> monotonic loops over the range [0, X) incorrectly?
Yes; see following example...
> The most frequent error I see with such loops is people accidentally
> modifying the loop counter.
size_t complex_function();
for (int i = 0; i < complex_function(); i++)
There are at least three mistakes in that line plus the ability to
accidentally modify the loop counter. All are eliminated in:
for (auto const i : complex_function())
> Which can be resolved just fine with a library solution.
Well, we may agree there :-). Hopefully though I've provided a strong
motivation for having *some* solution get standardized. I'd *prefer*
implicit index iteration if the "range" of a range-based for is an
integer type, but I won't be heartbroken if I have to state that
explicitly. In either case, a library solution seems sufficient.
--
Matthew
--
---
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 https://groups.google.com/a/isocpp.org/group/std-proposals/.
.
Author: Matthew Woehlke <mwoehlke.floss@gmail.com>
Date: Mon, 18 Jan 2016 10:54:31 -0500
Raw View
On 2016-01-17 19:24, Andrew Tomazos wrote:
> On Sun, Jan 17, 2016 at 11:56 PM, dgutson . wrote:
>> I humbly suggest you to focus your efforts in a library-version proposal.
>
> I don't think people will use a library-based solution for for loops, even
> if one was adopted. They will just continue to use the general for loop as
> they do now, as it is shorter and doesn't require an include.
As one doing *exactly* that (using a library solution despite those
drawbacks), I humbly disagree :-).
> As evidence
> I give you the fact that the library-based solution is easy to implement,
> and yet we haven't seen any existing practice of it.
Then you are not looking in the right places. I'm using mine quite a
lot, thank you.
--
Matthew
--
---
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 https://groups.google.com/a/isocpp.org/group/std-proposals/.
.
Author: Matthew Woehlke <mwoehlke.floss@gmail.com>
Date: Mon, 18 Jan 2016 11:00:16 -0500
Raw View
On 2016-01-17 23:44, Nicol Bolas wrote:
> That's hardly a guarantee that it will replace the old way. But quite
> frankly, replacing old loops is a pipe dream. Most people are not going to
> rewrite perfectly functioning code for no reason.
That's probably true, although I've been known to go through code bases
and ruthlessly modernize them. This is exactly one such change that's
part of that process.
> The best you could do under any such goal is to get people writhing
> *new* loops to use the new syntax.
The same is true of range-based for, no?
> And thanks to range-based, there aren't nearly that many loops that could
> use what you're suggesting.
I'm still writing plenty of them. Sometimes because I need the index
during iteration. Sometimes because I'm not iterating over a container,
but over a numeric range (a project I've been working on recently does a
*lot* of that).
--
Matthew
--
---
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 https://groups.google.com/a/isocpp.org/group/std-proposals/.
.
Author: Matthew Woehlke <mwoehlke.floss@gmail.com>
Date: Mon, 18 Jan 2016 11:04:24 -0500
Raw View
On 2016-01-18 10:39, Matthew Woehlke wrote:
> FWIW, some stats from a couple projects:
>
> sloccount indexrange uses
> 2k 20+
> 12k ~40
> 17k ~80
>
> ...and I know I have other projects that, if I got the time to port to
> indexrange, would likewise use it a lot.
I should clarify: these are all projects that *also have range-based
for* (or equivalent work-arounds). So none of these occurrences are
things that could (or at least, would) use a non-index range-based for.
--
Matthew
--
---
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 https://groups.google.com/a/isocpp.org/group/std-proposals/.
.
Author: Andrew Tomazos <andrewtomazos@gmail.com>
Date: Mon, 18 Jan 2016 17:08:44 +0100
Raw View
--089e01229a76a600ed05299df73c
Content-Type: text/plain; charset=UTF-8
On Mon, Jan 18, 2016 at 4:54 PM, Matthew Woehlke <mwoehlke.floss@gmail.com>
wrote:
> On 2016-01-17 19:24, Andrew Tomazos wrote:
> > On Sun, Jan 17, 2016 at 11:56 PM, dgutson . wrote:
> >> I humbly suggest you to focus your efforts in a library-version
> proposal.
> >
> > I don't think people will use a library-based solution for for loops,
> even
> > if one was adopted. They will just continue to use the general for loop
> as
> > they do now, as it is shorter and doesn't require an include.
>
> As one doing *exactly* that (using a library solution despite those
> drawbacks), I humbly disagree :-).
>
> > As evidence
> > I give you the fact that the library-based solution is easy to implement,
> > and yet we haven't seen any existing practice of it.
>
> Then you are not looking in the right places. I'm using mine quite a
> lot, thank you.
>
I have a corpus of 20,000 open source C/C++ projects that are shipping and
packaged totaling 2.5 million source files and 300M sloccount taken from a
popular Linux package repository. It includes things like all of Qt,
boost, vtk, cern root, llvm, chromium, mozilla, to just name a tiny few. I
think it's sufficiently large enough and unbiased enough sample to
extrapolate aggregates to all C++ code - in most cases at least - and
certainly the ones concerning this proposal.
--
---
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 https://groups.google.com/a/isocpp.org/group/std-proposals/.
--089e01229a76a600ed05299df73c
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><div class=3D"gmail_extra"><div class=3D"gmail_quote">On M=
on, Jan 18, 2016 at 4:54 PM, Matthew Woehlke <span dir=3D"ltr"><<a href=
=3D"mailto:mwoehlke.floss@gmail.com" target=3D"_blank">mwoehlke.floss@gmail=
..com</a>></span> wrote:<br><blockquote class=3D"gmail_quote" style=3D"ma=
rgin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On 2016-01-17 =
19:24, Andrew Tomazos wrote:<br>
<span class=3D"">> On Sun, Jan 17, 2016 at 11:56 PM, dgutson . wrote:<br=
>
>> I humbly suggest you to focus your efforts in a library-version pr=
oposal.<br>
><br>
> I don't think people will use a library-based solution for for loo=
ps, even<br>
> if one was adopted.=C2=A0 They will just continue to use the general f=
or loop as<br>
> they do now, as it is shorter and doesn't require an include.<br>
<br>
</span>As one doing *exactly* that (using a library solution despite those<=
br>
drawbacks), I humbly disagree :-).<br>
<span class=3D""><br>
> As evidence<br>
> I give you the fact that the library-based solution is easy to impleme=
nt,<br>
> and yet we haven't seen any existing practice of it.<br>
<br>
</span>Then you are not looking in the right places. I'm using mine qui=
te a<br>
lot, thank you.<br></blockquote><div><br></div><div>I have a corpus of 20,0=
00 open source C/C++ projects that are shipping and packaged totaling 2.5 m=
illion source files and 300M sloccount taken from a popular Linux package r=
epository.=C2=A0 It includes things like all of Qt, boost, vtk, cern root, =
llvm, chromium, mozilla, to just name a tiny few.=C2=A0 I think it's su=
fficiently large enough and unbiased enough sample to extrapolate aggregate=
s to all C++ code - in most cases at least - and certainly the ones concern=
ing this proposal.</div><div><br></div></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" 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"https://groups.google.com/a/isocpp.org/group=
/std-proposals/">https://groups.google.com/a/isocpp.org/group/std-proposals=
/</a>.<br />
--089e01229a76a600ed05299df73c--
.
Author: Farid Mehrabi <farid.mehrabi@gmail.com>
Date: Mon, 18 Jan 2016 19:48:10 +0330
Raw View
--001a113595c4b9221805299e1bbc
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
2016-01-18 19:14 GMT+03:30 Nicol Bolas <jmckesson@gmail.com>:
> On Monday, January 18, 2016 at 10:38:24 AM UTC-5, Farid Mehrabi wrote:
>
>>
>> 2016-01-18 15:34 GMT+03:30 Agust=C3=ADn K-ballo Berg=C3=A9 <kaba...@hotm=
ail.com>:
>>
>>>
>>> For instance, the range-based for-loop proposal (N1868) says all the
>>> cool languages are doing it, and points at `BOOST_FOREACH` and `Q_FOREA=
CH`
>>> as evidence that people want it badly.
>>>
>>
>> =E2=80=8BYou just missed pre-c++11 std::for_each=E2=80=8B !!!!!!!
>>
>
> He was talking about prior art for range-based for. `std::for_each` is no=
t
> "range-based"; it's iterator-pair-based. You can't provide it with a sing=
le
> range value; you have to provide it with two separate values, which makes
> using it with temporary ranges troublesome.
>
=E2=80=8Bagreed, but it was a ring in the chain of efforts,=E2=80=8B and a =
signal that
traditional 'for' loop is not enough any more.
I am just thinking that the new range-based 'for' loop syntax has opened
the gates towards extending the 'for' loop. traditional 'for' has always
had the risk of inconsistent (wrong) formation of initial value,
termination condition and/or stepping. IMHO a library-based range
manipulator with proper operators can not only shorten the loop
declaration, but also decrease programmer's errors. Instead of a container,
range can be a value generator.
---
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
https://groups.google.com/a/isocpp.org/group/std-proposals/.
--=20
how am I supposed to end the twisted road of your hair in such a dark
night??
unless the candle of your face does shed some light upon my way!!!
--=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 https://groups.google.com/a/isocpp.org/group/std-propos=
als/.
--001a113595c4b9221805299e1bbc
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"rtl"><div class=3D"gmail_default" style=3D"font-family:arial na=
rrow,sans-serif;font-size:large"><br></div><div class=3D"gmail_extra"><div =
dir=3D"ltr"><br><div class=3D"gmail_quote">2016-01-18 19:14 GMT+03:30 Nicol=
Bolas <span dir=3D"ltr"><<a href=3D"mailto:jmckesson@gmail.com" target=
=3D"_blank">jmckesson@gmail.com</a>></span>:<br><blockquote class=3D"gma=
il_quote" style=3D"margin:0 .8ex;border-left:1px #ccc solid;border-right:1p=
x #ccc solid;padding-left:1ex;padding-right:1ex">On Monday, January 18, 201=
6 at 10:38:24 AM UTC-5, Farid Mehrabi wrote:<span class=3D""><br><blockquot=
e class=3D"gmail_quote" style=3D"margin:0;margin-left:0.8ex;border-left:1px=
#ccc solid;padding-left:1ex"><div dir=3D"rtl"><div><br><div class=3D"gmail=
_quote"><div dir=3D"ltr">2016-01-18 15:34 GMT+03:30 Agust=C3=ADn K-ballo Be=
rg=C3=A9 <span dir=3D"ltr"><<a rel=3D"nofollow">kaba...@hotmail.com</a>&=
gt;</span>:</div><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8=
ex;border-left:1px #ccc solid;padding-left:1ex"><br><div style=3D"direction=
:ltr">For instance, the range-based for-loop proposal (N1868) says all the =
cool languages are doing it, and points at `BOOST_FOREACH` and `Q_FOREACH` =
as evidence that people want it badly.</div></blockquote></div><br clear=3D=
"all"><div style=3D"direction:ltr"><div style=3D"font-family:'arial nar=
row',sans-serif;font-size:large">=E2=80=8BYou just missed pre-c++11 std=
::for_each=E2=80=8B !!!!!!!</div></div></div></div></blockquote></span><div=
><br>He was talking about prior art for range-based for. `std::for_each` is=
not "range-based"; it's iterator-pair-based. You can't p=
rovide it with a single range value; you have to provide it with two separa=
te values, which makes using it with temporary ranges troublesome.<br></div=
></blockquote></div><div class=3D"HOEnZb"><div class=3D"h5"><br></div><div =
class=3D"h5">
<p></p><div class=3D"gmail_default" style=3D"font-family:'arial narrow&=
#39;,sans-serif;font-size:large">=E2=80=8Bagreed, but it was a ring in the =
chain of efforts,=E2=80=8B and a signal that traditional 'for' loop=
is not enough any more.</div><div class=3D"gmail_default" style=3D"font-fa=
mily:'arial narrow',sans-serif;font-size:large"><br></div><div clas=
s=3D"gmail_default" style=3D"font-family:'arial narrow',sans-serif;=
font-size:large">I am just thinking that the new range-based 'for' =
loop syntax has opened the gates towards extending the 'for' loop. =
traditional 'for' has always had the risk of inconsistent (wrong) f=
ormation of initial value, termination condition and/or stepping. IMHO a li=
brary-based range manipulator with proper operators can not only shorten th=
e loop declaration, but also decrease programmer's errors. Instead of a=
container, range can be a value generator.</div><div class=3D"gmail_defaul=
t" style=3D"font-family:'arial narrow',sans-serif;font-size:large">=
<br></div>
--- <br>
You received this message because you are subscribed to the Google Groups &=
quot;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"mailto:std-proposals+unsubscribe@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"https://groups.google.com/a/isocpp.org/group=
/std-proposals/" target=3D"_blank">https://groups.google.com/a/isocpp.org/g=
roup/std-proposals/</a>.<br>
</div></div></div><br clear=3D"all"><div><br></div>-- <br><div class=3D"gma=
il_signature"><div dir=3D"rtl"><div><div dir=3D"ltr">how am I supposed to e=
nd the twisted road of=C2=A0 your hair in such a dark night??<br>unless the=
candle of your face does shed some light upon my way!!!<br></div></div></d=
iv></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" 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"https://groups.google.com/a/isocpp.org/group=
/std-proposals/">https://groups.google.com/a/isocpp.org/group/std-proposals=
/</a>.<br />
--001a113595c4b9221805299e1bbc--
.
Author: Nicol Bolas <jmckesson@gmail.com>
Date: Mon, 18 Jan 2016 08:19:52 -0800 (PST)
Raw View
------=_Part_1870_139943609.1453133992973
Content-Type: multipart/alternative;
boundary="----=_Part_1871_1585289113.1453133992973"
------=_Part_1871_1585289113.1453133992973
Content-Type: text/plain; charset=UTF-8
On Monday, January 18, 2016 at 10:45:08 AM UTC-5, Matthew Woehlke wrote:
>
> On 2016-01-16 04:38, Andrew Tomazos wrote:
> > Please find attached a rough incomplete 2-page draft entitled "Proposal
> of
> > Index-Based For Loop"
> >
> > Preliminary thoughts appreciated.
>
> Do you propose this as a library feature or a language feature? (Yes, a
> library solution, even for the syntax as written, is possible! See
> attached.)
>
Ideaone doesn't seem to like your code very much <http://ideone.com/NnTJHN>.
Also, I'm not sure that `index_iterator` is a genuine iterator. It doesn't
expose the iterator typedefs, nor does it specialize `std::iterator_traits`
to expose them for it. Sure, I suppose that range-based `for` does not
explicit *require* these things to be genuine iterators. But reliance on
flimsy specification is not wise.
Finally, I dislike the idea of *implicitly* treating a number as a range by
specializing customization points meant for actual ranges.
--
---
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 https://groups.google.com/a/isocpp.org/group/std-proposals/.
------=_Part_1871_1585289113.1453133992973
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr">On Monday, January 18, 2016 at 10:45:08 AM UTC-5, Matthew =
Woehlke wrote:<blockquote class=3D"gmail_quote" style=3D"margin: 0;margin-l=
eft: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;">On 2016-01-16 04=
:38, Andrew Tomazos wrote:
<br>> Please find attached a rough incomplete 2-page draft entitled &quo=
t;Proposal of
<br>> Index-Based For Loop"
<br>>=20
<br>> Preliminary thoughts appreciated.
<br>
<br>Do you propose this as a library feature or a language feature? (Yes, a
<br>library solution, even for the syntax as written, is possible! See
<br>attached.)
<br></blockquote><div><br>Ideaone <a href=3D"http://ideone.com/NnTJHN">does=
n't seem to like your code very much</a>.<br><br>Also, I'm not sure=
that `index_iterator` is a genuine iterator. It doesn't expose the ite=
rator typedefs, nor does it specialize `std::iterator_traits` to expose the=
m for it. Sure, I suppose that range-based `for` does not explicit <i>requi=
re</i> these things to be genuine iterators. But reliance on flimsy specifi=
cation is not wise.<br><br>Finally, I dislike the idea of <i>implicitly</i>=
treating a number as a range by specializing customization points meant fo=
r actual ranges.<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" 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"https://groups.google.com/a/isocpp.org/group=
/std-proposals/">https://groups.google.com/a/isocpp.org/group/std-proposals=
/</a>.<br />
------=_Part_1871_1585289113.1453133992973--
------=_Part_1870_139943609.1453133992973--
.
Author: Matthew Woehlke <mwoehlke.floss@gmail.com>
Date: Mon, 18 Jan 2016 11:24:19 -0500
Raw View
On 2016-01-18 11:08, Andrew Tomazos wrote:
> On Mon, Jan 18, 2016 at 4:54 PM, Matthew Woehlke wrote:
>> On 2016-01-17 19:24, Andrew Tomazos wrote:
>>> As evidence I give you the fact that the library-based solution
>>> is easy to implement, and yet we haven't seen any existing
>>> practice of it.
>>
>> Then you are not looking in the right places. I'm using mine quite a
>> lot, thank you.
>
> I have a corpus of 20,000 open source C/C++ projects that are shipping and
> packaged totaling 2.5 million source files and 300M sloccount taken from a
> popular Linux package repository. It includes things like all of Qt,
> boost, vtk, cern root, llvm, chromium, mozilla, to just name a tiny few. I
> think it's sufficiently large enough and unbiased enough sample to
> extrapolate aggregates to all C++ code - in most cases at least - and
> certainly the ones concerning this proposal.
....and how much of that is sufficiently recent that a library solution
would even be considered? Artificially weighting the statistic by
considering mainly code where the authors were not aware of a
library-based solution, or could not use one for whatever reason (most
of that code likely predates C++11), does not make for a convincing
argument.
The statistics I provided are for projects that a) are aware of (and
*using*) a library solution, and b) are able to do so due to
availability of container iteration (either in the form of true
range-based for or an equivalent work-around).
Yes, it's anecdotal as I am only one person, but it's direct, personal
experience, not guesses about the unknown motivations of third parties.
That said, I'd still love to have 'for (auto i : 5)'... but I'm
unconvinced that a language solution is required.
I would encourage you to propose a comprehensive library solution that
covers both the trivial and complex cases, including a "syntax free"
(i.e. can implement 'for (auto i : 5)') form of the common case. That
way a) you are not proposing a language change, which as shown is going
to be a much more difficult sell, and b) there is a better chance of at
least part of the proposal being adopted. *Anything* we can get in this
direction would be a win.
--
Matthew
--
---
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 https://groups.google.com/a/isocpp.org/group/std-proposals/.
.
Author: Ville Voutilainen <ville.voutilainen@gmail.com>
Date: Mon, 18 Jan 2016 18:24:52 +0200
Raw View
On 18 January 2016 at 18:08, Andrew Tomazos <andrewtomazos@gmail.com> wrote:
> I have a corpus of 20,000 open source C/C++ projects that are shipping and
> packaged totaling 2.5 million source files and 300M sloccount taken from a
> popular Linux package repository. It includes things like all of Qt, boost,
> vtk, cern root, llvm, chromium, mozilla, to just name a tiny few. I think
That's nice.
> it's sufficiently large enough and unbiased enough sample to extrapolate
> aggregates to all C++ code - in most cases at least - and certainly the ones
Well, that takes home the prize of the most outrageous statement on these forums
in quite a while.
> concerning this proposal.
Well, to each their own, I guess.
--
---
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 https://groups.google.com/a/isocpp.org/group/std-proposals/.
.
Author: Farid Mehrabi <farid.mehrabi@gmail.com>
Date: Mon, 18 Jan 2016 19:55:45 +0330
Raw View
--001a113aab8ad761f505299e36db
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
oops!!!, I seem to be too exhausted.
2016-01-18 19:20 GMT+03:30 Agust=C3=ADn K-ballo Berg=C3=A9 <kaballo86@hotma=
il.com>:
> On 1/18/2016 12:37 PM, Farid Mehrabi wrote:
>
>>
>>
>> 2016-01-18 15:34 GMT+03:30 Agust=C3=ADn K-ballo Berg=C3=A9 <kaballo86@ho=
tmail.com
>> <mailto:kaballo86@hotmail.com>>:
>>
>>
>> For instance, the range-based for-loop proposal (N1868) says all the
>> cool languages are doing it, and points at `BOOST_FOREACH` and
>> `Q_FOREACH` as evidence that people want it badly.
>>
>>
>> =E2=80=8BYou just missed pre-c++11 std::for_each=E2=80=8B !!!!!!!
>>
>
> I was not the author of that paper.
>
>
> Regards,
> --
> Agust=C3=ADn K-ballo Berg=C3=A9.-
> http://talesofcpp.fusionfenix.com
>
> --
>
> --- 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
> https://groups.google.com/a/isocpp.org/group/std-proposals/.
>
--=20
how am I supposed to end the twisted road of your hair in such a dark
night??
unless the candle of your face does shed some light upon my way!!!
--=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 https://groups.google.com/a/isocpp.org/group/std-propos=
als/.
--001a113aab8ad761f505299e36db
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"rtl"><div class=3D"gmail_default" style=3D"font-family:'ari=
al narrow',sans-serif;font-size:large" dir=3D"ltr">oops!!!, I seem to b=
e too exhausted.</div></div><div class=3D"gmail_extra"><br><div class=3D"gm=
ail_quote"><div dir=3D"ltr">2016-01-18 19:20 GMT+03:30 Agust=C3=ADn K-ballo=
Berg=C3=A9 <span dir=3D"ltr"><<a href=3D"mailto:kaballo86@hotmail.com" =
target=3D"_blank">kaballo86@hotmail.com</a>></span>:</div><blockquote cl=
ass=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;p=
adding-left:1ex"><span class=3D"">On 1/18/2016 12:37 PM, Farid Mehrabi wrot=
e:<br>
</span><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-=
left:1px #ccc solid;padding-left:1ex"><span class=3D"">
<br>
<br>
2016-01-18 15:34 GMT+03:30 Agust=C3=ADn K-ballo Berg=C3=A9 <<a href=3D"m=
ailto:kaballo86@hotmail.com" target=3D"_blank">kaballo86@hotmail.com</a><br=
></span>
<mailto:<a href=3D"mailto:kaballo86@hotmail.com" target=3D"_blank">kabal=
lo86@hotmail.com</a>>>:<span class=3D""><br>
<br>
<br>
=C2=A0 =C2=A0 For instance, the range-based for-loop proposal (N1868) says =
all the<br>
=C2=A0 =C2=A0 cool languages are doing it, and points at `BOOST_FOREACH` an=
d<br>
=C2=A0 =C2=A0 `Q_FOREACH` as evidence that people want it badly.<br>
<br>
<br>
=E2=80=8BYou just missed pre-c++11 std::for_each=E2=80=8B !!!!!!!<br>
</span></blockquote>
<br>
I was not the author of that paper.<div class=3D"HOEnZb"><div class=3D"h5">=
<br>
<br>
Regards,<br>
-- <br>
Agust=C3=ADn K-ballo Berg=C3=A9.-<br>
<a href=3D"http://talesofcpp.fusionfenix.com" rel=3D"noreferrer" target=3D"=
_blank">http://talesofcpp.fusionfenix.com</a><br>
<br>
-- <br>
<br>
--- You received this message because you are subscribed to the Google Grou=
ps "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"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"https://groups.google.com/a/isocpp.org/group=
/std-proposals/" rel=3D"noreferrer" target=3D"_blank">https://groups.google=
..com/a/isocpp.org/group/std-proposals/</a>.<br>
</div></div></blockquote></div><br><br clear=3D"all"><div><br></div>-- <br>=
<div class=3D"gmail_signature"><div dir=3D"rtl"><div><div dir=3D"ltr">how a=
m I supposed to end the twisted road of=C2=A0 your hair in such a dark nigh=
t??<br>unless the candle of your face does shed some light upon my way!!!<b=
r></div></div></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" 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"https://groups.google.com/a/isocpp.org/group=
/std-proposals/">https://groups.google.com/a/isocpp.org/group/std-proposals=
/</a>.<br />
--001a113aab8ad761f505299e36db--
.
Author: Andrew Tomazos <andrewtomazos@gmail.com>
Date: Mon, 18 Jan 2016 17:32:00 +0100
Raw View
--001a11419974dc3e4b05299e4a22
Content-Type: text/plain; charset=UTF-8
On Mon, Jan 18, 2016 at 5:24 PM, Ville Voutilainen <
ville.voutilainen@gmail.com> wrote:
> On 18 January 2016 at 18:08, Andrew Tomazos <andrewtomazos@gmail.com>
> wrote:
> > I have a corpus of 20,000 open source C/C++ projects that are shipping
> and
> > packaged totaling 2.5 million source files and 300M sloccount taken from
> a
> > popular Linux package repository. It includes things like all of Qt,
> boost,
> > vtk, cern root, llvm, chromium, mozilla, to just name a tiny few. I
> think
>
> That's nice.
>
> > it's sufficiently large enough and unbiased enough sample to extrapolate
> > aggregates to all C++ code - in most cases at least - and certainly the
> ones
>
> Well, that takes home the prize of the most outrageous statement on these
> forums
> in quite a while.
>
I guess you strongly disagree with my statement, care to say why?
> concerning this proposal.
>
> Well, to each their own, I guess.
>
> --
>
> ---
> 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
> https://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 https://groups.google.com/a/isocpp.org/group/std-proposals/.
--001a11419974dc3e4b05299e4a22
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><br><div class=3D"gmail_extra"><br><div class=3D"gmail_quo=
te">On Mon, Jan 18, 2016 at 5:24 PM, Ville Voutilainen <span dir=3D"ltr">&l=
t;<a href=3D"mailto:ville.voutilainen@gmail.com" target=3D"_blank">ville.vo=
utilainen@gmail.com</a>></span> wrote:<br><blockquote class=3D"gmail_quo=
te" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"=
><span class=3D"">On 18 January 2016 at 18:08, Andrew Tomazos <<a href=
=3D"mailto:andrewtomazos@gmail.com">andrewtomazos@gmail.com</a>> wrote:<=
br>
> I have a corpus of 20,000 open source C/C++ projects that are shipping=
and<br>
> packaged totaling 2.5 million source files and 300M sloccount taken fr=
om a<br>
> popular Linux package repository.=C2=A0 It includes things like all of=
Qt, boost,<br>
> vtk, cern root, llvm, chromium, mozilla, to just name a tiny few.=C2=
=A0 I think<br>
<br>
</span>That's nice.<br>
<span class=3D""><br>
> it's sufficiently large enough and unbiased enough sample to extra=
polate<br>
> aggregates to all C++ code - in most cases at least - and certainly th=
e ones<br>
<br>
</span>Well, that takes home the prize of the most outrageous statement on =
these forums<br>
in quite a while.<br></blockquote><div><br></div><div>I guess you strongly =
disagree with my statement, care to say why?</div><div><br></div><blockquot=
e class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc sol=
id;padding-left:1ex">
> concerning this proposal.<br>
<br>
Well, to each their own, I guess.<br>
<div class=3D"HOEnZb"><div class=3D"h5"><br>
--<br>
<br>
---<br>
You received this message because you are subscribed to the Google Groups &=
quot;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"mailto:std-proposals%2Bunsubscribe@isocpp.org">std-propo=
sals+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"https://groups.google.com/a/isocpp.org/group=
/std-proposals/" rel=3D"noreferrer" target=3D"_blank">https://groups.google=
..com/a/isocpp.org/group/std-proposals/</a>.<br>
</div></div></blockquote></div><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" 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"https://groups.google.com/a/isocpp.org/group=
/std-proposals/">https://groups.google.com/a/isocpp.org/group/std-proposals=
/</a>.<br />
--001a11419974dc3e4b05299e4a22--
.
Author: Matthew Woehlke <mwoehlke.floss@gmail.com>
Date: Mon, 18 Jan 2016 11:33:23 -0500
Raw View
On 2016-01-18 09:45, Agust=C3=ADn K-ballo Berg=C3=A9 wrote:
> Some people claim to have implemented the library solution for personal
> use, which would suggest they do use such a facility. Perhaps they do so
> only outside a range-based for-loop, since that has its merits too, so
> it would be worth a follow up with them.
Er... huh? The library solution is only usable from *within* a
range-based for. (Mind, in at least one of the projects I cited,
range-based for is spelled "foreach" or "VITAL_FOREACH", due to the need
to use a fallback on old compilers, so any searching for range-based for
syntax would not turn up uses.)
> Personally, I am not convinced of the readability advantages of the
> proposed solution over a plain for loop, although that is entirely
> subjective.
I rather suspect that old-school iterators are only readable because
we're used to them :-). Anyway, use them for readability, I use them
because a) the end value is "recorded", and b) the iterator type is deduced=
..
(And... because I think 'for (iter : range(value)' reads well :-).)
> The existence of MSVC's `for each` says otherwise,
OT... did you know that MSVC "for each" *bypasses the preprocessor*?
This is an error:
#define each (a, b) (a : b)
for each (auto item, container)
....even though it is conforming code and DTRT on every other (C++11)
compiler :'(.
--=20
Matthew
--=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 https://groups.google.com/a/isocpp.org/group/std-propos=
als/.
.
Author: Andrew Tomazos <andrewtomazos@gmail.com>
Date: Mon, 18 Jan 2016 17:33:53 +0100
Raw View
--089e013cc31493d47405299e51ee
Content-Type: text/plain; charset=UTF-8
On Mon, Jan 18, 2016 at 5:24 PM, Matthew Woehlke <mwoehlke.floss@gmail.com>
wrote:
> On 2016-01-18 11:08, Andrew Tomazos wrote:
> > On Mon, Jan 18, 2016 at 4:54 PM, Matthew Woehlke wrote:
> >> On 2016-01-17 19:24, Andrew Tomazos wrote:
> >>> As evidence I give you the fact that the library-based solution
> >>> is easy to implement, and yet we haven't seen any existing
> >>> practice of it.
> >>
> >> Then you are not looking in the right places. I'm using mine quite a
> >> lot, thank you.
> >
> > I have a corpus of 20,000 open source C/C++ projects that are shipping
> and
> > packaged totaling 2.5 million source files and 300M sloccount taken from
> a
> > popular Linux package repository. It includes things like all of Qt,
> > boost, vtk, cern root, llvm, chromium, mozilla, to just name a tiny
> few. I
> > think it's sufficiently large enough and unbiased enough sample to
> > extrapolate aggregates to all C++ code - in most cases at least - and
> > certainly the ones concerning this proposal.
>
> ...and how much of that is sufficiently recent that a library solution
> would even be considered? Artificially weighting the statistic by
> considering mainly code where the authors were not aware of a
> library-based solution, or could not use one for whatever reason (most
> of that code likely predates C++11), does not make for a convincing
> argument.
>
About 50% is C++ (not C) and about 20% is using C++11 or newer.
The statistics I provided are for projects that a) are aware of (and
> *using*) a library solution, and b) are able to do so due to
> availability of container iteration (either in the form of true
> range-based for or an equivalent work-around).
>
> Yes, it's anecdotal as I am only one person, but it's direct, personal
> experience, not guesses about the unknown motivations of third parties.
>
> That said, I'd still love to have 'for (auto i : 5)'... but I'm
> unconvinced that a language solution is required.
>
> I would encourage you to propose a comprehensive library solution that
> covers both the trivial and complex cases, including a "syntax free"
> (i.e. can implement 'for (auto i : 5)') form of the common case. That
> way a) you are not proposing a language change, which as shown is going
> to be a much more difficult sell, and b) there is a better chance of at
> least part of the proposal being adopted. *Anything* we can get in this
> direction would be a win.
>
> --
> Matthew
>
> --
>
> ---
> 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
> https://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 https://groups.google.com/a/isocpp.org/group/std-proposals/.
--089e013cc31493d47405299e51ee
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><br><div class=3D"gmail_extra"><br><div class=3D"gmail_quo=
te">On Mon, Jan 18, 2016 at 5:24 PM, Matthew Woehlke <span dir=3D"ltr"><=
<a href=3D"mailto:mwoehlke.floss@gmail.com" target=3D"_blank">mwoehlke.flos=
s@gmail.com</a>></span> wrote:<br><blockquote class=3D"gmail_quote" styl=
e=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On 2016=
-01-18 11:08, Andrew Tomazos wrote:<br>
<span class=3D"">> On Mon, Jan 18, 2016 at 4:54 PM, Matthew Woehlke wrot=
e:<br>
>> On 2016-01-17 19:24, Andrew Tomazos wrote:<br>
</span><span class=3D"">>>> As evidence I give you the fact that t=
he library-based solution<br>
>>> is easy to implement, and yet we haven't seen any existing=
<br>
>>> practice of it.<br>
>><br>
>> Then you are not looking in the right places. I'm using mine q=
uite a<br>
>> lot, thank you.<br>
><br>
> I have a corpus of 20,000 open source C/C++ projects that are shipping=
and<br>
> packaged totaling 2.5 million source files and 300M sloccount taken fr=
om a<br>
> popular Linux package repository.=C2=A0 It includes things like all of=
Qt,<br>
> boost, vtk, cern root, llvm, chromium, mozilla, to just name a tiny fe=
w.=C2=A0 I<br>
> think it's sufficiently large enough and unbiased enough sample to=
<br>
> extrapolate aggregates to all C++ code - in most cases at least - and<=
br>
> certainly the ones concerning this proposal.<br>
<br>
</span>...and how much of that is sufficiently recent that a library soluti=
on<br>
would even be considered? Artificially weighting the statistic by<br>
considering mainly code where the authors were not aware of a<br>
library-based solution, or could not use one for whatever reason (most<br>
of that code likely predates C++11), does not make for a convincing<br>
argument.<br></blockquote><div><br></div><div>About 50% is C++ (not C) and =
about 20% is using C++11 or newer.=C2=A0</div><div><br></div><blockquote cl=
ass=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;p=
adding-left:1ex">
The statistics I provided are for projects that a) are aware of (and<br>
*using*) a library solution, and b) are able to do so due to<br>
availability of container iteration (either in the form of true<br>
range-based for or an equivalent work-around).<br>
<br>
Yes, it's anecdotal as I am only one person, but it's direct, perso=
nal<br>
experience, not guesses about the unknown motivations of third parties.<br>
<br>
That said, I'd still love to have 'for (auto i : 5)'... but I&#=
39;m<br>
unconvinced that a language solution is required.<br>
<br>
I would encourage you to propose a comprehensive library solution that<br>
covers both the trivial and complex cases, including a "syntax free&qu=
ot;<br>
(i.e. can implement 'for (auto i : 5)') form of the common case. Th=
at<br>
way a) you are not proposing a language change, which as shown is going<br>
to be a much more difficult sell, and b) there is a better chance of at<br>
least part of the proposal being adopted. *Anything* we can get in this<br>
direction would be a win.<br>
<div class=3D"HOEnZb"><div class=3D"h5"><br>
--<br>
Matthew<br>
<br>
--<br>
<br>
---<br>
You received this message because you are subscribed to the Google Groups &=
quot;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"mailto:std-proposals%2Bunsubscribe@isocpp.org">std-propo=
sals+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"https://groups.google.com/a/isocpp.org/group=
/std-proposals/" rel=3D"noreferrer" target=3D"_blank">https://groups.google=
..com/a/isocpp.org/group/std-proposals/</a>.<br>
</div></div></blockquote></div><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" 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"https://groups.google.com/a/isocpp.org/group=
/std-proposals/">https://groups.google.com/a/isocpp.org/group/std-proposals=
/</a>.<br />
--089e013cc31493d47405299e51ee--
.
Author: Matthew Woehlke <mwoehlke.floss@gmail.com>
Date: Mon, 18 Jan 2016 11:33:37 -0500
Raw View
On 2016-01-18 08:37, Andrew Tomazos wrote:
> Given the three solutions:
>=20
> 1. for (int i =3D 0; i < N; ++i)
> 2. #include <whatever/irange> using whatever::irange; for (int i :
> irange(N))
> 3. for (int i : N)
>=20
> The evidence suggests [1] is preferred to [2].
Again, I respectfully disagree. [1] has decades of inertia behind it,
while [2] is new, and only just starting to be an available solution in
many projects.
Personally, I now use [2] whenever possible and avoid [1]. Many projects
I work on however it's new that C++ > 2003 is allowed, and most can't
even fully use C++11=C2=B9, and won't be able to for many years.
(=C2=B9 Specifically, can't use range-based for, although a work-around is
possible: see
https://github.com/Kitware/vital/blob/master/vital/vital_foreach.h.)
> People generally use [1] rather than [2], despite various versions
> of [2] being available and easy to implement.
existing code !=3D people
--=20
Matthew
--=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 https://groups.google.com/a/isocpp.org/group/std-propos=
als/.
.
Author: Ville Voutilainen <ville.voutilainen@gmail.com>
Date: Mon, 18 Jan 2016 18:37:10 +0200
Raw View
On 18 January 2016 at 18:32, Andrew Tomazos <andrewtomazos@gmail.com> wrote:
>> > I have a corpus of 20,000 open source C/C++ projects that are shipping
>> > and
>> > packaged totaling 2.5 million source files and 300M sloccount taken from
>> > a
>> > popular Linux package repository. It includes things like all of Qt,
>> > boost,
>> > vtk, cern root, llvm, chromium, mozilla, to just name a tiny few. I
>> > think
>>
>> That's nice.
>>
>> > it's sufficiently large enough and unbiased enough sample to extrapolate
>> > aggregates to all C++ code - in most cases at least - and certainly the
>> > ones
>>
>> Well, that takes home the prize of the most outrageous statement on these
>> forums
>> in quite a while.
> I guess you strongly disagree with my statement, care to say why?
I disagree that your corpus is large enough and unbiased enough to extrapolate
anything to all C++ code.
--
---
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 https://groups.google.com/a/isocpp.org/group/std-proposals/.
.
Author: Andrew Tomazos <andrewtomazos@gmail.com>
Date: Mon, 18 Jan 2016 17:38:08 +0100
Raw View
--001a11467ce2cd866305299e600f
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
On Mon, Jan 18, 2016 at 5:33 PM, Matthew Woehlke <mwoehlke.floss@gmail.com>
wrote:
> On 2016-01-18 08:37, Andrew Tomazos wrote:
> > Given the three solutions:
> >
> > 1. for (int i =3D 0; i < N; ++i)
> > 2. #include <whatever/irange> using whatever::irange; for (int i :
> > irange(N))
> > 3. for (int i : N)
> >
> > The evidence suggests [1] is preferred to [2].
>
> Again, I respectfully disagree. [1] has decades of inertia behind it,
> while [2] is new, and only just starting to be an available solution in
> many projects.
>
[2] has been available since Range-Based For, which is C++11. We would
therefore expect to see a significant number of usages of [2] relative to
[1] in C++11 code if the hypothesis is false.
Personally, I now use [2] whenever possible and avoid [1]. Many projects
> I work on however it's new that C++ > 2003 is allowed, and most can't
> even fully use C++11=C2=B9, and won't be able to for many years.
>
> (=C2=B9 Specifically, can't use range-based for, although a work-around i=
s
> possible: see
> https://github.com/Kitware/vital/blob/master/vital/vital_foreach.h.)
>
> > People generally use [1] rather than [2], despite various versions
> > of [2] being available and easy to implement.
>
> existing code !=3D people
>
> --
> Matthew
>
> --
>
> ---
> 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
> https://groups.google.com/a/isocpp.org/group/std-proposals/.
>
--=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 https://groups.google.com/a/isocpp.org/group/std-propos=
als/.
--001a11467ce2cd866305299e600f
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><br><div class=3D"gmail_extra"><br><div class=3D"gmail_quo=
te">On Mon, Jan 18, 2016 at 5:33 PM, Matthew Woehlke <span dir=3D"ltr"><=
<a href=3D"mailto:mwoehlke.floss@gmail.com" target=3D"_blank">mwoehlke.flos=
s@gmail.com</a>></span> wrote:<br><blockquote class=3D"gmail_quote" styl=
e=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span c=
lass=3D"">On 2016-01-18 08:37, Andrew Tomazos wrote:<br>
> Given the three solutions:<br>
><br>
>=C2=A0 =C2=A0 1. for (int i =3D 0; i < N; ++i)<br>
>=C2=A0 =C2=A0 2. #include <whatever/irange> using whatever::irang=
e;=C2=A0 for (int i :<br>
> irange(N))<br>
>=C2=A0 =C2=A0 3. for (int i : N)<br>
><br>
> The evidence suggests [1] is preferred to [2].<br>
<br>
</span>Again, I respectfully disagree. [1] has decades of inertia behind it=
,<br>
while [2] is new, and only just starting to be an available solution in<br>
many projects.<br></blockquote><div><br></div><div>[2] has been available s=
ince Range-Based For, which is C++11.=C2=A0 We would therefore expect to se=
e a significant number of usages of [2] relative to [1] in C++11 code if th=
e hypothesis is false.</div><div><br></div><blockquote class=3D"gmail_quote=
" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Personally, I now use [2] whenever possible and avoid [1]. Many projects<br=
>
I work on however it's new that C++ > 2003 is allowed, and most can&=
#39;t<br>
even fully use C++11=C2=B9, and won't be able to for many years.<br>
<br>
(=C2=B9 Specifically, can't use range-based for, although a work-around=
is<br>
possible: see<br>
<a href=3D"https://github.com/Kitware/vital/blob/master/vital/vital_foreach=
..h" rel=3D"noreferrer" target=3D"_blank">https://github.com/Kitware/vital/b=
lob/master/vital/vital_foreach.h</a>.)<br>
<span class=3D""><br>
> People generally use [1] rather than [2], despite various versions<br>
> of [2] being available and easy to implement.<br>
<br>
</span>existing code !=3D people<br>
<span class=3D"HOEnZb"><font color=3D"#888888"><br>
--<br>
Matthew<br>
</font></span><div class=3D"HOEnZb"><div class=3D"h5"><br>
--<br>
<br>
---<br>
You received this message because you are subscribed to the Google Groups &=
quot;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"mailto:std-proposals%2Bunsubscribe@isocpp.org">std-propo=
sals+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"https://groups.google.com/a/isocpp.org/group=
/std-proposals/" rel=3D"noreferrer" target=3D"_blank">https://groups.google=
..com/a/isocpp.org/group/std-proposals/</a>.<br>
</div></div></blockquote></div><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" 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"https://groups.google.com/a/isocpp.org/group=
/std-proposals/">https://groups.google.com/a/isocpp.org/group/std-proposals=
/</a>.<br />
--001a11467ce2cd866305299e600f--
.
Author: Matthew Woehlke <mwoehlke.floss@gmail.com>
Date: Mon, 18 Jan 2016 11:43:53 -0500
Raw View
On 2016-01-18 11:19, Nicol Bolas wrote:
> On Monday, January 18, 2016 at 10:45:08 AM UTC-5, Matthew Woehlke wrote:
>> Do you propose this as a library feature or a language feature? (Yes, a
>> library solution, even for the syntax as written, is possible! See
>> attached.)
>
> Ideaone doesn't seem to like your code very much <http://ideone.com/NnTJHN>.
That's... interesting. It's fine on GCC 4.8 (https://goo.gl/uTl1VK), but
not 4.9 or clang. Apparently I don't grok the look-up rules for 'begin'
in this context. I'm not sure that can't be remedied without a language
change, though?
> Also, I'm not sure that `index_iterator` is a genuine iterator. It doesn't
> expose the iterator typedefs, nor does it specialize `std::iterator_traits`
> to expose them for it. Sure, I suppose that range-based `for` does not
> explicit *require* these things to be genuine iterators. But reliance on
> flimsy specification is not wise.
Well, sure... it's meant to be sufficient for range-based for. A
"complete" implementation would be more complicated, but I don't see why
it would be impossible?
> Finally, I dislike the idea of *implicitly* treating a number as a range by
> specializing customization points meant for actual ranges.
Fair enough. The point was to try to demonstrate that the "terse form"
e.g. 'for (auto i : 5)' can be achieved without a language change.
That's not to say there aren't potential drawbacks to the approach...
--
Matthew
--
---
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 https://groups.google.com/a/isocpp.org/group/std-proposals/.
.
Author: Andrew Tomazos <andrewtomazos@gmail.com>
Date: Mon, 18 Jan 2016 17:45:13 +0100
Raw View
--001a11444c2417f40405299e7ad7
Content-Type: text/plain; charset=UTF-8
On Mon, Jan 18, 2016 at 5:37 PM, Ville Voutilainen <
ville.voutilainen@gmail.com> wrote:
> On 18 January 2016 at 18:32, Andrew Tomazos <andrewtomazos@gmail.com>
> wrote:
> >> > I have a corpus of 20,000 open source C/C++ projects that are shipping
> >> > and
> >> > packaged totaling 2.5 million source files and 300M sloccount taken
> from
> >> > a
> >> > popular Linux package repository. It includes things like all of Qt,
> >> > boost,
> >> > vtk, cern root, llvm, chromium, mozilla, to just name a tiny few. I
> >> > think
> >>
> >> That's nice.
> >>
> >> > it's sufficiently large enough and unbiased enough sample to
> extrapolate
> >> > aggregates to all C++ code - in most cases at least - and certainly
> the
> >> > ones
> >>
> >> Well, that takes home the prize of the most outrageous statement on
> these
> >> forums
> >> in quite a while.
> > I guess you strongly disagree with my statement, care to say why?
>
>
> I disagree that your corpus is large enough and unbiased enough to
> extrapolate
> anything to all C++ code.
First point, size: how much production C++ code is there under active
development? Can't be much more than 3B lines? A 1% sample is pretty
good. Do you have a different estimate of this number?
Second point, bias: Well it's targeting Linux, but a lot of the code and
libraries are cross-platform. It's open source, but it doesn't look too
different than the proprietary code I've seen.
What am I missing?
--
---
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 https://groups.google.com/a/isocpp.org/group/std-proposals/.
--001a11444c2417f40405299e7ad7
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><br><div class=3D"gmail_extra"><br><div class=3D"gmail_quo=
te">On Mon, Jan 18, 2016 at 5:37 PM, Ville Voutilainen <span dir=3D"ltr">&l=
t;<a href=3D"mailto:ville.voutilainen@gmail.com" target=3D"_blank">ville.vo=
utilainen@gmail.com</a>></span> wrote:<br><blockquote class=3D"gmail_quo=
te" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"=
><span class=3D"">On 18 January 2016 at 18:32, Andrew Tomazos <<a href=
=3D"mailto:andrewtomazos@gmail.com">andrewtomazos@gmail.com</a>> wrote:<=
br>
>> > I have a corpus of 20,000 open source C/C++ projects that are=
shipping<br>
>> > and<br>
>> > packaged totaling 2.5 million source files and 300M sloccount=
taken from<br>
>> > a<br>
>> > popular Linux package repository.=C2=A0 It includes things li=
ke all of Qt,<br>
>> > boost,<br>
>> > vtk, cern root, llvm, chromium, mozilla, to just name a tiny =
few.=C2=A0 I<br>
>> > think<br>
>><br>
>> That's nice.<br>
>><br>
>> > it's sufficiently large enough and unbiased enough sample=
to extrapolate<br>
>> > aggregates to all C++ code - in most cases at least - and cer=
tainly the<br>
>> > ones<br>
>><br>
>> Well, that takes home the prize of the most outrageous statement o=
n these<br>
>> forums<br>
>> in quite a while.<br>
> I guess you strongly disagree with my statement, care to say why?<br>
<br>
<br>
</span>I disagree that your corpus is large enough and unbiased enough to e=
xtrapolate<br>
anything to all C++ code.</blockquote><div><br></div><div>First point, size=
: how much production C++ code is there under active development?=C2=A0 Can=
't be much more than 3B lines?=C2=A0 A 1% sample is pretty good.=C2=A0 =
Do you have a different estimate of this number?</div><div><br></div><div>S=
econd point, bias: Well it's targeting Linux, but a lot of the code and=
libraries are cross-platform.=C2=A0 It's open source, but it doesn'=
;t look too different than the proprietary code I've seen.</div><div><b=
r></div><div>What am I missing?</div><div><br></div><div><br></div></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" 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"https://groups.google.com/a/isocpp.org/group=
/std-proposals/">https://groups.google.com/a/isocpp.org/group/std-proposals=
/</a>.<br />
--001a11444c2417f40405299e7ad7--
.
Author: =?UTF-8?Q?Agust=c3=adn_K-ballo_Berg=c3=a9?= <kaballo86@hotmail.com>
Date: Mon, 18 Jan 2016 13:46:00 -0300
Raw View
On 1/18/2016 1:33 PM, Matthew Woehlke wrote:
> On 2016-01-18 09:45, Agust=C3=ADn K-ballo Berg=C3=A9 wrote:
>> Some people claim to have implemented the library solution for personal
>> use, which would suggest they do use such a facility. Perhaps they do so
>> only outside a range-based for-loop, since that has its merits too, so
>> it would be worth a follow up with them.
>
> Er... huh? The library solution is only usable from *within* a
> range-based for.
How would a library solution be ill-formed when used outside a=20
range-based for? A range of integers is still a range of integers.
Regards,
--=20
Agust=C3=ADn K-ballo Berg=C3=A9.-
http://talesofcpp.fusionfenix.com
--=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 https://groups.google.com/a/isocpp.org/group/std-propos=
als/.
.
Author: Miro Knejp <miro.knejp@gmail.com>
Date: Mon, 18 Jan 2016 17:48:08 +0100
Raw View
This is a multi-part message in MIME format.
--------------060208080109030403000408
Content-Type: text/plain; charset=UTF-8; format=flowed
Am 18.01.2016 um 17:38 schrieb Andrew Tomazos:
>
>
> On Mon, Jan 18, 2016 at 5:33 PM, Matthew Woehlke
> <mwoehlke.floss@gmail.com <mailto:mwoehlke.floss@gmail.com>> wrote:
>
> On 2016-01-18 08:37, Andrew Tomazos wrote:
> > Given the three solutions:
> >
> > 1. for (int i = 0; i < N; ++i)
> > 2. #include <whatever/irange> using whatever::irange; for
> (int i :
> > irange(N))
> > 3. for (int i : N)
> >
> > The evidence suggests [1] is preferred to [2].
>
> Again, I respectfully disagree. [1] has decades of inertia behind it,
> while [2] is new, and only just starting to be an available
> solution in
> many projects.
>
>
> [2] has been available since Range-Based For, which is C++11. We
> would therefore expect to see a significant number of usages of [2]
> relative to [1] in C++11 code if the hypothesis is false.
How much of the 300M sloccount you searched has been written *after* the
respective projects got C++11 support? If your intention is to provided
proof then including code written before the respective projects had
access to C++11 compilers (and were allowed to use the new language) is
bias in your analysis. You also say it's C/C++ code. Well C has no range
based for thus including it additionally skews the result.
--
---
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 https://groups.google.com/a/isocpp.org/group/std-proposals/.
--------------060208080109030403000408
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<html>
<head>
<meta content=3D"text/html; charset=3Dutf-8" http-equiv=3D"Content-Type=
">
</head>
<body bgcolor=3D"#FFFFFF" text=3D"#000000">
Am 18.01.2016 um 17:38 schrieb Andrew Tomazos:<br>
<blockquote
cite=3D"mid:CAB+4KH+4imoB6O9LhjyJ0wtzcV3a0pZrcXfp9wqn04L+ENnhsg@mail.gmail.=
com"
type=3D"cite">
<div dir=3D"ltr"><br>
<div class=3D"gmail_extra"><br>
<div class=3D"gmail_quote">On Mon, Jan 18, 2016 at 5:33 PM,
Matthew Woehlke <span dir=3D"ltr"><<a
moz-do-not-send=3D"true"
href=3D"mailto:mwoehlke.floss@gmail.com" target=3D"_blank">=
<a class=3D"moz-txt-link-abbreviated" href=3D"mailto:mwoehlke.floss@gmail.c=
om">mwoehlke.floss@gmail.com</a></a>></span>
wrote:<br>
<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0
.8ex;border-left:1px #ccc solid;padding-left:1ex"><span
class=3D"">On 2016-01-18 08:37, Andrew Tomazos wrote:<br>
> Given the three solutions:<br>
><br>
>=C2=A0 =C2=A0 1. for (int i =3D 0; i < N; ++i)<br>
>=C2=A0 =C2=A0 2. #include <whatever/irange> using
whatever::irange;=C2=A0 for (int i :<br>
> irange(N))<br>
>=C2=A0 =C2=A0 3. for (int i : N)<br>
><br>
> The evidence suggests [1] is preferred to [2].<br>
<br>
</span>Again, I respectfully disagree. [1] has decades of
inertia behind it,<br>
while [2] is new, and only just starting to be an
available solution in<br>
many projects.<br>
</blockquote>
<div><br>
</div>
<div>[2] has been available since Range-Based For, which is
C++11.=C2=A0 We would therefore expect to see a significant
number of usages of [2] relative to [1] in C++11 code if
the hypothesis is false.</div>
</div>
</div>
</div>
</blockquote>
How much of the 300M sloccount you searched has been written *after*
the respective projects got C++11 support? If your intention is to
provided proof then including code written before the respective
projects had access to C++11 compilers (and were allowed to use the
new language) is bias in your analysis. You also say it's C/C++
code. Well C has no range based for thus including it additionally
skews the result.<br>
</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" 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"https://groups.google.com/a/isocpp.org/group=
/std-proposals/">https://groups.google.com/a/isocpp.org/group/std-proposals=
/</a>.<br />
--------------060208080109030403000408--
.
Author: Matthew Woehlke <mwoehlke.floss@gmail.com>
Date: Mon, 18 Jan 2016 11:49:13 -0500
Raw View
On 2016-01-18 11:38, Andrew Tomazos wrote:
> On Mon, Jan 18, 2016 at 5:33 PM, Matthew Woehlke wrote:
>> On 2016-01-18 08:37, Andrew Tomazos wrote:
>>> Given the three solutions:
>>>
>>> 1. for (int i = 0; i < N; ++i)
>>> 2. #include <whatever/irange> using whatever::irange; for (int i :
>>> irange(N))
>>> 3. for (int i : N)
>>>
>>> The evidence suggests [1] is preferred to [2].
>>
>> Again, I respectfully disagree. [1] has decades of inertia behind it,
>> while [2] is new, and only just starting to be an available solution in
>> many projects.
>
> [2] has been available since Range-Based For, which is C++11. We would
> therefore expect to see a significant number of usages of [2] relative to
> [1] in C++11 code if the hypothesis is false.
And... at least in my projects, this is *exactly what you do see!* Those
that can use C++11 are using a library-based indexrange() with
range-based for.
You've cited a large code base, but have not told us what portion of it
is C++11 aware. (I know that VTK is not, for example, nor is Qt 4, and
Qt 5 is still in the process of transitioning.)
--
Matthew
--
---
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 https://groups.google.com/a/isocpp.org/group/std-proposals/.
.
Author: Ville Voutilainen <ville.voutilainen@gmail.com>
Date: Mon, 18 Jan 2016 18:50:44 +0200
Raw View
On 18 January 2016 at 18:45, Andrew Tomazos <andrewtomazos@gmail.com> wrote:
>> I disagree that your corpus is large enough and unbiased enough to
>> extrapolate
>> anything to all C++ code.
> First point, size: how much production C++ code is there under active
> development? Can't be much more than 3B lines? A 1% sample is pretty good.
> Do you have a different estimate of this number?
You extrapolate to all C++ code from a 1% sample? That sounds bold.
> Second point, bias: Well it's targeting Linux, but a lot of the code and
> libraries are cross-platform. It's open source, but it doesn't look too
Yeah, well, it doesn't include any proprietary code. There's lots of it.
> different than the proprietary code I've seen.
So all of this is purely anecdotal?
--
---
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 https://groups.google.com/a/isocpp.org/group/std-proposals/.
.
Author: Andrew Tomazos <andrewtomazos@gmail.com>
Date: Mon, 18 Jan 2016 17:50:55 +0100
Raw View
--089e01229a7684966605299e8e45
Content-Type: text/plain; charset=UTF-8
On Mon, Jan 18, 2016 at 5:48 PM, Miro Knejp <miro.knejp@gmail.com> wrote:
> Am 18.01.2016 um 17:38 schrieb Andrew Tomazos:
>
>
>
> On Mon, Jan 18, 2016 at 5:33 PM, Matthew Woehlke <
> <mwoehlke.floss@gmail.com>mwoehlke.floss@gmail.com> wrote:
>
>> On 2016-01-18 08:37, Andrew Tomazos wrote:
>> > Given the three solutions:
>> >
>> > 1. for (int i = 0; i < N; ++i)
>> > 2. #include <whatever/irange> using whatever::irange; for (int i :
>> > irange(N))
>> > 3. for (int i : N)
>> >
>> > The evidence suggests [1] is preferred to [2].
>>
>> Again, I respectfully disagree. [1] has decades of inertia behind it,
>> while [2] is new, and only just starting to be an available solution in
>> many projects.
>>
>
> [2] has been available since Range-Based For, which is C++11. We would
> therefore expect to see a significant number of usages of [2] relative to
> [1] in C++11 code if the hypothesis is false.
>
> How much of the 300M sloccount you searched has been written *after* the
> respective projects got C++11 support? If your intention is to provided
> proof then including code written before the respective projects had access
> to C++11 compilers (and were allowed to use the new language) is bias in
> your analysis. You also say it's C/C++ code. Well C has no range based for
> thus including it additionally skews the result.
>
I mean about 20% of the source files are using C++11 features based on the
syntax etc (not based on the compiler flags). But yes, I know what you
mean, and we need to be careful in tracking this when intepreting results.
--
---
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 https://groups.google.com/a/isocpp.org/group/std-proposals/.
--089e01229a7684966605299e8e45
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><br><div class=3D"gmail_extra"><br><div class=3D"gmail_quo=
te">On Mon, Jan 18, 2016 at 5:48 PM, Miro Knejp <span dir=3D"ltr"><<a hr=
ef=3D"mailto:miro.knejp@gmail.com" target=3D"_blank">miro.knejp@gmail.com</=
a>></span> wrote:<br><blockquote class=3D"gmail_quote" style=3D"margin:0=
0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
=20
=20
=20
<div bgcolor=3D"#FFFFFF" text=3D"#000000"><span class=3D"">
Am 18.01.2016 um 17:38 schrieb Andrew Tomazos:<br>
<blockquote type=3D"cite">
<div dir=3D"ltr"><br>
<div class=3D"gmail_extra"><br>
<div class=3D"gmail_quote">On Mon, Jan 18, 2016 at 5:33 PM,
Matthew Woehlke <span dir=3D"ltr"><<a href=3D"mailto:mwoehlk=
e.floss@gmail.com" target=3D"_blank"></a><a href=3D"mailto:mwoehlke.floss@g=
mail.com" target=3D"_blank">mwoehlke.floss@gmail.com</a>></span>
wrote:<br>
<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;bo=
rder-left:1px #ccc solid;padding-left:1ex"><span>On 2016-01-18 08:37, Andre=
w Tomazos wrote:<br>
> Given the three solutions:<br>
><br>
>=C2=A0 =C2=A0 1. for (int i =3D 0; i < N; ++i)<br>
>=C2=A0 =C2=A0 2. #include <whatever/irange> using
whatever::irange;=C2=A0 for (int i :<br>
> irange(N))<br>
>=C2=A0 =C2=A0 3. for (int i : N)<br>
><br>
> The evidence suggests [1] is preferred to [2].<br>
<br>
</span>Again, I respectfully disagree. [1] has decades of
inertia behind it,<br>
while [2] is new, and only just starting to be an
available solution in<br>
many projects.<br>
</blockquote>
<div><br>
</div>
<div>[2] has been available since Range-Based For, which is
C++11.=C2=A0 We would therefore expect to see a significant
number of usages of [2] relative to [1] in C++11 code if
the hypothesis is false.</div>
</div>
</div>
</div>
</blockquote></span>
How much of the 300M sloccount you searched has been written *after*
the respective projects got C++11 support? If your intention is to
provided proof then including code written before the respective
projects had access to C++11 compilers (and were allowed to use the
new language) is bias in your analysis. You also say it's C/C++
code. Well C has no range based for thus including it additionally
skews the result.</div></blockquote><div><br></div><div>I mean about 20=
% of the source files are using C++11 features based on the syntax etc (not=
based on the compiler flags).=C2=A0 But yes, I know what you mean, and we =
need to be careful in tracking this when intepreting results.</div><div><br=
></div></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" 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"https://groups.google.com/a/isocpp.org/group=
/std-proposals/">https://groups.google.com/a/isocpp.org/group/std-proposals=
/</a>.<br />
--089e01229a7684966605299e8e45--
.
Author: Matthew Woehlke <mwoehlke.floss@gmail.com>
Date: Mon, 18 Jan 2016 11:54:25 -0500
Raw View
On 2016-01-18 11:46, Agust=C3=ADn K-ballo Berg=C3=A9 wrote:
> On 1/18/2016 1:33 PM, Matthew Woehlke wrote:
>> On 2016-01-18 09:45, Agust=C3=ADn K-ballo Berg=C3=A9 wrote:
>>> Some people claim to have implemented the library solution for personal
>>> use, which would suggest they do use such a facility. Perhaps they do s=
o
>>> only outside a range-based for-loop, since that has its merits too, so
>>> it would be worth a follow up with them.
>>
>> Er... huh? The library solution is only usable from *within* a
>> range-based for.
>=20
> How would a library solution be ill-formed when used outside a
> range-based for? A range of integers is still a range of integers.
Maybe I misunderstand. Do you mean *entirely outside of a for loop*?
Because I don't see how you would use an index range inside a
traditional for loop=C2=B9.
All my uses are in for loops; necessarily, range-based for loops or
equivalents. Rather the opposite of "only *outside* a range-based
for-loop" (emphasis added).
(=C2=B9 Well... you could use it in a traditional for loop that *emulates* =
a
range-based for loop. Which, yeah, is possible, but not something done
without a moderately complicated macro such as VITAL_FOREACH,
BOOST_FOREACH, Q_FOREACH, etc.)
--=20
Matthew
--=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 https://groups.google.com/a/isocpp.org/group/std-propos=
als/.
.
Author: Andrew Tomazos <andrewtomazos@gmail.com>
Date: Mon, 18 Jan 2016 17:55:33 +0100
Raw View
--089e013cc3140c1adb05299e9f31
Content-Type: text/plain; charset=UTF-8
On Mon, Jan 18, 2016 at 5:50 PM, Ville Voutilainen <
ville.voutilainen@gmail.com> wrote:
> On 18 January 2016 at 18:45, Andrew Tomazos <andrewtomazos@gmail.com>
> wrote:
> >> I disagree that your corpus is large enough and unbiased enough to
> >> extrapolate
> >> anything to all C++ code.
> > First point, size: how much production C++ code is there under active
> > development? Can't be much more than 3B lines? A 1% sample is pretty
> good.
> > Do you have a different estimate of this number?
>
> You extrapolate to all C++ code from a 1% sample? That sounds bold.
A 1% sample of such a large population delivers a lot of confidence, yes.
> Second point, bias: Well it's targeting Linux, but a lot of the code and
> > libraries are cross-platform. It's open source, but it doesn't look too
>
> Yeah, well, it doesn't include any proprietary code. There's lots of it.
>
> > different than the proprietary code I've seen.
>
> So all of this is purely anecdotal?
Getting a perfectly random sample of all C++ code is impossible - so yes,
we have to make certain assumptions. I think the assumption that shipping
"production" open source code is representative of propretiary code is not
completely bold - considering a lot of the code was propretiary and then
open sourced for business reasons that I wouldnt expect to bias the sample.
--
---
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 https://groups.google.com/a/isocpp.org/group/std-proposals/.
--089e013cc3140c1adb05299e9f31
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><br><div class=3D"gmail_extra"><br><div class=3D"gmail_quo=
te">On Mon, Jan 18, 2016 at 5:50 PM, Ville Voutilainen <span dir=3D"ltr">&l=
t;<a href=3D"mailto:ville.voutilainen@gmail.com" target=3D"_blank">ville.vo=
utilainen@gmail.com</a>></span> wrote:<br><blockquote class=3D"gmail_quo=
te" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"=
><span class=3D"">On 18 January 2016 at 18:45, Andrew Tomazos <<a href=
=3D"mailto:andrewtomazos@gmail.com">andrewtomazos@gmail.com</a>> wrote:<=
br>
>> I disagree that your corpus is large enough and unbiased enough to=
<br>
>> extrapolate<br>
>> anything to all C++ code.<br>
> First point, size: how much production C++ code is there under active<=
br>
> development?=C2=A0 Can't be much more than 3B lines?=C2=A0 A 1% sa=
mple is pretty good.<br>
> Do you have a different estimate of this number?<br>
<br>
</span>You extrapolate to all C++ code from a 1% sample? That sounds bold.<=
/blockquote><div><br></div><div>A 1% sample of such a large population deli=
vers a lot of confidence, yes.</div><div><br></div><blockquote class=3D"gma=
il_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-lef=
t:1ex"><span class=3D"">
> Second point, bias: Well it's targeting Linux, but a lot of the co=
de and<br>
> libraries are cross-platform.=C2=A0 It's open source, but it doesn=
't look too<br>
<br>
</span>Yeah, well, it doesn't include any proprietary code. There's=
lots of it.<br>
<span class=3D""><br>
> different than the proprietary code I've seen.<br>
<br>
</span>So all of this is purely anecdotal?</blockquote><div><br></div><div>=
Getting a perfectly random sample of all C++ code is impossible - so yes, w=
e have to make certain assumptions.=C2=A0 I think the assumption that shipp=
ing "production" open source code is representative of propretiar=
y code is not completely bold - considering a lot of the code was propretia=
ry and then open sourced for business reasons that I wouldnt expect to bias=
the sample.</div><div><br></div></div><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" 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"https://groups.google.com/a/isocpp.org/group=
/std-proposals/">https://groups.google.com/a/isocpp.org/group/std-proposals=
/</a>.<br />
--089e013cc3140c1adb05299e9f31--
.
Author: Ville Voutilainen <ville.voutilainen@gmail.com>
Date: Mon, 18 Jan 2016 18:58:09 +0200
Raw View
On 18 January 2016 at 18:43, Matthew Woehlke <mwoehlke.floss@gmail.com> wrote:
> On 2016-01-18 11:19, Nicol Bolas wrote:
>> On Monday, January 18, 2016 at 10:45:08 AM UTC-5, Matthew Woehlke wrote:
>>> Do you propose this as a library feature or a language feature? (Yes, a
>>> library solution, even for the syntax as written, is possible! See
>>> attached.)
>>
>> Ideaone doesn't seem to like your code very much <http://ideone.com/NnTJHN>.
>
> That's... interesting. It's fine on GCC 4.8 (https://goo.gl/uTl1VK), but
> not 4.9 or clang. Apparently I don't grok the look-up rules for 'begin'
> in this context. I'm not sure that can't be remedied without a language
> change, though?
The rules for range-for changed at the very end of the C++11
standardization process.
Your begin/end for int will not be found. gcc 4.8 uses the draft
semantics from pre-standard
time.
--
---
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 https://groups.google.com/a/isocpp.org/group/std-proposals/.
.
Author: Ville Voutilainen <ville.voutilainen@gmail.com>
Date: Mon, 18 Jan 2016 19:01:45 +0200
Raw View
On 18 January 2016 at 18:55, Andrew Tomazos <andrewtomazos@gmail.com> wrote:
>> So all of this is purely anecdotal?
> Getting a perfectly random sample of all C++ code is impossible - so yes, we
> have to make certain assumptions. I think the assumption that shipping
> "production" open source code is representative of propretiary code is not
> completely bold - considering a lot of the code was propretiary and then
> open sourced for business reasons that I wouldnt expect to bias the sample.
Perhaps the first assumption that should be made is that when looking at such
a 1% sample, and not finding uses of certain library facilities or
their equivalents,
is to not think that such a lack of hits in a 1% sample proves
anything to anyone.
Calling that "evidence" is ridiculous.
--
---
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 https://groups.google.com/a/isocpp.org/group/std-proposals/.
.
Author: Miro Knejp <miro.knejp@gmail.com>
Date: Mon, 18 Jan 2016 18:03:47 +0100
Raw View
This is a multi-part message in MIME format.
--------------010002000107050606090800
Content-Type: text/plain; charset=UTF-8; format=flowed
Am 18.01.2016 um 17:45 schrieb Andrew Tomazos:
>
>
> On Mon, Jan 18, 2016 at 5:37 PM, Ville Voutilainen
> <ville.voutilainen@gmail.com <mailto:ville.voutilainen@gmail.com>> wrote:
>
> On 18 January 2016 at 18:32, Andrew Tomazos
> <andrewtomazos@gmail.com <mailto:andrewtomazos@gmail.com>> wrote:
> >> > I have a corpus of 20,000 open source C/C++ projects that are
> shipping
> >> > and
> >> > packaged totaling 2.5 million source files and 300M sloccount
> taken from
> >> > a
> >> > popular Linux package repository. It includes things like
> all of Qt,
> >> > boost,
> >> > vtk, cern root, llvm, chromium, mozilla, to just name a tiny
> few. I
> >> > think
> >>
> >> That's nice.
> >>
> >> > it's sufficiently large enough and unbiased enough sample to
> extrapolate
> >> > aggregates to all C++ code - in most cases at least - and
> certainly the
> >> > ones
> >>
> >> Well, that takes home the prize of the most outrageous
> statement on these
> >> forums
> >> in quite a while.
> > I guess you strongly disagree with my statement, care to say why?
>
>
> I disagree that your corpus is large enough and unbiased enough to
> extrapolate
> anything to all C++ code.
>
>
> First point, size: how much production C++ code is there under active
> development? Can't be much more than 3B lines? A 1% sample is pretty
> good. Do you have a different estimate of this number?
>
> Second point, bias: Well it's targeting Linux, but a lot of the code
> and libraries are cross-platform. It's open source, but it doesn't
> look too different than the proprietary code I've seen.
>
> What am I missing?
All the proprietary code out there in the wild of which nobody in the
world knows how much there is, how much is actively developed, what
language version it's using (due to portability), or what policies the
coding guidelines enforce. So your 3B estimate (or anyone else's
estimate) is just pointless.
--
---
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 https://groups.google.com/a/isocpp.org/group/std-proposals/.
--------------010002000107050606090800
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<html>
<head>
<meta content=3D"text/html; charset=3Dutf-8" http-equiv=3D"Content-Type=
">
</head>
<body bgcolor=3D"#FFFFFF" text=3D"#000000">
Am 18.01.2016 um 17:45 schrieb Andrew Tomazos:<br>
<blockquote
cite=3D"mid:CAB+4KHK9i5sfG=3Dn1iP88JukjCL8SOpjgWonJ1yoZSeZ1dQno+A@mail.gmai=
l.com"
type=3D"cite">
<div dir=3D"ltr"><br>
<div class=3D"gmail_extra"><br>
<div class=3D"gmail_quote">On Mon, Jan 18, 2016 at 5:37 PM,
Ville Voutilainen <span dir=3D"ltr"><<a
moz-do-not-send=3D"true"
href=3D"mailto:ville.voutilainen@gmail.com"
target=3D"_blank"><a class=3D"moz-txt-link-abbreviated" hre=
f=3D"mailto:ville.voutilainen@gmail.com">ville.voutilainen@gmail.com</a></a=
>></span>
wrote:<br>
<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0
.8ex;border-left:1px #ccc solid;padding-left:1ex"><span
class=3D"">On 18 January 2016 at 18:32, Andrew Tomazos
<<a moz-do-not-send=3D"true"
href=3D"mailto:andrewtomazos@gmail.com">andrewtomazos@gma=
il.com</a>>
wrote:<br>
>> > I have a corpus of 20,000 open source
C/C++ projects that are shipping<br>
>> > and<br>
>> > packaged totaling 2.5 million source files
and 300M sloccount taken from<br>
>> > a<br>
>> > popular Linux package repository.=C2=A0 It
includes things like all of Qt,<br>
>> > boost,<br>
>> > vtk, cern root, llvm, chromium, mozilla,
to just name a tiny few.=C2=A0 I<br>
>> > think<br>
>><br>
>> That's nice.<br>
>><br>
>> > it's sufficiently large enough and
unbiased enough sample to extrapolate<br>
>> > aggregates to all C++ code - in most cases
at least - and certainly the<br>
>> > ones<br>
>><br>
>> Well, that takes home the prize of the most
outrageous statement on these<br>
>> forums<br>
>> in quite a while.<br>
> I guess you strongly disagree with my statement,
care to say why?<br>
<br>
<br>
</span>I disagree that your corpus is large enough and
unbiased enough to extrapolate<br>
anything to all C++ code.</blockquote>
<div><br>
</div>
<div>First point, size: how much production C++ code is
there under active development?=C2=A0 Can't be much more than
3B lines?=C2=A0 A 1% sample is pretty good.=C2=A0 Do you have=
a
different estimate of this number?</div>
<div><br>
</div>
<div>Second point, bias: Well it's targeting Linux, but a
lot of the code and libraries are cross-platform.=C2=A0 It's
open source, but it doesn't look too different than the
proprietary code I've seen.</div>
<div><br>
</div>
<div>What am I missing?<br>
</div>
</div>
</div>
</div>
</blockquote>
All the proprietary code out there in the wild of which nobody in
the world knows how much there is, how much is actively developed,
what language version it's using (due to portability), or what
policies the coding guidelines enforce. So your 3B estimate (or
anyone else's estimate) is just pointless.<br>
</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" 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"https://groups.google.com/a/isocpp.org/group=
/std-proposals/">https://groups.google.com/a/isocpp.org/group/std-proposals=
/</a>.<br />
--------------010002000107050606090800--
.
Author: =?UTF-8?Q?Agust=c3=adn_K-ballo_Berg=c3=a9?= <kaballo86@hotmail.com>
Date: Mon, 18 Jan 2016 14:11:38 -0300
Raw View
On 1/18/2016 1:54 PM, Matthew Woehlke wrote:
> On 2016-01-18 11:46, Agust=C3=ADn K-ballo Berg=C3=A9 wrote:
>> On 1/18/2016 1:33 PM, Matthew Woehlke wrote:
>>> On 2016-01-18 09:45, Agust=C3=ADn K-ballo Berg=C3=A9 wrote:
>>>> Some people claim to have implemented the library solution for persona=
l
>>>> use, which would suggest they do use such a facility. Perhaps they do =
so
>>>> only outside a range-based for-loop, since that has its merits too, so
>>>> it would be worth a follow up with them.
>>>
>>> Er... huh? The library solution is only usable from *within* a
>>> range-based for.
>>
>> How would a library solution be ill-formed when used outside a
>> range-based for? A range of integers is still a range of integers.
>
> Maybe I misunderstand. Do you mean *entirely outside of a for loop*?
> Because I don't see how you would use an index range inside a
> traditional for loop=C2=B9.
I mean in any place where you would use a range.
Regards,
--=20
Agust=C3=ADn K-ballo Berg=C3=A9.-
http://talesofcpp.fusionfenix.com
--=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 https://groups.google.com/a/isocpp.org/group/std-propos=
als/.
.
Author: Andrew Tomazos <andrewtomazos@gmail.com>
Date: Mon, 18 Jan 2016 18:21:55 +0100
Raw View
--001a114242a457d0a105299efd74
Content-Type: text/plain; charset=UTF-8
On Mon, Jan 18, 2016 at 6:01 PM, Ville Voutilainen <
ville.voutilainen@gmail.com> wrote:
> On 18 January 2016 at 18:55, Andrew Tomazos <andrewtomazos@gmail.com>
> wrote:
> >> So all of this is purely anecdotal?
> > Getting a perfectly random sample of all C++ code is impossible - so
> yes, we
> > have to make certain assumptions. I think the assumption that shipping
> > "production" open source code is representative of propretiary code is
> not
> > completely bold - considering a lot of the code was propretiary and then
> > open sourced for business reasons that I wouldnt expect to bias the
> sample.
>
>
> Perhaps the first assumption that should be made is that when looking at
> such
> a 1% sample, and not finding uses of certain library facilities or
> their equivalents,
> is to not think that such a lack of hits in a 1% sample proves
> anything to anyone.
> Calling that "evidence" is ridiculous.
>
Sorry, but that is plain wrong. Extrapolating from a sample is a standard
scientific method used in all kinds of fields. We can even calculate a
confidence interval. Given a random 1% sample of 3B balls, finding that
none of the sample are red, we can say that the probability that less than
X% of the population are red is Y% - for various pairs of X,Y. When X is
very low and Y is very high, it should sway any rational person.
--
---
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 https://groups.google.com/a/isocpp.org/group/std-proposals/.
--001a114242a457d0a105299efd74
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><br><div class=3D"gmail_extra"><br><div class=3D"gmail_quo=
te">On Mon, Jan 18, 2016 at 6:01 PM, Ville Voutilainen <span dir=3D"ltr">&l=
t;<a href=3D"mailto:ville.voutilainen@gmail.com" target=3D"_blank">ville.vo=
utilainen@gmail.com</a>></span> wrote:<br><blockquote class=3D"gmail_quo=
te" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"=
>On 18 January 2016 at 18:55, Andrew Tomazos <<a href=3D"mailto:andrewto=
mazos@gmail.com">andrewtomazos@gmail.com</a>> wrote:<br>
>> So all of this is purely anecdotal?<br>
> Getting a perfectly random sample of all C++ code is impossible - so y=
es, we<br>
> have to make certain assumptions.=C2=A0 I think the assumption that sh=
ipping<br>
> "production" open source code is representative of propretia=
ry code is not<br>
> completely bold - considering a lot of the code was propretiary and th=
en<br>
> open sourced for business reasons that I wouldnt expect to bias the sa=
mple.<br>
<br>
<br>
Perhaps the first assumption that should be made is that when looking at su=
ch<br>
a 1% sample, and not finding uses of certain library facilities or<br>
their equivalents,<br>
is to not think that such a lack of hits in a 1% sample proves<br>
anything to anyone.<br>
Calling that "evidence" is ridiculous.<br></blockquote><div><br><=
/div><div>Sorry, but that is plain wrong.=C2=A0 Extrapolating from a sample=
is a standard scientific method used in all kinds of fields.=C2=A0 We can =
even calculate a confidence interval.=C2=A0 Given a random 1% sample of 3B =
balls, finding that none of the sample are red, we can say that the probabi=
lity that less than X% of the population are red is Y% - for various pairs =
of X,Y.=C2=A0 When X is very low and Y is very high, it should sway any rat=
ional person.</div><div><br></div></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" 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"https://groups.google.com/a/isocpp.org/group=
/std-proposals/">https://groups.google.com/a/isocpp.org/group/std-proposals=
/</a>.<br />
--001a114242a457d0a105299efd74--
.
Author: Ville Voutilainen <ville.voutilainen@gmail.com>
Date: Mon, 18 Jan 2016 20:02:23 +0200
Raw View
On 18 January 2016 at 19:21, Andrew Tomazos <andrewtomazos@gmail.com> wrote:
> Sorry, but that is plain wrong. Extrapolating from a sample is a standard
> scientific method used in all kinds of fields. We can even calculate a
Yes, especially in fields where the sample supports a theory that
makes predictions,
which is hardly the case here.
> confidence interval. Given a random 1% sample of 3B balls, finding that
> none of the sample are red, we can say that the probability that less than
> X% of the population are red is Y% - for various pairs of X,Y. When X is
> very low and Y is very high, it should sway any rational person.
Well, you're certainly more than welcome to continue arguing that your sample
'proves' that "people wouldn't use a library facility, because it
requires an include".
I don't think that will have the effect you want it to have.
--
---
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 https://groups.google.com/a/isocpp.org/group/std-proposals/.
.
Author: Andrew Tomazos <andrewtomazos@gmail.com>
Date: Mon, 18 Jan 2016 19:16:21 +0100
Raw View
--001a1141997408029805299fc0c5
Content-Type: text/plain; charset=UTF-8
On Mon, Jan 18, 2016 at 7:02 PM, Ville Voutilainen <
ville.voutilainen@gmail.com> wrote:
> On 18 January 2016 at 19:21, Andrew Tomazos <andrewtomazos@gmail.com>
> wrote:
> > Sorry, but that is plain wrong. Extrapolating from a sample is a
> standard
> > scientific method used in all kinds of fields. We can even calculate a
>
> Yes, especially in fields where the sample supports a theory that
> makes predictions,
> which is hardly the case here.
>
> > confidence interval. Given a random 1% sample of 3B balls, finding that
> > none of the sample are red, we can say that the probability that less
> than
> > X% of the population are red is Y% - for various pairs of X,Y. When X is
> > very low and Y is very high, it should sway any rational person.
>
> Well, you're certainly more than welcome to continue arguing that your
> sample
> 'proves' that "people wouldn't use a library facility, because it
> requires an include".
> I don't think that will have the effect you want it to have.
>
>
If I find a very large number of Range-Based For Loops (showing prevelence
of C++11 use), a very large number of `for (int i = 0; i < n; ++i)` loops
and virtually no irange-style for loops `for (int i : irange(N))` or
similar, we can confidently conclude that people prefer `for (int i = 0; i
< n; ++i)` to `for (int i : irange(N))`. That would be a completely
reasonable and uncontroversial conclusion from the data.
--
---
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 https://groups.google.com/a/isocpp.org/group/std-proposals/.
--001a1141997408029805299fc0c5
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><br><div class=3D"gmail_extra"><br><div class=3D"gmail_quo=
te">On Mon, Jan 18, 2016 at 7:02 PM, Ville Voutilainen <span dir=3D"ltr">&l=
t;<a href=3D"mailto:ville.voutilainen@gmail.com" target=3D"_blank">ville.vo=
utilainen@gmail.com</a>></span> wrote:<br><blockquote class=3D"gmail_quo=
te" style=3D"margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-col=
or:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><span class=
=3D"">On 18 January 2016 at 19:21, Andrew Tomazos <<a href=3D"mailto:and=
rewtomazos@gmail.com">andrewtomazos@gmail.com</a>> wrote:<br>
> Sorry, but that is plain wrong.=C2=A0 Extrapolating from a sample is a=
standard<br>
> scientific method used in all kinds of fields.=C2=A0 We can even calcu=
late a<br>
<br>
</span>Yes, especially in fields where the sample supports a theory that<br=
>
makes predictions,<br>
which is hardly the case here.<br>
<span class=3D""><br>
> confidence interval.=C2=A0 Given a random 1% sample of 3B balls, findi=
ng that<br>
> none of the sample are red, we can say that the probability that less =
than<br>
> X% of the population are red is Y% - for various pairs of X,Y.=C2=A0 W=
hen X is<br>
> very low and Y is very high, it should sway any rational person.<br>
<br>
</span>Well, you're certainly more than welcome to continue arguing tha=
t your sample<br>
'proves' that "people wouldn't use a library facility, bec=
ause it<br>
requires an include".<br>
I don't think that will have the effect you want it to have.<br>
<div class=3D""><div class=3D"h5"><br></div></div></blockquote><div><br></d=
iv><div>If I find a very large number of Range-Based For Loops (showing pre=
velence of C++11 use), a very large number of `for (int i =3D 0; i < n; =
++i)` loops and virtually no irange-style for loops `for (int i : irange(N)=
)` or similar, we can confidently conclude that people prefer `for (int i =
=3D 0; i < n; ++i)` to `for (int i : irange(N))`.=C2=A0 That would be a =
completely reasonable and uncontroversial conclusion from the data.</div></=
div><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" 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"https://groups.google.com/a/isocpp.org/group=
/std-proposals/">https://groups.google.com/a/isocpp.org/group/std-proposals=
/</a>.<br />
--001a1141997408029805299fc0c5--
.
Author: Ville Voutilainen <ville.voutilainen@gmail.com>
Date: Mon, 18 Jan 2016 20:25:56 +0200
Raw View
On 18 January 2016 at 20:16, Andrew Tomazos <andrewtomazos@gmail.com> wrote:
> If I find a very large number of Range-Based For Loops (showing prevelence
> of C++11 use), a very large number of `for (int i = 0; i < n; ++i)` loops
> and virtually no irange-style for loops `for (int i : irange(N))` or
> similar, we can confidently conclude that people prefer `for (int i = 0; i <
> n; ++i)` to `for (int i : irange(N))`. That would be a completely
> reasonable and uncontroversial conclusion from the data.
If you want that to be an even remotely close to an uncontroversial conclusion,
you're going to look at only the projects that use both C++11 and
boost (in order to make
sure an 'irange' is available to begin with). That combination
is even smaller than your 1% sample, so you can call it "reasonable
and uncontroversial"
all you want, but that insistence doesn't make it so. But, again, if you want to
rely on these findings to attempt to provide motivation for a language
proposal, by
all means, it's not like I can convince you to avoid questionable motivation.
--
---
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 https://groups.google.com/a/isocpp.org/group/std-proposals/.
.
Author: Sam Kellett <samkellett@gmail.com>
Date: Mon, 18 Jan 2016 18:27:28 +0000
Raw View
--001a11401574c92fa405299fe7c7
Content-Type: text/plain; charset=UTF-8
On 18 January 2016 at 18:16, Andrew Tomazos <andrewtomazos@gmail.com> wrote:
>
>
> On Mon, Jan 18, 2016 at 7:02 PM, Ville Voutilainen <
> ville.voutilainen@gmail.com> wrote:
>
>> On 18 January 2016 at 19:21, Andrew Tomazos <andrewtomazos@gmail.com>
>> wrote:
>> > Sorry, but that is plain wrong. Extrapolating from a sample is a
>> standard
>> > scientific method used in all kinds of fields. We can even calculate a
>>
>> Yes, especially in fields where the sample supports a theory that
>> makes predictions,
>> which is hardly the case here.
>>
>> > confidence interval. Given a random 1% sample of 3B balls, finding that
>> > none of the sample are red, we can say that the probability that less
>> than
>> > X% of the population are red is Y% - for various pairs of X,Y. When X
>> is
>> > very low and Y is very high, it should sway any rational person.
>>
>> Well, you're certainly more than welcome to continue arguing that your
>> sample
>> 'proves' that "people wouldn't use a library facility, because it
>> requires an include".
>> I don't think that will have the effect you want it to have.
>>
>>
> If I find a very large number of Range-Based For Loops (showing prevelence
> of C++11 use), a very large number of `for (int i = 0; i < n; ++i)` loops
> and virtually no irange-style for loops `for (int i : irange(N))` or
> similar, we can confidently conclude that people prefer `for (int i = 0; i
> < n; ++i)` to `for (int i : irange(N))`. That would be a completely
> reasonable and uncontroversial conclusion from the data.
>
what percentage of projects that include at least one boost header also
includes an irange use? same question for any other library that has a
numeric range function.
how many old school for loops were committed after the point that that
project moved to c++11? what's the ratio of new vs old vs range style in
recent commits?
which for-loop do style guides of prominent open source projects recommend
new code to use?
how many projects have implemented something like matthew's solution? it
seems fair to reason that if this was desired, and is possible without a
language feature, then people would be doing it, no?
--
---
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 https://groups.google.com/a/isocpp.org/group/std-proposals/.
--001a11401574c92fa405299fe7c7
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><br><div class=3D"gmail_extra"><br><div class=3D"gmail_quo=
te">On 18 January 2016 at 18:16, Andrew Tomazos <span dir=3D"ltr"><<a hr=
ef=3D"mailto:andrewtomazos@gmail.com" target=3D"_blank">andrewtomazos@gmail=
..com</a>></span> wrote:<br><blockquote class=3D"gmail_quote" style=3D"ma=
rgin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"lt=
r"><br><div class=3D"gmail_extra"><br><div class=3D"gmail_quote"><span>On M=
on, Jan 18, 2016 at 7:02 PM, Ville Voutilainen <span dir=3D"ltr"><<a hre=
f=3D"mailto:ville.voutilainen@gmail.com" target=3D"_blank">ville.voutilaine=
n@gmail.com</a>></span> wrote:<br><blockquote class=3D"gmail_quote" styl=
e=3D"margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(2=
04,204,204);border-left-style:solid;padding-left:1ex"><span>On 18 January 2=
016 at 19:21, Andrew Tomazos <<a href=3D"mailto:andrewtomazos@gmail.com"=
target=3D"_blank">andrewtomazos@gmail.com</a>> wrote:<br>
> Sorry, but that is plain wrong.=C2=A0 Extrapolating from a sample is a=
standard<br>
> scientific method used in all kinds of fields.=C2=A0 We can even calcu=
late a<br>
<br>
</span>Yes, especially in fields where the sample supports a theory that<br=
>
makes predictions,<br>
which is hardly the case here.<br>
<span><br>
> confidence interval.=C2=A0 Given a random 1% sample of 3B balls, findi=
ng that<br>
> none of the sample are red, we can say that the probability that less =
than<br>
> X% of the population are red is Y% - for various pairs of X,Y.=C2=A0 W=
hen X is<br>
> very low and Y is very high, it should sway any rational person.<br>
<br>
</span>Well, you're certainly more than welcome to continue arguing tha=
t your sample<br>
'proves' that "people wouldn't use a library facility, bec=
ause it<br>
requires an include".<br>
I don't think that will have the effect you want it to have.<br>
<div><div><br></div></div></blockquote><div><br></div></span><div>If I find=
a very large number of Range-Based For Loops (showing prevelence of C++11 =
use), a very large number of `for (int i =3D 0; i < n; ++i)` loops and v=
irtually no irange-style for loops `for (int i : irange(N))` or similar, we=
can confidently conclude that people prefer `for (int i =3D 0; i < n; +=
+i)` to `for (int i : irange(N))`.=C2=A0 That would be a completely reasona=
ble and uncontroversial conclusion from the data.</div></div></div></div></=
blockquote><div><br></div><div>what percentage of projects that include at =
least one boost header also includes an irange use? same question for any o=
ther library that has a numeric range function.<br><br></div><div>how many =
old school for loops were committed after the point that that project moved=
to c++11? what's the ratio of new vs old vs range style in recent comm=
its?<br><br></div><div>which for-loop do style guides of prominent open sou=
rce projects recommend new code to use? <br><br></div><div>how many project=
s have implemented something like matthew's solution? it seems fair to =
reason that if this was desired, and is possible without a language feature=
, then people would be doing it, no?<br></div></div><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" 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"https://groups.google.com/a/isocpp.org/group=
/std-proposals/">https://groups.google.com/a/isocpp.org/group/std-proposals=
/</a>.<br />
--001a11401574c92fa405299fe7c7--
.
Author: =?UTF-8?Q?Agust=c3=adn_K-ballo_Berg=c3=a9?= <kaballo86@hotmail.com>
Date: Mon, 18 Jan 2016 15:41:38 -0300
Raw View
On 1/18/2016 3:16 PM, Andrew Tomazos wrote:
>
>
> On Mon, Jan 18, 2016 at 7:02 PM, Ville Voutilainen
> <ville.voutilainen@gmail.com <mailto:ville.voutilainen@gmail.com>> wrote:
>
> On 18 January 2016 at 19:21, Andrew Tomazos <andrewtomazos@gmail.com
> <mailto:andrewtomazos@gmail.com>> wrote:
> > Sorry, but that is plain wrong. Extrapolating from a sample is a s=
tandard
> > scientific method used in all kinds of fields. We can even calcula=
te a
>
> Yes, especially in fields where the sample supports a theory that
> makes predictions,
> which is hardly the case here.
>
> > confidence interval. Given a random 1% sample of 3B balls, finding=
that
> > none of the sample are red, we can say that the probability that le=
ss than
> > X% of the population are red is Y% - for various pairs of X,Y. Whe=
n X is
> > very low and Y is very high, it should sway any rational person.
>
> Well, you're certainly more than welcome to continue arguing that
> your sample
> 'proves' that "people wouldn't use a library facility, because it
> requires an include".
> I don't think that will have the effect you want it to have.
>
>
> If I find a very large number of Range-Based For Loops (showing
> prevelence of C++11 use), a very large number of `for (int i =3D 0; i < n=
;
> ++i)` loops and virtually no irange-style for loops `for (int i :
> irange(N))` or similar, we can confidently conclude that people prefer
> `for (int i =3D 0; i < n; ++i)` to `for (int i : irange(N))`. That would
> be a completely reasonable and uncontroversial conclusion from the data.
How do you conclude that the motivation behind this is "preference"?
Again, I would interpret this data as lack of interest in the=20
index-based for-loop proposal.
Regards,
--=20
Agust=C3=ADn K-ballo Berg=C3=A9.-
http://talesofcpp.fusionfenix.com
--=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 https://groups.google.com/a/isocpp.org/group/std-propos=
als/.
.
Author: Andrew Tomazos <andrewtomazos@gmail.com>
Date: Mon, 18 Jan 2016 22:35:06 +0100
Raw View
--001a1147dc98cd27000529a28656
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
On Mon, Jan 18, 2016 at 7:41 PM, Agust=C3=ADn K-ballo Berg=C3=A9 <
kaballo86@hotmail.com> wrote:
> On 1/18/2016 3:16 PM, Andrew Tomazos wrote:
>
>> On Mon, Jan 18, 2016 at 7:02 PM, Ville Voutilainen
>> <ville.voutilainen@gmail.com <mailto:ville.voutilainen@gmail.com>> wrote=
:
>>
>> On 18 January 2016 at 19:21, Andrew Tomazos <andrewtomazos@gmail.com
>> <mailto:andrewtomazos@gmail.com>> wrote:
>> > Sorry, but that is plain wrong. Extrapolating from a sample is a
>> standard
>> > scientific method used in all kinds of fields. We can even
>> calculate a
>>
>> Yes, especially in fields where the sample supports a theory that
>> makes predictions,
>> which is hardly the case here.
>>
>> > confidence interval. Given a random 1% sample of 3B balls, findin=
g
>> that
>> > none of the sample are red, we can say that the probability that
>> less than
>> > X% of the population are red is Y% - for various pairs of X,Y.
>> When X is
>> > very low and Y is very high, it should sway any rational person.
>>
>> Well, you're certainly more than welcome to continue arguing that
>> your sample
>> 'proves' that "people wouldn't use a library facility, because it
>> requires an include".
>> I don't think that will have the effect you want it to have.
>>
>>
>> If I find a very large number of Range-Based For Loops (showing
>> prevelence of C++11 use), a very large number of `for (int i =3D 0; i < =
n;
>> ++i)` loops and virtually no irange-style for loops `for (int i :
>> irange(N))` or similar, we can confidently conclude that people prefer
>> `for (int i =3D 0; i < n; ++i)` to `for (int i : irange(N))`. That woul=
d
>> be a completely reasonable and uncontroversial conclusion from the data.
>>
>
> How do you conclude that the motivation behind this is "preference"?
>
The possibility of implementing and using an irange-style library solution
`for (int i : irange(N))` came about with Range-Based For Loops. Assuming
the above data, it shows that people chose not to implement and use such a
solution, and instead continued using `for (int i =3D 0; i < N; i++)`. Wha=
t
other explanation is there, other than they prefer the latter for some
reason? (As discussed previously, the reason I speculate for this
preference is the verbosity and library overhead.)
> Again, I would interpret this data as lack of interest in the index-based
> for-loop proposal.
>
Let's conduct a little thought experiment: Assume that the core language
solution index-based for loop `for (int i : N)` was adopted as proposed,
and that after it has been implemented in your C++ compiler, you were going
to write a for loop for an index sequence. Would you write `for (int i =3D
0; i < N; ++i)` or would you write `for (int i : N)`? I think most people
would write the latter.
--=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 https://groups.google.com/a/isocpp.org/group/std-propos=
als/.
--001a1147dc98cd27000529a28656
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><div class=3D"gmail_extra"><div class=3D"gmail_quote">On M=
on, Jan 18, 2016 at 7:41 PM, Agust=C3=ADn K-ballo Berg=C3=A9 <span dir=3D"l=
tr"><<a href=3D"mailto:kaballo86@hotmail.com" target=3D"_blank">kaballo8=
6@hotmail.com</a>></span> wrote:<br><blockquote class=3D"gmail_quote" st=
yle=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span=
class=3D"">On 1/18/2016 3:16 PM, Andrew Tomazos wrote:<br>
</span><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-=
left:1px #ccc solid;padding-left:1ex"><span class=3D"">On Mon, Jan 18, 2016=
at 7:02 PM, Ville Voutilainen<br></span><span class=3D"">
<<a href=3D"mailto:ville.voutilainen@gmail.com" target=3D"_blank">ville.=
voutilainen@gmail.com</a> <mailto:<a href=3D"mailto:ville.voutilainen@gm=
ail.com" target=3D"_blank">ville.voutilainen@gmail.com</a>>> wrote:<b=
r>
<br>
=C2=A0 =C2=A0 On 18 January 2016 at 19:21, Andrew Tomazos <<a href=3D"ma=
ilto:andrewtomazos@gmail.com" target=3D"_blank">andrewtomazos@gmail.com</a>=
<br></span><span class=3D"">
=C2=A0 =C2=A0 <mailto:<a href=3D"mailto:andrewtomazos@gmail.com" target=
=3D"_blank">andrewtomazos@gmail.com</a>>> wrote:<br>
=C2=A0 =C2=A0 > Sorry, but that is plain wrong.=C2=A0 Extrapolating from=
a sample is a standard<br>
=C2=A0 =C2=A0 > scientific method used in all kinds of fields.=C2=A0 We =
can even calculate a<br>
<br>
=C2=A0 =C2=A0 Yes, especially in fields where the sample supports a theory =
that<br>
=C2=A0 =C2=A0 makes predictions,<br>
=C2=A0 =C2=A0 which is hardly the case here.<br>
<br>
=C2=A0 =C2=A0 > confidence interval.=C2=A0 Given a random 1% sample of 3=
B balls, finding that<br>
=C2=A0 =C2=A0 > none of the sample are red, we can say that the probabil=
ity that less than<br>
=C2=A0 =C2=A0 > X% of the population are red is Y% - for various pairs o=
f X,Y.=C2=A0 When X is<br>
=C2=A0 =C2=A0 > very low and Y is very high, it should sway any rational=
person.<br>
<br>
=C2=A0 =C2=A0 Well, you're certainly more than welcome to continue argu=
ing that<br>
=C2=A0 =C2=A0 your sample<br>
=C2=A0 =C2=A0 'proves' that "people wouldn't use a library=
facility, because it<br>
=C2=A0 =C2=A0 requires an include".<br>
=C2=A0 =C2=A0 I don't think that will have the effect you want it to ha=
ve.<br>
<br>
<br>
If I find a very large number of Range-Based For Loops (showing<br>
prevelence of C++11 use), a very large number of `for (int i =3D 0; i < =
n;<br>
++i)` loops and virtually no irange-style for loops `for (int i :<br>
irange(N))` or similar, we can confidently conclude that people prefer<br>
`for (int i =3D 0; i < n; ++i)` to `for (int i : irange(N))`.=C2=A0 That=
would<br>
be a completely reasonable and uncontroversial conclusion from the data.<br=
>
</span></blockquote>
<br>
How do you conclude that the motivation behind this is "preference&quo=
t;?<br></blockquote><div><br></div><div>The possibility of implementing and=
using an irange-style library solution `for (int i : irange(N))` came abou=
t with Range-Based For Loops.=C2=A0 Assuming the above data, it shows that =
people chose not to implement and use such a solution, and instead continue=
d using `for (int i =3D 0; i < N; i++)`.=C2=A0 What other explanation is=
there, other than they prefer the latter for some reason? =C2=A0(As discus=
sed previously, the reason I speculate for this preference is the verbosity=
and library overhead.)</div><div>=C2=A0</div><blockquote class=3D"gmail_qu=
ote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex=
">
Again, I would interpret this data as lack of interest in the index-based f=
or-loop proposal.<span class=3D"im HOEnZb"><br></span></blockquote><div>=C2=
=A0</div><div>Let's conduct a little thought experiment: =C2=A0Assume t=
hat the core language solution index-based for loop `for (int i : N)` was a=
dopted as proposed, and that after it has been implemented in your C++ comp=
iler, you were going to write a for loop for an index sequence.=C2=A0 Would=
you write `for (int i =3D 0; i < N; ++i)` or would you write `for (int =
i : N)`?=C2=A0 I think most people would write the latter.</div><div><br></=
div></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" 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"https://groups.google.com/a/isocpp.org/group=
/std-proposals/">https://groups.google.com/a/isocpp.org/group/std-proposals=
/</a>.<br />
--001a1147dc98cd27000529a28656--
.
Author: Matthew Woehlke <mwoehlke.floss@gmail.com>
Date: Mon, 18 Jan 2016 16:44:19 -0500
Raw View
On 2016-01-18 16:35, Andrew Tomazos wrote:
> The possibility of implementing and using an irange-style library solution
> `for (int i : irange(N))` came about with Range-Based For Loops. Assuming
> the above data, it shows that people chose not to implement and use such a
> solution, and instead continued using `for (int i = 0; i < N; i++)`. What
> other explanation is there, other than they prefer the latter for some
> reason?
- They are lazy.
- The idea didn't occur to them.
- No such loops have been written since range-based for became an option.
- They don't understand why it is better.
> (As discussed previously, the reason I speculate for this
> preference is the verbosity and library overhead.)
I especially don't buy the verbosity excuse. In private projects
especially, it's not hard to make the library version shorter (e.g. name
it "ir()" or some such). It's also not hard to have the necessary
include in some header that is almost certainly included anyway.
> Let's conduct a little thought experiment: Assume that the core language
> solution index-based for loop `for (int i : N)` was adopted as proposed,
> and that after it has been implemented in your C++ compiler, you were going
> to write a for loop for an index sequence. Would you write `for (int i =
> 0; i < N; ++i)` or would you write `for (int i : N)`? I think most people
> would write the latter.
I *already* write:
for (auto const i : indexrange(N))
....i.e. I already *don't* use the old-style loop.
--
Matthew
--
---
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 https://groups.google.com/a/isocpp.org/group/std-proposals/.
.
Author: Miro Knejp <miro.knejp@gmail.com>
Date: Mon, 18 Jan 2016 23:01:00 +0100
Raw View
This is a multi-part message in MIME format.
--------------030707060302040007010004
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: quoted-printable
Am 18.01.2016 um 22:35 schrieb Andrew Tomazos:
> On Mon, Jan 18, 2016 at 7:41 PM, Agust=C3=ADn K-ballo Berg=C3=A9=20
> <kaballo86@hotmail.com <mailto:kaballo86@hotmail.com>> wrote:
>
> On 1/18/2016 3:16 PM, Andrew Tomazos wrote:
>
> On Mon, Jan 18, 2016 at 7:02 PM, Ville Voutilainen
> <ville.voutilainen@gmail.com
> <mailto:ville.voutilainen@gmail.com>
> <mailto:ville.voutilainen@gmail.com
> <mailto:ville.voutilainen@gmail.com>>> wrote:
>
> On 18 January 2016 at 19:21, Andrew Tomazos
> <andrewtomazos@gmail.com <mailto:andrewtomazos@gmail.com>
> <mailto:andrewtomazos@gmail.com
> <mailto:andrewtomazos@gmail.com>>> wrote:
> > Sorry, but that is plain wrong. Extrapolating from a
> sample is a standard
> > scientific method used in all kinds of fields. We can
> even calculate a
>
> Yes, especially in fields where the sample supports a
> theory that
> makes predictions,
> which is hardly the case here.
>
> > confidence interval. Given a random 1% sample of 3B
> balls, finding that
> > none of the sample are red, we can say that the
> probability that less than
> > X% of the population are red is Y% - for various pairs
> of X,Y. When X is
> > very low and Y is very high, it should sway any rational
> person.
>
> Well, you're certainly more than welcome to continue
> arguing that
> your sample
> 'proves' that "people wouldn't use a library facility,
> because it
> requires an include".
> I don't think that will have the effect you want it to have.
>
>
> If I find a very large number of Range-Based For Loops (showing
> prevelence of C++11 use), a very large number of `for (int i =3D
> 0; i < n;
> ++i)` loops and virtually no irange-style for loops `for (int i :
> irange(N))` or similar, we can confidently conclude that
> people prefer
> `for (int i =3D 0; i < n; ++i)` to `for (int i : irange(N))`.=20
> That would
> be a completely reasonable and uncontroversial conclusion from
> the data.
>
>
> How do you conclude that the motivation behind this is "preference"?
>
>
> The possibility of implementing and using an irange-style library=20
> solution `for (int i : irange(N))` came about with Range-Based For=20
> Loops. Assuming the above data, it shows that people chose not to=20
> implement and use such a solution, and instead continued using `for=20
> (int i =3D 0; i < N; i++)`. What other explanation is there, other than=
=20
> they prefer the latter for some reason? (As discussed previously, the=20
> reason I speculate for this preference is the verbosity and library=20
> overhead.)
Maybe they just don't know about range based for? Not every C++=20
programmer is a C++ enthusiast who is always on the edge of the latest=20
and greatest language feature. At CppCon 2014 it was revealed that=20
Google disadvise or outright forbid people from using certain C++11=20
features (not range-based-for but you get the point) because "people=20
don't understand them". If you work at such a place, are you always=20
motivated to follow the latest developments if you can't make use of=20
these features?
If someone choses option B, it's not always because they prefer it over=20
option A. Sometimes it's just ignorance.
>
> Again, I would interpret this data as lack of interest in the
> index-based for-loop proposal.
>
> Let's conduct a little thought experiment: Assume that the core=20
> language solution index-based for loop `for (int i : N)` was adopted=20
> as proposed, and that after it has been implemented in your C++=20
> compiler, you were going to write a for loop for an index sequence. =20
> Would you write `for (int i =3D 0; i < N; ++i)` or would you write `for=
=20
> (int i : N)`? I think most people would write the latter.
I would curse the feature the first time I needed to write a loop from 3=20
to 42, forcing me to go back to the old syntax and replace half the=20
line. "How do I specify a starting value" is going to be the #1 question=20
about this feature on SO. The feature as proposed is *too* specialized=20
in my opinion. It only solves one special case instead of being=20
general-purpose. I cannot use it to pass an integer range to an=20
algorithm or compose it with range adaptors. It changes what the literal=20
"5" stands for, even inside the for loop the "5" inside "foo(5)" means=20
something different than "5" on its own. That's just weird.
I have often tinkered with the idea of having a "first..last" operator=20
(two dots not three because packs) to create ranges (as that requires a=20
bunch of boilerplate), but I'm always running into some issues and=20
adding a new operator to the language comes with a whole set of its own=20
problems.
--=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 https://groups.google.com/a/isocpp.org/group/std-propos=
als/.
--------------030707060302040007010004
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<html>
<head>
<meta content=3D"text/html; charset=3Dutf-8" http-equiv=3D"Content-Type=
">
</head>
<body bgcolor=3D"#FFFFFF" text=3D"#000000">
Am 18.01.2016 um 22:35 schrieb Andrew Tomazos:<br>
<blockquote
cite=3D"mid:CAB+4KHKRKZU+k92WzK9wbBbz3Ux0A6b-M5Vbp36waGx0chY3Ag@mail.gmail.=
com"
type=3D"cite">
<div dir=3D"ltr">
<div class=3D"gmail_extra">
<div class=3D"gmail_quote">On Mon, Jan 18, 2016 at 7:41 PM,
Agust=C3=ADn K-ballo Berg=C3=A9 <span dir=3D"ltr"><<a
moz-do-not-send=3D"true"
href=3D"mailto:kaballo86@hotmail.com" target=3D"_blank"><a =
class=3D"moz-txt-link-abbreviated" href=3D"mailto:kaballo86@hotmail.com">ka=
ballo86@hotmail.com</a></a>></span>
wrote:<br>
<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0
.8ex;border-left:1px #ccc solid;padding-left:1ex"><span
class=3D"">On 1/18/2016 3:16 PM, Andrew Tomazos wrote:<br>
</span>
<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0
.8ex;border-left:1px #ccc solid;padding-left:1ex"><span
class=3D"">On Mon, Jan 18, 2016 at 7:02 PM, Ville
Voutilainen<br>
</span><span class=3D"">
<<a moz-do-not-send=3D"true"
href=3D"mailto:ville.voutilainen@gmail.com"
target=3D"_blank">ville.voutilainen@gmail.com</a>
<mailto:<a moz-do-not-send=3D"true"
href=3D"mailto:ville.voutilainen@gmail.com"
target=3D"_blank">ville.voutilainen@gmail.com</a>>&g=
t;
wrote:<br>
<br>
=C2=A0 =C2=A0 On 18 January 2016 at 19:21, Andrew Tomazos=
<<a
moz-do-not-send=3D"true"
href=3D"mailto:andrewtomazos@gmail.com"
target=3D"_blank"><a class=3D"moz-txt-link-abbreviated"=
href=3D"mailto:andrewtomazos@gmail.com">andrewtomazos@gmail.com</a></a><br=
>
</span><span class=3D"">
=C2=A0 =C2=A0 <mailto:<a moz-do-not-send=3D"true"
href=3D"mailto:andrewtomazos@gmail.com"
target=3D"_blank">andrewtomazos@gmail.com</a>>>
wrote:<br>
=C2=A0 =C2=A0 > Sorry, but that is plain wrong.=C2=A0
Extrapolating from a sample is a standard<br>
=C2=A0 =C2=A0 > scientific method used in all kinds of
fields.=C2=A0 We can even calculate a<br>
<br>
=C2=A0 =C2=A0 Yes, especially in fields where the sample
supports a theory that<br>
=C2=A0 =C2=A0 makes predictions,<br>
=C2=A0 =C2=A0 which is hardly the case here.<br>
<br>
=C2=A0 =C2=A0 > confidence interval.=C2=A0 Given a ran=
dom 1%
sample of 3B balls, finding that<br>
=C2=A0 =C2=A0 > none of the sample are red, we can say=
that
the probability that less than<br>
=C2=A0 =C2=A0 > X% of the population are red is Y% - f=
or
various pairs of X,Y.=C2=A0 When X is<br>
=C2=A0 =C2=A0 > very low and Y is very high, it should=
sway
any rational person.<br>
<br>
=C2=A0 =C2=A0 Well, you're certainly more than welcome to
continue arguing that<br>
=C2=A0 =C2=A0 your sample<br>
=C2=A0 =C2=A0 'proves' that "people wouldn't use a librar=
y
facility, because it<br>
=C2=A0 =C2=A0 requires an include".<br>
=C2=A0 =C2=A0 I don't think that will have the effect you=
want
it to have.<br>
<br>
<br>
If I find a very large number of Range-Based For Loops
(showing<br>
prevelence of C++11 use), a very large number of `for
(int i =3D 0; i < n;<br>
++i)` loops and virtually no irange-style for loops
`for (int i :<br>
irange(N))` or similar, we can confidently conclude
that people prefer<br>
`for (int i =3D 0; i < n; ++i)` to `for (int i :
irange(N))`.=C2=A0 That would<br>
be a completely reasonable and uncontroversial
conclusion from the data.<br>
</span></blockquote>
<br>
How do you conclude that the motivation behind this is
"preference"?<br>
</blockquote>
<div><br>
</div>
<div>The possibility of implementing and using an
irange-style library solution `for (int i : irange(N))`
came about with Range-Based For Loops.=C2=A0 Assuming the abo=
ve
data, it shows that people chose not to implement and use
such a solution, and instead continued using `for (int i =3D
0; i < N; i++)`.=C2=A0 What other explanation is there,
other than they prefer the latter for some reason? =C2=A0(As
discussed previously, the reason I speculate for this
preference is the verbosity and library overhead.)</div>
</div>
</div>
</div>
</blockquote>
Maybe they just don't know about range based for? Not every C++
programmer is a C++ enthusiast who is always on the edge of the
latest and greatest language feature. At CppCon 2014 it was revealed
that Google disadvise or outright forbid people from using certain
C++11 features (not range-based-for but you get the point) because
"people don't understand them". If you work at such a place, are you
always motivated to follow the latest developments if you can't make
use of these features?<br>
<br>
If someone choses option B, it's not always because they prefer it
over option A. Sometimes it's just ignorance.<br>
<blockquote
cite=3D"mid:CAB+4KHKRKZU+k92WzK9wbBbz3Ux0A6b-M5Vbp36waGx0chY3Ag@mail.gmail.=
com"
type=3D"cite">
<div dir=3D"ltr">
<div class=3D"gmail_extra">
<div class=3D"gmail_quote">
<div>=C2=A0</div>
<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0
.8ex;border-left:1px #ccc solid;padding-left:1ex">
Again, I would interpret this data as lack of interest in
the index-based for-loop proposal.<span class=3D"im HOEnZb"><=
br>
</span></blockquote>
<div>=C2=A0</div>
<div>Let's conduct a little thought experiment: =C2=A0Assume th=
at
the core language solution index-based for loop `for (int
i : N)` was adopted as proposed, and that after it has
been implemented in your C++ compiler, you were going to
write a for loop for an index sequence.=C2=A0 Would you write
`for (int i =3D 0; i < N; ++i)` or would you write `for
(int i : N)`?=C2=A0 I think most people would write the latte=
r.</div>
</div>
</div>
</div>
</blockquote>
I would curse the feature the first time I needed to write a loop
from 3 to 42, forcing me to go back to the old syntax and replace
half the line. "How do I specify a starting value" is going to be
the #1 question about this feature on SO. The feature as proposed is
*too* specialized in my opinion. It only solves one special case
instead of being general-purpose. I cannot use it to pass an integer
range to an algorithm or compose it with range adaptors. It changes
what the literal "5" stands for, even inside the for loop the "5"
inside "foo(5)" means something different than "5" on its own.
That's just weird.<br>
<br>
I have often tinkered with the idea of having a "first..last"
operator (two dots not three because packs) to create ranges (as
that requires a bunch of boilerplate), but I'm always running into
some issues and adding a new operator to the language comes with a
whole set of its own problems.<br>
</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" 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"https://groups.google.com/a/isocpp.org/group=
/std-proposals/">https://groups.google.com/a/isocpp.org/group/std-proposals=
/</a>.<br />
--------------030707060302040007010004--
.
Author: Andrew Tomazos <andrewtomazos@gmail.com>
Date: Mon, 18 Jan 2016 23:07:38 +0100
Raw View
--001a1141997428cbd80529a2fb38
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
On Mon, Jan 18, 2016 at 11:01 PM, Miro Knejp <miro.knejp@gmail.com> wrote:
> Am 18.01.2016 um 22:35 schrieb Andrew Tomazos:
>
> On Mon, Jan 18, 2016 at 7:41 PM, Agust=C3=ADn K-ballo Berg=C3=A9 <
> <kaballo86@hotmail.com>kaballo86@hotmail.com> wrote:
>
>> On 1/18/2016 3:16 PM, Andrew Tomazos wrote:
>>
>>> On Mon, Jan 18, 2016 at 7:02 PM, Ville Voutilainen
>>> <ville.voutilainen@gmail.com <mailto:ville.voutilainen@gmail.com>>
>>> wrote:
>>>
>>> On 18 January 2016 at 19:21, Andrew Tomazos <
>>> <andrewtomazos@gmail.com>andrewtomazos@gmail.com
>>> <mailto:andrewtomazos@gmail.com>> wrote:
>>> > Sorry, but that is plain wrong. Extrapolating from a sample is a
>>> standard
>>> > scientific method used in all kinds of fields. We can even
>>> calculate a
>>>
>>> Yes, especially in fields where the sample supports a theory that
>>> makes predictions,
>>> which is hardly the case here.
>>>
>>> > confidence interval. Given a random 1% sample of 3B balls,
>>> finding that
>>> > none of the sample are red, we can say that the probability that
>>> less than
>>> > X% of the population are red is Y% - for various pairs of X,Y.
>>> When X is
>>> > very low and Y is very high, it should sway any rational person.
>>>
>>> Well, you're certainly more than welcome to continue arguing that
>>> your sample
>>> 'proves' that "people wouldn't use a library facility, because it
>>> requires an include".
>>> I don't think that will have the effect you want it to have.
>>>
>>>
>>> If I find a very large number of Range-Based For Loops (showing
>>> prevelence of C++11 use), a very large number of `for (int i =3D 0; i <=
n;
>>> ++i)` loops and virtually no irange-style for loops `for (int i :
>>> irange(N))` or similar, we can confidently conclude that people prefer
>>> `for (int i =3D 0; i < n; ++i)` to `for (int i : irange(N))`. That wou=
ld
>>> be a completely reasonable and uncontroversial conclusion from the data=
..
>>>
>>
>> How do you conclude that the motivation behind this is "preference"?
>>
>
> The possibility of implementing and using an irange-style library solutio=
n
> `for (int i : irange(N))` came about with Range-Based For Loops. Assumin=
g
> the above data, it shows that people chose not to implement and use such =
a
> solution, and instead continued using `for (int i =3D 0; i < N; i++)`. W=
hat
> other explanation is there, other than they prefer the latter for some
> reason? (As discussed previously, the reason I speculate for this
> preference is the verbosity and library overhead.)
>
> Maybe they just don't know about range based for?
>
If they didn't know about Range-Based For, then there wouldn't be "a very
large number of Range-Based For Loops" in the data, right?
--=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 https://groups.google.com/a/isocpp.org/group/std-propos=
als/.
--001a1141997428cbd80529a2fb38
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><br><div class=3D"gmail_extra"><br><div class=3D"gmail_quo=
te">On Mon, Jan 18, 2016 at 11:01 PM, Miro Knejp <span dir=3D"ltr"><<a h=
ref=3D"mailto:miro.knejp@gmail.com" target=3D"_blank">miro.knejp@gmail.com<=
/a>></span> wrote:<br><blockquote class=3D"gmail_quote" style=3D"margin:=
0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
=20
=20
=20
<div bgcolor=3D"#FFFFFF" text=3D"#000000"><div><div class=3D"h5">
Am 18.01.2016 um 22:35 schrieb Andrew Tomazos:<br>
<blockquote type=3D"cite">
<div dir=3D"ltr">
<div class=3D"gmail_extra">
<div class=3D"gmail_quote">On Mon, Jan 18, 2016 at 7:41 PM,
Agust=C3=ADn K-ballo Berg=C3=A9 <span dir=3D"ltr"><<a href=
=3D"mailto:kaballo86@hotmail.com" target=3D"_blank"></a><a href=3D"mailto:k=
aballo86@hotmail.com" target=3D"_blank">kaballo86@hotmail.com</a>></span=
>
wrote:<br>
<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;bo=
rder-left:1px #ccc solid;padding-left:1ex"><span>On 1/18/2016 3:16 PM, Andr=
ew Tomazos wrote:<br>
</span>
<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;=
border-left:1px #ccc solid;padding-left:1ex"><span>On Mon, Jan 18, 2016 at =
7:02 PM, Ville
Voutilainen<br>
</span><span>
<<a href=3D"mailto:ville.voutilainen@gmail.com" target=
=3D"_blank">ville.voutilainen@gmail.com</a>
<mailto:<a href=3D"mailto:ville.voutilainen@gmail.com"=
target=3D"_blank">ville.voutilainen@gmail.com</a>>>
wrote:<br>
<br>
=C2=A0 =C2=A0 On 18 January 2016 at 19:21, Andrew Tomazos=
<<a href=3D"mailto:andrewtomazos@gmail.com" target=3D"_blank"></a><a hr=
ef=3D"mailto:andrewtomazos@gmail.com" target=3D"_blank">andrewtomazos@gmail=
..com</a><br>
</span><span>
=C2=A0 =C2=A0 <mailto:<a href=3D"mailto:andrewtomazos@=
gmail.com" target=3D"_blank">andrewtomazos@gmail.com</a>>>
wrote:<br>
=C2=A0 =C2=A0 > Sorry, but that is plain wrong.=C2=A0
Extrapolating from a sample is a standard<br>
=C2=A0 =C2=A0 > scientific method used in all kinds of
fields.=C2=A0 We can even calculate a<br>
<br>
=C2=A0 =C2=A0 Yes, especially in fields where the sample
supports a theory that<br>
=C2=A0 =C2=A0 makes predictions,<br>
=C2=A0 =C2=A0 which is hardly the case here.<br>
<br>
=C2=A0 =C2=A0 > confidence interval.=C2=A0 Given a ran=
dom 1%
sample of 3B balls, finding that<br>
=C2=A0 =C2=A0 > none of the sample are red, we can say=
that
the probability that less than<br>
=C2=A0 =C2=A0 > X% of the population are red is Y% - f=
or
various pairs of X,Y.=C2=A0 When X is<br>
=C2=A0 =C2=A0 > very low and Y is very high, it should=
sway
any rational person.<br>
<br>
=C2=A0 =C2=A0 Well, you're certainly more than welcom=
e to
continue arguing that<br>
=C2=A0 =C2=A0 your sample<br>
=C2=A0 =C2=A0 'proves' that "people wouldn&#=
39;t use a library
facility, because it<br>
=C2=A0 =C2=A0 requires an include".<br>
=C2=A0 =C2=A0 I don't think that will have the effect=
you want
it to have.<br>
<br>
<br>
If I find a very large number of Range-Based For Loops
(showing<br>
prevelence of C++11 use), a very large number of `for
(int i =3D 0; i < n;<br>
++i)` loops and virtually no irange-style for loops
`for (int i :<br>
irange(N))` or similar, we can confidently conclude
that people prefer<br>
`for (int i =3D 0; i < n; ++i)` to `for (int i :
irange(N))`.=C2=A0 That would<br>
be a completely reasonable and uncontroversial
conclusion from the data.<br>
</span></blockquote>
<br>
How do you conclude that the motivation behind this is
"preference"?<br>
</blockquote>
<div><br>
</div>
<div>The possibility of implementing and using an
irange-style library solution `for (int i : irange(N))`
came about with Range-Based For Loops.=C2=A0 Assuming the abo=
ve
data, it shows that people chose not to implement and use
such a solution, and instead continued using `for (int i =3D
0; i < N; i++)`.=C2=A0 What other explanation is there,
other than they prefer the latter for some reason? =C2=A0(As
discussed previously, the reason I speculate for this
preference is the verbosity and library overhead.)</div>
</div>
</div>
</div>
</blockquote></div></div>
Maybe they just don't know about range based for?</div></blockquote=
><div><br></div><div>If they didn't know about Range-Based For, then th=
ere wouldn't be "a very large number of Range-Based For Loops"=
; in the data, right?</div><div><br></div></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" 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"https://groups.google.com/a/isocpp.org/group=
/std-proposals/">https://groups.google.com/a/isocpp.org/group/std-proposals=
/</a>.<br />
--001a1141997428cbd80529a2fb38--
.
Author: =?UTF-8?Q?Agust=c3=adn_K-ballo_Berg=c3=a9?= <kaballo86@hotmail.com>
Date: Mon, 18 Jan 2016 19:19:26 -0300
Raw View
On 1/18/2016 6:35 PM, Andrew Tomazos wrote:
> On Mon, Jan 18, 2016 at 7:41 PM, Agust=C3=ADn K-ballo Berg=C3=A9
> <kaballo86@hotmail.com <mailto:kaballo86@hotmail.com>> wrote:
>
> On 1/18/2016 3:16 PM, Andrew Tomazos wrote:
>
> On Mon, Jan 18, 2016 at 7:02 PM, Ville Voutilainen
> <ville.voutilainen@gmail.com
> <mailto:ville.voutilainen@gmail.com>
> <mailto:ville.voutilainen@gmail.com
> <mailto:ville.voutilainen@gmail.com>>> wrote:
>
> On 18 January 2016 at 19:21, Andrew Tomazos
> <andrewtomazos@gmail.com <mailto:andrewtomazos@gmail.com>
> <mailto:andrewtomazos@gmail.com
> <mailto:andrewtomazos@gmail.com>>> wrote:
> > Sorry, but that is plain wrong. Extrapolating from a
> sample is a standard
> > scientific method used in all kinds of fields. We can
> even calculate a
>
> Yes, especially in fields where the sample supports a
> theory that
> makes predictions,
> which is hardly the case here.
>
> > confidence interval. Given a random 1% sample of 3B
> balls, finding that
> > none of the sample are red, we can say that the
> probability that less than
> > X% of the population are red is Y% - for various pairs of
> X,Y. When X is
> > very low and Y is very high, it should sway any rational
> person.
>
> Well, you're certainly more than welcome to continue
> arguing that
> your sample
> 'proves' that "people wouldn't use a library facility,
> because it
> requires an include".
> I don't think that will have the effect you want it to have.
>
>
> If I find a very large number of Range-Based For Loops (showing
> prevelence of C++11 use), a very large number of `for (int i =3D
> 0; i < n;
> ++i)` loops and virtually no irange-style for loops `for (int i :
> irange(N))` or similar, we can confidently conclude that people
> prefer
> `for (int i =3D 0; i < n; ++i)` to `for (int i : irange(N))`.
> That would
> be a completely reasonable and uncontroversial conclusion from
> the data.
>
>
> How do you conclude that the motivation behind this is "preference"?
>
>
> The possibility of implementing and using an irange-style library
> solution `for (int i : irange(N))` came about with Range-Based For
> Loops. Assuming the above data, it shows that people chose not to
> implement and use such a solution, and instead continued using `for (int
> i =3D 0; i < N; i++)`. What other explanation is there, other than they
> prefer the latter for some reason? (As discussed previously, the reason
> I speculate for this preference is the verbosity and library overhead.)
There isn't a single project I work on or contribute to that does things=20
entirely in the way I would "prefer" them to be done. The reason is not=20
because I prefer to do them in a different way, obviously, but because=20
of backwards compatibility, compiler limitations, contributors'=20
limitations, portability, etc, etc, as well as a big share of "the new=20
standard lets us do this better/nicer but we have more pressing things=20
to do than to reshuffle working tested code".
As an example, for this particular case I would happily use
for (int i : std::irange(7, 11)) { /*...*/ }
if the standard library provided it (and I could afford using that newer=20
standard). I'm not shy of adding an extra `#include`, I already mention=20
that I occasionally leverage `std::initializer_list` in this way. But=20
until then, I do not think this feature is worth the cost of growing a=20
Boost dependency or dragging all of Boost.Range.
I could implement it myself, but then I would have to document it,=20
support it, write a comprehensive unit test suite, analyze the codegen=20
with different compilers and compilation flags, and all that stuff that=20
I expect a library implementor to do. I don't write nearly as much raw=20
strict loops from 0 to N for it to be worth the cost of implementing it.
> Again, I would interpret this data as lack of interest in the
> index-based for-loop proposal.
>
> Let's conduct a little thought experiment: Assume that the core
> language solution index-based for loop `for (int i : N)` was adopted as
> proposed, and that after it has been implemented in your C++ compiler,
> you were going to write a for loop for an index sequence. Would you
> write `for (int i =3D 0; i < N; ++i)` or would you write `for (int i :
> N)`? I think most people would write the latter.
I am not convinced that I would, "for each i in 7" doesn't read natural=20
to me, while something like `for (int i : {0...6})` might.
It's irrelevant, however, whether I would or would not use it. I'm not=20
concerned on what might happen in a future with such a feature, but with=20
how you choose to interpret what happened in the past in a way that=20
suits your needs, while ignoring evidence that says otherwise.
But in the end, what to present to EWG as motivation for this feature is=20
entirely up to you. I have not heard anything convincing so far, you may=20
take that as an extra data point, and ignore it if you wish.
Regards,
--=20
Agust=C3=ADn K-ballo Berg=C3=A9.-
http://talesofcpp.fusionfenix.com
--=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 https://groups.google.com/a/isocpp.org/group/std-propos=
als/.
.
Author: Miro Knejp <miro.knejp@gmail.com>
Date: Mon, 18 Jan 2016 23:49:21 +0100
Raw View
This is a multi-part message in MIME format.
--------------080807010705000207030200
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: quoted-printable
Am 18.01.2016 um 23:07 schrieb Andrew Tomazos:
>
>
> On Mon, Jan 18, 2016 at 11:01 PM, Miro Knejp <miro.knejp@gmail.com=20
> <mailto:miro.knejp@gmail.com>> wrote:
>
> Am 18.01.2016 um 22:35 schrieb Andrew Tomazos:
>> On Mon, Jan 18, 2016 at 7:41 PM, Agust=C3=ADn K-ballo Berg=C3=A9
>> <kaballo86@hotmail.com <mailto:kaballo86@hotmail.com>> wrote:
>>
>> On 1/18/2016 3:16 PM, Andrew Tomazos wrote:
>>
>> On Mon, Jan 18, 2016 at 7:02 PM, Ville Voutilainen
>> <ville.voutilainen@gmail.com
>> <mailto:ville.voutilainen@gmail.com>
>> <mailto:ville.voutilainen@gmail.com
>> <mailto:ville.voutilainen@gmail.com>>> wrote:
>>
>> On 18 January 2016 at 19:21, Andrew Tomazos
>> <andrewtomazos@gmail.com <mailto:andrewtomazos@gmail.com>
>> <mailto:andrewtomazos@gmail.com
>> <mailto:andrewtomazos@gmail.com>>> wrote:
>> > Sorry, but that is plain wrong. Extrapolating from
>> a sample is a standard
>> > scientific method used in all kinds of fields. We
>> can even calculate a
>>
>> Yes, especially in fields where the sample supports a
>> theory that
>> makes predictions,
>> which is hardly the case here.
>>
>> > confidence interval. Given a random 1% sample of
>> 3B balls, finding that
>> > none of the sample are red, we can say that the
>> probability that less than
>> > X% of the population are red is Y% - for various
>> pairs of X,Y. When X is
>> > very low and Y is very high, it should sway any
>> rational person.
>>
>> Well, you're certainly more than welcome to continue
>> arguing that
>> your sample
>> 'proves' that "people wouldn't use a library
>> facility, because it
>> requires an include".
>> I don't think that will have the effect you want it
>> to have.
>>
>>
>> If I find a very large number of Range-Based For Loops
>> (showing
>> prevelence of C++11 use), a very large number of `for
>> (int i =3D 0; i < n;
>> ++i)` loops and virtually no irange-style for loops `for
>> (int i :
>> irange(N))` or similar, we can confidently conclude that
>> people prefer
>> `for (int i =3D 0; i < n; ++i)` to `for (int i :
>> irange(N))`. That would
>> be a completely reasonable and uncontroversial conclusion
>> from the data.
>>
>>
>> How do you conclude that the motivation behind this is
>> "preference"?
>>
>>
>> The possibility of implementing and using an irange-style library
>> solution `for (int i : irange(N))` came about with Range-Based
>> For Loops. Assuming the above data, it shows that people chose
>> not to implement and use such a solution, and instead continued
>> using `for (int i =3D 0; i < N; i++)`. What other explanation is
>> there, other than they prefer the latter for some reason? (As
>> discussed previously, the reason I speculate for this preference
>> is the verbosity and library overhead.)
> Maybe they just don't know about range based for?
>
>
> If they didn't know about Range-Based For, then there wouldn't be "a=20
> very large number of Range-Based For Loops" in the data, right?
Quite perplexing indeed considering these projects are written and=20
maintained by a single person.
--=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 https://groups.google.com/a/isocpp.org/group/std-propos=
als/.
--------------080807010705000207030200
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<html>
<head>
<meta content=3D"text/html; charset=3Dutf-8" http-equiv=3D"Content-Type=
">
</head>
<body bgcolor=3D"#FFFFFF" text=3D"#000000">
Am 18.01.2016 um 23:07 schrieb Andrew Tomazos:<br>
<blockquote
cite=3D"mid:CAB+4KHLAT-T86b0QBZpfJXjHcg6Te9ZWRig7Xdw8qLdjhXex0A@mail.gmail.=
com"
type=3D"cite">
<div dir=3D"ltr"><br>
<div class=3D"gmail_extra"><br>
<div class=3D"gmail_quote">On Mon, Jan 18, 2016 at 11:01 PM,
Miro Knejp <span dir=3D"ltr"><<a moz-do-not-send=3D"true"
href=3D"mailto:miro.knejp@gmail.com" target=3D"_blank">miro=
..knejp@gmail.com</a>></span>
wrote:<br>
<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0
.8ex;border-left:1px #ccc solid;padding-left:1ex">
<div bgcolor=3D"#FFFFFF" text=3D"#000000">
<div>
<div class=3D"h5"> Am 18.01.2016 um 22:35 schrieb Andrew
Tomazos:<br>
<blockquote type=3D"cite">
<div dir=3D"ltr">
<div class=3D"gmail_extra">
<div class=3D"gmail_quote">On Mon, Jan 18, 2016
at 7:41 PM, Agust=C3=ADn K-ballo Berg=C3=A9 <sp=
an
dir=3D"ltr"><<a moz-do-not-send=3D"true"
href=3D"mailto:kaballo86@hotmail.com"
target=3D"_blank">kaballo86@hotmail.com</a>=
></span>
wrote:<br>
<blockquote class=3D"gmail_quote"
style=3D"margin:0 0 0 .8ex;border-left:1px
#ccc solid;padding-left:1ex"><span>On
1/18/2016 3:16 PM, Andrew Tomazos wrote:<br=
>
</span>
<blockquote class=3D"gmail_quote"
style=3D"margin:0 0 0 .8ex;border-left:1px
#ccc solid;padding-left:1ex"><span>On
Mon, Jan 18, 2016 at 7:02 PM, Ville
Voutilainen<br>
</span><span> <<a
moz-do-not-send=3D"true"
href=3D"mailto:ville.voutilainen@gmail.=
com"
target=3D"_blank"><a class=3D"moz-txt-l=
ink-abbreviated" href=3D"mailto:ville.voutilainen@gmail.com">ville.voutilai=
nen@gmail.com</a></a>
<mailto:<a moz-do-not-send=3D"true"
href=3D"mailto:ville.voutilainen@gmail.=
com"
target=3D"_blank">ville.voutilainen@gma=
il.com</a>>>
wrote:<br>
<br>
=C2=A0 =C2=A0 On 18 January 2016 at 19:21=
,
Andrew Tomazos <<a
moz-do-not-send=3D"true"
href=3D"mailto:andrewtomazos@gmail.com"
target=3D"_blank"><a class=3D"moz-txt-l=
ink-abbreviated" href=3D"mailto:andrewtomazos@gmail.com">andrewtomazos@gmai=
l.com</a></a><br>
</span><span> =C2=A0 =C2=A0 <mailto:<a
moz-do-not-send=3D"true"
href=3D"mailto:andrewtomazos@gmail.com"
target=3D"_blank"><a class=3D"moz-txt-l=
ink-abbreviated" href=3D"mailto:andrewtomazos@gmail.com">andrewtomazos@gmai=
l.com</a></a>>>
wrote:<br>
=C2=A0 =C2=A0 > Sorry, but that is pla=
in
wrong.=C2=A0 Extrapolating from a sample =
is
a standard<br>
=C2=A0 =C2=A0 > scientific method used=
in all
kinds of fields.=C2=A0 We can even
calculate a<br>
<br>
=C2=A0 =C2=A0 Yes, especially in fields w=
here
the sample supports a theory that<br>
=C2=A0 =C2=A0 makes predictions,<br>
=C2=A0 =C2=A0 which is hardly the case he=
re.<br>
<br>
=C2=A0 =C2=A0 > confidence interval.=
=C2=A0 Given a
random 1% sample of 3B balls, finding
that<br>
=C2=A0 =C2=A0 > none of the sample are=
red,
we can say that the probability that
less than<br>
=C2=A0 =C2=A0 > X% of the population a=
re red
is Y% - for various pairs of X,Y.=C2=A0
When X is<br>
=C2=A0 =C2=A0 > very low and Y is very=
high,
it should sway any rational person.<br>
<br>
=C2=A0 =C2=A0 Well, you're certainly more=
than
welcome to continue arguing that<br>
=C2=A0 =C2=A0 your sample<br>
=C2=A0 =C2=A0 'proves' that "people would=
n't use
a library facility, because it<br>
=C2=A0 =C2=A0 requires an include".<br>
=C2=A0 =C2=A0 I don't think that will hav=
e the
effect you want it to have.<br>
<br>
<br>
If I find a very large number of
Range-Based For Loops (showing<br>
prevelence of C++11 use), a very large
number of `for (int i =3D 0; i < n;<br=
>
++i)` loops and virtually no
irange-style for loops `for (int i :<br>
irange(N))` or similar, we can
confidently conclude that people
prefer<br>
`for (int i =3D 0; i < n; ++i)` to
`for (int i : irange(N))`.=C2=A0 That wou=
ld<br>
be a completely reasonable and
uncontroversial conclusion from the
data.<br>
</span></blockquote>
<br>
How do you conclude that the motivation
behind this is "preference"?<br>
</blockquote>
<div><br>
</div>
<div>The possibility of implementing and
using an irange-style library solution
`for (int i : irange(N))` came about with
Range-Based For Loops.=C2=A0 Assuming the abo=
ve
data, it shows that people chose not to
implement and use such a solution, and
instead continued using `for (int i =3D 0; i
< N; i++)`.=C2=A0 What other explanation i=
s
there, other than they prefer the latter
for some reason? =C2=A0(As discussed
previously, the reason I speculate for
this preference is the verbosity and
library overhead.)</div>
</div>
</div>
</div>
</blockquote>
</div>
</div>
Maybe they just don't know about range based for?</div>
</blockquote>
<div><br>
</div>
<div>If they didn't know about Range-Based For, then there
wouldn't be "a very large number of Range-Based For Loops"
in the data, right?</div>
</div>
</div>
</div>
</blockquote>
Quite perplexing indeed considering these projects are written and
maintained by a single person.<br>
<br>
</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" 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"https://groups.google.com/a/isocpp.org/group=
/std-proposals/">https://groups.google.com/a/isocpp.org/group/std-proposals=
/</a>.<br />
--------------080807010705000207030200--
.
Author: Andrew Tomazos <andrewtomazos@gmail.com>
Date: Tue, 19 Jan 2016 00:10:54 +0100
Raw View
--001a11444c2464fb170529a3dde6
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
On Mon, Jan 18, 2016 at 11:49 PM, Miro Knejp <miro.knejp@gmail.com> wrote:
> Am 18.01.2016 um 23:07 schrieb Andrew Tomazos:
>
>
>
> On Mon, Jan 18, 2016 at 11:01 PM, Miro Knejp <miro.knejp@gmail.com> wrote=
:
>
>> Am 18.01.2016 um 22:35 schrieb Andrew Tomazos:
>>
>> On Mon, Jan 18, 2016 at 7:41 PM, Agust=C3=ADn K-ballo Berg=C3=A9 <
>> kaballo86@hotmail.com> wrote:
>>
>>> On 1/18/2016 3:16 PM, Andrew Tomazos wrote:
>>>
>>>> On Mon, Jan 18, 2016 at 7:02 PM, Ville Voutilainen
>>>> < <ville.voutilainen@gmail.com>ville.voutilainen@gmail.com <mailto:
>>>> ville.voutilainen@gmail.com>> wrote:
>>>>
>>>> On 18 January 2016 at 19:21, Andrew Tomazos <
>>>> <andrewtomazos@gmail.com>andrewtomazos@gmail.com
>>>> <mailto: <andrewtomazos@gmail.com>andrewtomazos@gmail.com>> wrote:
>>>> > Sorry, but that is plain wrong. Extrapolating from a sample is =
a
>>>> standard
>>>> > scientific method used in all kinds of fields. We can even
>>>> calculate a
>>>>
>>>> Yes, especially in fields where the sample supports a theory that
>>>> makes predictions,
>>>> which is hardly the case here.
>>>>
>>>> > confidence interval. Given a random 1% sample of 3B balls,
>>>> finding that
>>>> > none of the sample are red, we can say that the probability that
>>>> less than
>>>> > X% of the population are red is Y% - for various pairs of X,Y.
>>>> When X is
>>>> > very low and Y is very high, it should sway any rational person.
>>>>
>>>> Well, you're certainly more than welcome to continue arguing that
>>>> your sample
>>>> 'proves' that "people wouldn't use a library facility, because it
>>>> requires an include".
>>>> I don't think that will have the effect you want it to have.
>>>>
>>>>
>>>> If I find a very large number of Range-Based For Loops (showing
>>>> prevelence of C++11 use), a very large number of `for (int i =3D 0; i =
< n;
>>>> ++i)` loops and virtually no irange-style for loops `for (int i :
>>>> irange(N))` or similar, we can confidently conclude that people prefer
>>>> `for (int i =3D 0; i < n; ++i)` to `for (int i : irange(N))`. That wo=
uld
>>>> be a completely reasonable and uncontroversial conclusion from the dat=
a.
>>>>
>>>
>>> How do you conclude that the motivation behind this is "preference"?
>>>
>>
>> The possibility of implementing and using an irange-style library
>> solution `for (int i : irange(N))` came about with Range-Based For Loops=
..
>> Assuming the above data, it shows that people chose not to implement and
>> use such a solution, and instead continued using `for (int i =3D 0; i < =
N;
>> i++)`. What other explanation is there, other than they prefer the latt=
er
>> for some reason? (As discussed previously, the reason I speculate for t=
his
>> preference is the verbosity and library overhead.)
>>
>> Maybe they just don't know about range based for?
>>
>
> If they didn't know about Range-Based For, then there wouldn't be "a very
> large number of Range-Based For Loops" in the data, right?
>
> Quite perplexing indeed considering these projects are written and
> maintained by a single person.
>
Sorry but I don't understand what you mean. The projects are not usually
written and maintained by one person - and I don't see the relevance even
if they were.
--=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 https://groups.google.com/a/isocpp.org/group/std-propos=
als/.
--001a11444c2464fb170529a3dde6
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><br><div class=3D"gmail_extra"><br><div class=3D"gmail_quo=
te">On Mon, Jan 18, 2016 at 11:49 PM, Miro Knejp <span dir=3D"ltr"><<a h=
ref=3D"mailto:miro.knejp@gmail.com" target=3D"_blank">miro.knejp@gmail.com<=
/a>></span> wrote:<br><blockquote class=3D"gmail_quote" style=3D"margin:=
0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
=20
=20
=20
<div bgcolor=3D"#FFFFFF" text=3D"#000000"><div><div class=3D"h5">
Am 18.01.2016 um 23:07 schrieb Andrew Tomazos:<br>
<blockquote type=3D"cite">
<div dir=3D"ltr"><br>
<div class=3D"gmail_extra"><br>
<div class=3D"gmail_quote">On Mon, Jan 18, 2016 at 11:01 PM,
Miro Knejp <span dir=3D"ltr"><<a href=3D"mailto:miro.knejp@g=
mail.com" target=3D"_blank">miro.knejp@gmail.com</a>></span>
wrote:<br>
<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;bo=
rder-left:1px #ccc solid;padding-left:1ex">
<div bgcolor=3D"#FFFFFF" text=3D"#000000">
<div>
<div> Am 18.01.2016 um 22:35 schrieb Andrew
Tomazos:<br>
<blockquote type=3D"cite">
<div dir=3D"ltr">
<div class=3D"gmail_extra">
<div class=3D"gmail_quote">On Mon, Jan 18, 2016
at 7:41 PM, Agust=C3=ADn K-ballo Berg=C3=A9 <sp=
an dir=3D"ltr"><<a href=3D"mailto:kaballo86@hotmail.com" target=3D"_blan=
k">kaballo86@hotmail.com</a>></span>
wrote:<br>
<blockquote class=3D"gmail_quote" style=3D"marg=
in:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span>On
1/18/2016 3:16 PM, Andrew Tomazos wrote:<br=
>
</span>
<blockquote class=3D"gmail_quote" style=3D"ma=
rgin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span>On
Mon, Jan 18, 2016 at 7:02 PM, Ville
Voutilainen<br>
</span><span> <<a href=3D"mailto:ville.v=
outilainen@gmail.com" target=3D"_blank"></a><a href=3D"mailto:ville.voutila=
inen@gmail.com" target=3D"_blank">ville.voutilainen@gmail.com</a>
<mailto:<a href=3D"mailto:ville.voutil=
ainen@gmail.com" target=3D"_blank">ville.voutilainen@gmail.com</a>>>
wrote:<br>
<br>
=C2=A0 =C2=A0 On 18 January 2016 at 19:21=
,
Andrew Tomazos <<a href=3D"mailto:andr=
ewtomazos@gmail.com" target=3D"_blank"></a><a href=3D"mailto:andrewtomazos@=
gmail.com" target=3D"_blank">andrewtomazos@gmail.com</a><br>
</span><span> =C2=A0 =C2=A0 <mailto:<a h=
ref=3D"mailto:andrewtomazos@gmail.com" target=3D"_blank"></a><a href=3D"mai=
lto:andrewtomazos@gmail.com" target=3D"_blank">andrewtomazos@gmail.com</a>&=
gt;>
wrote:<br>
=C2=A0 =C2=A0 > Sorry, but that is pla=
in
wrong.=C2=A0 Extrapolating from a sample =
is
a standard<br>
=C2=A0 =C2=A0 > scientific method used=
in all
kinds of fields.=C2=A0 We can even
calculate a<br>
<br>
=C2=A0 =C2=A0 Yes, especially in fields w=
here
the sample supports a theory that<br>
=C2=A0 =C2=A0 makes predictions,<br>
=C2=A0 =C2=A0 which is hardly the case he=
re.<br>
<br>
=C2=A0 =C2=A0 > confidence interval.=
=C2=A0 Given a
random 1% sample of 3B balls, finding
that<br>
=C2=A0 =C2=A0 > none of the sample are=
red,
we can say that the probability that
less than<br>
=C2=A0 =C2=A0 > X% of the population a=
re red
is Y% - for various pairs of X,Y.=C2=A0
When X is<br>
=C2=A0 =C2=A0 > very low and Y is very=
high,
it should sway any rational person.<br>
<br>
=C2=A0 =C2=A0 Well, you're certainly =
more than
welcome to continue arguing that<br>
=C2=A0 =C2=A0 your sample<br>
=C2=A0 =C2=A0 'proves' that "=
;people wouldn't use
a library facility, because it<br>
=C2=A0 =C2=A0 requires an include".<=
br>
=C2=A0 =C2=A0 I don't think that will=
have the
effect you want it to have.<br>
<br>
<br>
If I find a very large number of
Range-Based For Loops (showing<br>
prevelence of C++11 use), a very large
number of `for (int i =3D 0; i < n;<br=
>
++i)` loops and virtually no
irange-style for loops `for (int i :<br>
irange(N))` or similar, we can
confidently conclude that people
prefer<br>
`for (int i =3D 0; i < n; ++i)` to
`for (int i : irange(N))`.=C2=A0 That wou=
ld<br>
be a completely reasonable and
uncontroversial conclusion from the
data.<br>
</span></blockquote>
<br>
How do you conclude that the motivation
behind this is "preference"?<br>
</blockquote>
<div><br>
</div>
<div>The possibility of implementing and
using an irange-style library solution
`for (int i : irange(N))` came about with
Range-Based For Loops.=C2=A0 Assuming the abo=
ve
data, it shows that people chose not to
implement and use such a solution, and
instead continued using `for (int i =3D 0; i
< N; i++)`.=C2=A0 What other explanation i=
s
there, other than they prefer the latter
for some reason? =C2=A0(As discussed
previously, the reason I speculate for
this preference is the verbosity and
library overhead.)</div>
</div>
</div>
</div>
</blockquote>
</div>
</div>
Maybe they just don't know about range based for?</div>
</blockquote>
<div><br>
</div>
<div>If they didn't know about Range-Based For, then there
wouldn't be "a very large number of Range-Based For =
Loops"
in the data, right?</div>
</div>
</div>
</div>
</blockquote></div></div>
Quite perplexing indeed considering these projects are written and
maintained by a single person.<br></div></blockquote><div><br></div><di=
v>Sorry but I don't understand what you mean.=C2=A0 The projects are no=
t usually written and maintained by one person - and I don't see the re=
levance even if they were.</div></div><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" 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"https://groups.google.com/a/isocpp.org/group=
/std-proposals/">https://groups.google.com/a/isocpp.org/group/std-proposals=
/</a>.<br />
--001a11444c2464fb170529a3dde6--
.
Author: Nicol Bolas <jmckesson@gmail.com>
Date: Mon, 18 Jan 2016 17:23:54 -0800 (PST)
Raw View
------=_Part_2081_1648964696.1453166635090
Content-Type: multipart/alternative;
boundary="----=_Part_2082_1064330233.1453166635090"
------=_Part_2082_1064330233.1453166635090
Content-Type: text/plain; charset=UTF-8
On Monday, January 18, 2016 at 12:21:57 PM UTC-5, Andrew Tomazos wrote:
>
> On Mon, Jan 18, 2016 at 6:01 PM, Ville Voutilainen <ville.vo...@gmail.com
> <javascript:>> wrote:
>
>> Perhaps the first assumption that should be made is that when looking at
>> such
>> a 1% sample, and not finding uses of certain library facilities or
>> their equivalents,
>> is to not think that such a lack of hits in a 1% sample proves
>> anything to anyone.
>> Calling that "evidence" is ridiculous.
>>
>
> Sorry, but that is plain wrong. Extrapolating from a sample is a standard
> scientific method used in all kinds of fields. We can even calculate a
> confidence interval. Given a random 1% sample of 3B balls, finding that
> none of the sample are red, we can say that the probability that less than
> X% of the population are red is Y% - for various pairs of X,Y. When X is
> very low and Y is very high, it should sway any rational person.
>
You are correct in general; 1% of code could be a representative sample for
the purpose of knowing something. Indeed, lots of science is done with
smaller percentages. Granted, not that I necessarily buy your 1% number
(I'm fairly sure there's more than 3 billion LOC in just the videogame
industry alone), but nevermind that.
The problem is *how you select* that 1%. Avoiding selection bias
<https://en.wikipedia.org/wiki/Selection_bias> is very important if you're
actually going to try to draw a conclusion from the result. And the thing
is, I wouldn't have the first clue as to how to know whether a particular
sample doesn't suffer from selection bias.
C++ is so big, so widely used, that it's extremely difficult to say that
your sample set covers all of the bases reasonably well enough.
It'd be one thing to talk about identifier names; there, sheer LOC count
can give you a good idea how much conflict creating a new keyword will
create. But we're talking about an element of coding style here, and that
varies wildly from project to project. So having a sampling size that's
representative of coding doctrine is more important than merely the LOC you
scan.
Not to mention, one of the things you're trying to prove with your LOC scan
is the veracity of this statement:
*C++11 programmers do not use `irange` or some equivalent because they do
not want to.*
That's what you are trying to provide evidence for.
I submit that even if you scanned every piece of C++ code out there and
came up with an accurate system to detect if it was using `irange` or some
equivalent when such an option is available, you still wouldn't have proven
that to be true. Why?
Because all you will have shown is that it is not an idiom in common usage.
Your statement is primarily about *why* it is not in common usage.
You believe that people wouldn't use a standard library solution because
it's one more header. Or because it's (theoretically) longer to type than
your suggestion. And so forth.
Even if you can establish as a fact that it is not a common idiom, you
*cannot* claim to know why this is the case. And therefore, your statement
is meaningless.
For all we know, if the C++ core guidelines included a rule to use such,
and the GSL included such a utility type, maybe in a year, people would be
using that idiom. If Bjarne Stroustrup suddenly started touting the
benefits of it, don't you think more people would start using it?
Some features sell themselves. Lambdas, auto (too well), variadic
templates, etc. Other features need encouragement or advertising before
they're widely used. Who's to say that `irange` wouldn't be such a feature?
Nobody's actively advertising `iota`, despite it being a useful algorithm.
Indeed, lack of advertisement for algorithms is a big factor in why many
don't get used as much as they should.
--
---
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 https://groups.google.com/a/isocpp.org/group/std-proposals/.
------=_Part_2082_1064330233.1453166635090
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
On Monday, January 18, 2016 at 12:21:57 PM UTC-5, Andrew Tomazos wrote:<blo=
ckquote class=3D"gmail_quote" style=3D"margin: 0;margin-left: 0.8ex;border-=
left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"ltr"><div><div class=
=3D"gmail_quote">On Mon, Jan 18, 2016 at 6:01 PM, Ville Voutilainen <span d=
ir=3D"ltr"><<a href=3D"javascript:" target=3D"_blank" gdf-obfuscated-mai=
lto=3D"a3jAQhVnFwAJ" rel=3D"nofollow" onmousedown=3D"this.href=3D'javas=
cript:';return true;" onclick=3D"this.href=3D'javascript:';retu=
rn true;">ville.vo...@gmail.com</a>></span> wrote:<br><blockquote class=
=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padd=
ing-left:1ex">
Perhaps the first assumption that should be made is that when looking at su=
ch<br>
a 1% sample, and not finding uses of certain library facilities or<br>
their equivalents,<br>
is to not think that such a lack of hits in a 1% sample proves<br>
anything to anyone.<br>
Calling that "evidence" is ridiculous.<br></blockquote><div><br><=
/div><div>Sorry, but that is plain wrong.=C2=A0 Extrapolating from a sample=
is a standard scientific method used in all kinds of fields.=C2=A0 We can =
even calculate a confidence interval.=C2=A0 Given a random 1% sample of 3B =
balls, finding that none of the sample are red, we can say that the probabi=
lity that less than X% of the population are red is Y% - for various pairs =
of X,Y.=C2=A0 When X is very low and Y is very high, it should sway any rat=
ional person.</div></div></div></div></blockquote><div><br>You are correct =
in general; 1% of code could be a representative sample for the purpose of =
knowing something. Indeed, lots of science is done with smaller percentages=
.. Granted, not that I necessarily buy your 1% number (I'm fairly sure t=
here's more than 3 billion LOC in just the videogame industry alone), b=
ut nevermind that.<br><br>The problem is <i>how you select</i> that 1%. Avo=
iding <a href=3D"https://en.wikipedia.org/wiki/Selection_bias">selection bi=
as</a> is very important if you're actually going to try to draw a conc=
lusion from the result. And the thing is, I wouldn't have the first clu=
e as to how to know whether a particular sample doesn't suffer from sel=
ection bias.<br><br>C++ is so big, so widely used, that it's extremely =
difficult to say that your sample set covers all of the bases reasonably we=
ll enough.<br><br>It'd be one thing to talk about identifier names; the=
re, sheer LOC count can give you a good idea how much conflict creating a n=
ew keyword will create. But we're talking about an element of coding st=
yle here, and that varies wildly from project to project. So having a sampl=
ing size that's representative of coding doctrine is more important tha=
n merely the LOC you scan.<br><br>Not to mention, one of the things you'=
;re trying to prove with your LOC scan is the veracity of this statement:<b=
r><br><u>C++11 programmers do not use `irange` or some equivalent because t=
hey do not want to.</u><br><br>That's what you are trying to provide ev=
idence for.<br><br>I submit that even if you scanned every piece of C++ cod=
e out there and came up with an accurate system to detect if it was using `=
irange` or some equivalent when such an option is available, you still woul=
dn't have proven that to be true. Why?<br><br>Because all you will have=
shown is that it is not an idiom in common usage. Your statement is primar=
ily about <i>why</i> it is not in common usage.<br><br>You believe that peo=
ple wouldn't use a standard library solution because it's one more =
header. Or because it's (theoretically) longer to type than your sugges=
tion. And so forth.<br><br>Even if you can establish as a fact that it is n=
ot a common idiom, you <i>cannot</i> claim to know why this is the case. An=
d therefore, your statement is meaningless.<br><br>For all we know, if the =
C++ core guidelines included a rule to use such, and the GSL included such =
a utility type, maybe in a year, people would be using that idiom. If Bjarn=
e Stroustrup suddenly started touting the benefits of it, don't you thi=
nk more people would start using it?<br><br>Some features sell themselves. =
Lambdas, auto (too well), variadic templates, etc. Other features need enco=
uragement or advertising before they're widely used. Who's to say t=
hat `irange` wouldn't be such a feature?<br><br>Nobody's actively a=
dvertising `iota`, despite it being a useful algorithm. Indeed, lack of adv=
ertisement for algorithms is a big factor in why many don't get used as=
much as they should.<br></div>
<p></p>
-- <br />
<br />
--- <br />
You received this message because you are subscribed to the Google Groups &=
quot;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"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"https://groups.google.com/a/isocpp.org/group=
/std-proposals/">https://groups.google.com/a/isocpp.org/group/std-proposals=
/</a>.<br />
------=_Part_2082_1064330233.1453166635090--
------=_Part_2081_1648964696.1453166635090--
.
Author: Farid Mehrabi <farid.mehrabi@gmail.com>
Date: Tue, 19 Jan 2016 22:08:40 +0330
Raw View
--001a1135392409df1e0529b430e5
Content-Type: text/plain; charset=UTF-8
regardless of 'index_iterator' being good or bad practice, possibility of
such code makes me laugh. It was right in front of everyone's eyes and I
missed it!!! in facebook I would 'like' it!!
2016-01-18 19:09 GMT+03:30 Matthew Woehlke <mwoehlke.floss@gmail.com>:
> On 2016-01-16 04:38, Andrew Tomazos wrote:
> > Please find attached a rough incomplete 2-page draft entitled "Proposal
> of
> > Index-Based For Loop"
> >
> > Preliminary thoughts appreciated.
>
> Do you propose this as a library feature or a language feature? (Yes, a
> library solution, even for the syntax as written, is possible! See
> attached.)
>
> What about real numbers? A library function to construct a range
> iterator from a value would be much more flexible (could include
> non-default start, non-default step, accommodate real numbers...). Note:
> I don't buy the "old style is more terse" argument; you can't use 'auto'
> as the iterator type with the old-style for loop (not without negating
> the "more terse" argument, at least).
>
> (As for the non-default cases being less common, I've used the "default
> case" dozens of times in many projects, and the non-default many fewer
> times, often zero.)
>
> In any case, I definitely think it's well past time we had something
> like this standardized...
>
> TBH, I think I'd like both. The common case is sufficiently common that
> is does seem that it ought to Just Work. I don't see a reason not to go
> with a pure library solution, though... anyone else?
>
> > It can be shown that the number of general for statements in existing
> > practice that have all these properties is very high (in a later
> > revision of this proposal we will provide a concrete quantification
> > of this proportion).
>
> Uh... yeah. I'd show you examples in real code where I'm using a
> range-iterator function fairly extensively, except I don't have
> permission to release the code (yet). FWIW, some stats from a couple
> projects:
>
> sloccount indexrange uses
> 2k 20+
> 12k ~40
> 17k ~80
>
> ...and I know I have other projects that, if I got the time to port to
> indexrange, would likewise use it a lot.
>
> --
> Matthew
>
> --
>
> ---
> 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
> https://groups.google.com/a/isocpp.org/group/std-proposals/.
>
--
how am I supposed to end the twisted road of your hair in such a dark
night??
unless the candle of your face does shed some light upon my way!!!
--
---
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 https://groups.google.com/a/isocpp.org/group/std-proposals/.
--001a1135392409df1e0529b430e5
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"rtl"><div class=3D"gmail_default" style=3D"text-align:left;font=
-family:'arial narrow',sans-serif;font-size:large" dir=3D"ltr">rega=
rdless of 'index_iterator' being good or bad practice, possibility =
of such code makes me laugh. It was right in front of everyone's eyes a=
nd I missed it!!! in facebook I would 'like' it!!</div></div><div c=
lass=3D"gmail_extra"><br><div class=3D"gmail_quote"><div dir=3D"ltr">2016-0=
1-18 19:09 GMT+03:30 Matthew Woehlke <span dir=3D"ltr"><<a href=3D"mailt=
o:mwoehlke.floss@gmail.com" target=3D"_blank">mwoehlke.floss@gmail.com</a>&=
gt;</span>:</div><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8=
ex;border-left:1px #ccc solid;padding-left:1ex"><span class=3D"">On 2016-01=
-16 04:38, Andrew Tomazos wrote:<br>
> Please find attached a rough incomplete 2-page draft entitled "Pr=
oposal of<br>
> Index-Based For Loop"<br>
><br>
> Preliminary thoughts appreciated.<br>
<br>
</span>Do you propose this as a library feature or a language feature? (Yes=
, a<br>
library solution, even for the syntax as written, is possible! See<br>
attached.)<br>
<br>
What about real numbers? A library function to construct a range<br>
iterator from a value would be much more flexible (could include<br>
non-default start, non-default step, accommodate real numbers...). Note:<br=
>
I don't buy the "old style is more terse" argument; you can&#=
39;t use 'auto'<br>
as the iterator type with the old-style for loop (not without negating<br>
the "more terse" argument, at least).<br>
<br>
(As for the non-default cases being less common, I've used the "de=
fault<br>
case" dozens of times in many projects, and the non-default many fewer=
<br>
times, often zero.)<br>
<br>
In any case, I definitely think it's well past time we had something<br=
>
like this standardized...<br>
<br>
TBH, I think I'd like both. The common case is sufficiently common that=
<br>
is does seem that it ought to Just Work. I don't see a reason not to go=
<br>
with a pure library solution, though... anyone else?<br>
<br>
> It can be shown that the number of general for statements in existing<=
br>
> practice that have all these properties is very high (in a later<br>
> revision of this proposal we will provide a concrete quantification<br=
>
> of this proportion).<br>
<br>
Uh... yeah. I'd show you examples in real code where I'm using a<br=
>
range-iterator function fairly extensively, except I don't have<br>
permission to release the code (yet). FWIW, some stats from a couple<br>
projects:<br>
<br>
=C2=A0 sloccount=C2=A0 =C2=A0 indexrange uses<br>
=C2=A0 2k=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A020+<br>
=C2=A0 12k=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ~40<br>
=C2=A0 17k=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ~80<br>
<br>
....and I know I have other projects that, if I got the time to port to<br>
indexrange, would likewise use it a lot.<br>
<span class=3D"HOEnZb"><font color=3D"#888888"><br>
--<br>
Matthew<br>
</font></span><div class=3D"HOEnZb"><div class=3D"h5"><br>
--<br>
<br>
---<br>
You received this message because you are subscribed to the Google Groups &=
quot;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"mailto:std-proposals%2Bunsubscribe@isocpp.org">std-propo=
sals+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"https://groups.google.com/a/isocpp.org/group=
/std-proposals/" rel=3D"noreferrer" target=3D"_blank">https://groups.google=
..com/a/isocpp.org/group/std-proposals/</a>.<br>
</div></div></blockquote></div><br><br clear=3D"all"><div><br></div>-- <br>=
<div class=3D"gmail_signature"><div dir=3D"rtl"><div><div dir=3D"ltr">how a=
m I supposed to end the twisted road of=C2=A0 your hair in such a dark nigh=
t??<br>unless the candle of your face does shed some light upon my way!!!<b=
r></div></div></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" 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"https://groups.google.com/a/isocpp.org/group=
/std-proposals/">https://groups.google.com/a/isocpp.org/group/std-proposals=
/</a>.<br />
--001a1135392409df1e0529b430e5--
.
Author: Fabio Fracassi <f.fracassi@gmx.net>
Date: Wed, 20 Jan 2016 20:31:37 +0100
Raw View
On 18/01/2016 22:44, Matthew Woehlke wrote:
> On 2016-01-18 16:35, Andrew Tomazos wrote:
>> The possibility of implementing and using an irange-style library solution
>> `for (int i : irange(N))` came about with Range-Based For Loops. Assuming
>> the above data, it shows that people chose not to implement and use such a
>> solution, and instead continued using `for (int i = 0; i < N; i++)`. What
>> other explanation is there, other than they prefer the latter for some
>> reason?
> - They are lazy.
> - The idea didn't occur to them.
> - No such loops have been written since range-based for became an option.
+1
> - They don't understand why it is better.
+many
hesitancy to deprecate old habits especially when it concerns such
prevalent idioms
can greatly inhibit progress.
>> [...] Would you write `for (int i =
>> 0; i < N; ++i)` or would you write `for (int i : N)`? I think most people
>> would write the latter.
> I *already* write:
>
> for (auto const i : indexrange(N))
>
> ...i.e. I already *don't* use the old-style loop.
>
me to.
---
This email has been checked for viruses by Avast antivirus software.
https://www.avast.com/antivirus
--
---
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 https://groups.google.com/a/isocpp.org/group/std-proposals/.
.
Author: Leo Heinsaar <leoheinsaar@gmail.com>
Date: Fri, 7 Oct 2016 05:26:56 -0700 (PDT)
Raw View
------=_Part_1455_1158340153.1475843216986
Content-Type: multipart/alternative;
boundary="----=_Part_1456_113145582.1475843216986"
------=_Part_1456_113145582.1475843216986
Content-Type: text/plain; charset=UTF-8
Quickly glanced through the thread, didn't notice a frequent special case -
would something like the following be too fancy?
for (500)
doSomething(); // 500 times, index irrelevant
On Saturday, January 16, 2016 at 1:38:19 PM UTC+4, Andrew Tomazos wrote:
>
> Please find attached a rough incomplete 2-page draft entitled "Proposal of
> Index-Based For Loop"
>
> Preliminary thoughts appreciated.
>
> Thanks,
> Andrew.
>
>
--
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.
To view this discussion on the web visit https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/0ef1d0f0-a46f-46d4-86b8-dfce0d0336d7%40isocpp.org.
------=_Part_1456_113145582.1475843216986
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><div>Quickly glanced through the thread, didn't notice=
a frequent special case - would something like the following be too fancy?=
</div><div><br></div><div class=3D"prettyprint" style=3D"background-color: =
rgb(250, 250, 250); border-color: rgb(187, 187, 187); border-style: solid; =
border-width: 1px; word-wrap: break-word;"><code class=3D"prettyprint"><div=
class=3D"subprettyprint"><span style=3D"color: #008;" class=3D"styled-by-p=
rettify">for</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: #066;" class=3D"styled-by-prettify">500</span><span =
style=3D"color: #660;" class=3D"styled-by-prettify">)</span><span style=3D"=
color: #000;" class=3D"styled-by-prettify"><br>=C2=A0 =C2=A0 doSomething</s=
pan><span style=3D"color: #660;" class=3D"styled-by-prettify">();</span><sp=
an style=3D"color: #000;" class=3D"styled-by-prettify"> </span><span style=
=3D"color: #800;" class=3D"styled-by-prettify">// 500 times, index irreleva=
nt</span></div></code></div><div><br></div><div><br></div><div>On Saturday,=
January 16, 2016 at 1:38:19 PM UTC+4, Andrew Tomazos wrote:<blockquote cla=
ss=3D"gmail_quote" style=3D"margin: 0;margin-left: 0.8ex;border-left: 1px #=
ccc solid;padding-left: 1ex;"><div dir=3D"ltr">Please find attached a rough=
incomplete 2-page draft entitled "Proposal of Index-Based For Loop&qu=
ot;<div><br></div><div>Preliminary thoughts appreciated.</div><div><br></di=
v><div>Thanks,</div><div>Andrew.</div><div><br></div></div>
</blockquote></div></div>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;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"mailto:std-proposals+unsubscribe@isocpp.org">std-proposa=
ls+unsubscribe@isocpp.org</a>.<br />
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org">std-proposals@isocpp.org</a>.<br />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/0ef1d0f0-a46f-46d4-86b8-dfce0d0336d7%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/0ef1d0f0-a46f-46d4-86b8-dfce0d0336d7=
%40isocpp.org</a>.<br />
------=_Part_1456_113145582.1475843216986--
------=_Part_1455_1158340153.1475843216986--
.
Author: Thiago Macieira <thiago@macieira.org>
Date: Fri, 07 Oct 2016 15:27:43 +0200
Raw View
Em sexta-feira, 7 de outubro de 2016, =C3=A0s 05:26:56 CEST, Leo Heinsaar e=
screveu:
> Quickly glanced through the thread, didn't notice a frequent special case=
-
> would something like the following be too fancy?
>=20
> for (500)
> doSomething(); // 500 times, index irrelevant
I don't think that's frequent enough. In 15 years of doing C++, I can't=20
remember the last time I've needed something like this.
The closest I've had is "run this twice" and something changes in the loop,=
=20
like:
char *content =3D "foo";
for (i =3D 0; i < 2; ++i) {
if (doSomething(content))
break;
content =3D nullptr;
}
And I can't remember when I've last used that. The example above can obviou=
sly=20
be simplified by
if (!doSomething("foo"))
doSomething(nullptr);
--=20
Thiago Macieira - thiago (AT) macieira.info - thiago (AT) kde.org
Software Architect - Intel Open Source Technology Center
--=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/1708821.RI8Ryke5Ij%40tjmaciei-mobl1.
.
Author: Leo Heinsaar <leoheinsaar@gmail.com>
Date: Fri, 7 Oct 2016 06:38:28 -0700 (PDT)
Raw View
------=_Part_1875_169503729.1475847508960
Content-Type: multipart/alternative;
boundary="----=_Part_1876_2009056959.1475847508960"
------=_Part_1876_2009056959.1475847508960
Content-Type: text/plain; charset=UTF-8
>
> > Quickly glanced through the thread, didn't notice a frequent special
> case -
> > would something like the following be too fancy?
> >
> > for (500)
> > doSomething(); // 500 times, index irrelevant
>
> I don't think that's frequent enough. In 15 years of doing C++, I can't
> remember the last time I've needed something like this.
>
Come on, it surely is. Say, in some test code which calls a function 500
times and then measures the average.
--
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.
To view this discussion on the web visit https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/a157b052-806e-4a21-a246-d87632c48550%40isocpp.org.
------=_Part_1876_2009056959.1475847508960
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><blockquote class=3D"gmail_quote" style=3D"margin: 0;margi=
n-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;">> Quickly =
glanced through the thread, didn't notice a frequent special case -
<br>> would something like the following be too fancy?
<br>>=20
<br>> for (500)
<br>> =C2=A0 =C2=A0 doSomething(); // 500 times, index irrelevant
<br>
<br>I don't think that's frequent enough. In 15 years of doing C++,=
I can't=20
<br>remember the last time I've needed something like this.<br></blockq=
uote><div><br></div><div>Come on, it surely is. Say, in some test code whic=
h calls a function 500 times and then measures the average.</div></div>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;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"mailto:std-proposals+unsubscribe@isocpp.org">std-proposa=
ls+unsubscribe@isocpp.org</a>.<br />
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org">std-proposals@isocpp.org</a>.<br />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/a157b052-806e-4a21-a246-d87632c48550%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/a157b052-806e-4a21-a246-d87632c48550=
%40isocpp.org</a>.<br />
------=_Part_1876_2009056959.1475847508960--
------=_Part_1875_169503729.1475847508960--
.
Author: Daker Fernandes Pinheiro <dakerfp@gmail.com>
Date: Fri, 7 Oct 2016 10:44:42 -0300
Raw View
--001a114a2118ff381b053e469d50
Content-Type: text/plain; charset=UTF-8
#define repeat(N) for (int __i = 0; __i < N; __i++)
<:o)
2016-10-07 10:38 GMT-03:00 Leo Heinsaar <leoheinsaar@gmail.com>:
> > Quickly glanced through the thread, didn't notice a frequent special
>> case -
>> > would something like the following be too fancy?
>> >
>> > for (500)
>> > doSomething(); // 500 times, index irrelevant
>>
>> I don't think that's frequent enough. In 15 years of doing C++, I can't
>> remember the last time I've needed something like this.
>>
>
> Come on, it surely is. Say, in some test code which calls a function 500
> times and then measures the average.
>
> --
> 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.
> To view this discussion on the web visit https://groups.google.com/a/
> isocpp.org/d/msgid/std-proposals/a157b052-806e-4a21-
> a246-d87632c48550%40isocpp.org
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/a157b052-806e-4a21-a246-d87632c48550%40isocpp.org?utm_medium=email&utm_source=footer>
> .
>
--
Daker Fernandes Pinheiro
http://codecereal.blogspot.com
--
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.
To view this discussion on the web visit https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAHhpqgZG7EdD20jQLJ53wLJdp8tEE%2BYFXdCkmU-GEsPjXxb%2Bng%40mail.gmail.com.
--001a114a2118ff381b053e469d50
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><div>#define repeat(N) for (int __i =3D 0; __i < N; __i=
++)<br><br></div><:o)<br></div><div class=3D"gmail_extra"><br><div class=
=3D"gmail_quote">2016-10-07 10:38 GMT-03:00 Leo Heinsaar <span dir=3D"ltr">=
<<a href=3D"mailto:leoheinsaar@gmail.com" target=3D"_blank">leoheinsaar@=
gmail.com</a>></span>:<br><blockquote class=3D"gmail_quote" style=3D"mar=
gin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr=
"><span class=3D""><blockquote class=3D"gmail_quote" style=3D"margin:0;marg=
in-left:0.8ex;border-left:1px #ccc solid;padding-left:1ex">> Quickly gla=
nced through the thread, didn't notice a frequent special case -
<br>> would something like the following be too fancy?
<br>>=20
<br>> for (500)
<br>> =C2=A0 =C2=A0 doSomething(); // 500 times, index irrelevant
<br>
<br>I don't think that's frequent enough. In 15 years of doing C++,=
I can't=20
<br>remember the last time I've needed something like this.<br></blockq=
uote><div><br></div></span><div>Come on, it surely is. Say, in some test co=
de which calls a function 500 times and then measures the average.</div></d=
iv><span class=3D"">
<p></p>
-- <br>
You received this message because you are subscribed to the Google Groups &=
quot;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"mailto:std-proposals+unsubscribe@isocpp.org" target=3D"_=
blank">std-proposals+unsubscribe@<wbr>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></span>
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/a157b052-806e-4a21-a246-d87632c48550%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter" target=3D"_blank">=
https://groups.google.com/a/<wbr>isocpp.org/d/msgid/std-<wbr>proposals/a157=
b052-806e-4a21-<wbr>a246-d87632c48550%40isocpp.org</a><wbr>.<br>
</blockquote></div><br><br clear=3D"all"><br>-- <br><div class=3D"gmail_sig=
nature" data-smartmail=3D"gmail_signature">Daker Fernandes Pinheiro<br><a h=
ref=3D"http://codecereal.blogspot.com" target=3D"_blank">http://codecereal.=
blogspot.com</a><br></div>
</div>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;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"mailto:std-proposals+unsubscribe@isocpp.org">std-proposa=
ls+unsubscribe@isocpp.org</a>.<br />
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org">std-proposals@isocpp.org</a>.<br />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAHhpqgZG7EdD20jQLJ53wLJdp8tEE%2BYFXd=
CkmU-GEsPjXxb%2Bng%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfooter"=
>https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAHhpqgZG7EdD=
20jQLJ53wLJdp8tEE%2BYFXdCkmU-GEsPjXxb%2Bng%40mail.gmail.com</a>.<br />
--001a114a2118ff381b053e469d50--
.
Author: Leo Heinsaar <leoheinsaar@gmail.com>
Date: Fri, 7 Oct 2016 07:30:45 -0700 (PDT)
Raw View
------=_Part_6_701967168.1475850646044
Content-Type: multipart/alternative;
boundary="----=_Part_7_1092095898.1475850646044"
------=_Part_7_1092095898.1475850646044
Content-Type: text/plain; charset=UTF-8
On Friday, October 7, 2016 at 5:45:04 PM UTC+4, Daker Fernandes Pinheiro
wrote:
#define repeat(N) for (int __i = 0; __i < N; __i++)
>
Sure, I just thought that since we already have one special case,
for (;;)
to mean forever,
for (500)
might complement the index-based for loop and have a similar meaning.
--
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.
To view this discussion on the web visit https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/9da42380-9f37-45eb-b609-fa7058c9c005%40isocpp.org.
------=_Part_7_1092095898.1475850646044
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr">On Friday, October 7, 2016 at 5:45:04 PM UTC+4, Daker Fern=
andes Pinheiro wrote:<div><br><div><div><blockquote class=3D"gmail_quote" s=
tyle=3D"margin: 0;margin-left: 0.8ex;border-left: 1px #ccc solid;padding-le=
ft: 1ex;"><div dir=3D"ltr"><div>#define repeat(N) for (int __i =3D 0; __i &=
lt; N; __i++)</div></div></blockquote><div><br></div><div>Sure, I just thou=
ght that since we already have one special case,</div><div>=C2=A0=C2=A0<div=
class=3D"prettyprint" style=3D"background-color: rgb(250, 250, 250); borde=
r-color: rgb(187, 187, 187); border-style: solid; border-width: 1px; word-w=
rap: break-word;"><code class=3D"prettyprint"><div class=3D"subprettyprint"=
><span style=3D"color: #008;" class=3D"styled-by-prettify">for</span><span =
style=3D"color: #000;" class=3D"styled-by-prettify"> </span><span style=3D"=
color: #660;" class=3D"styled-by-prettify">(;;)</span></div></code></div><d=
iv><br></div>to mean forever,</div><div>=C2=A0=C2=A0<div class=3D"prettypri=
nt" style=3D"background-color: rgb(250, 250, 250); border-color: rgb(187, 1=
87, 187); border-style: solid; border-width: 1px; word-wrap: break-word;"><=
code class=3D"prettyprint"><div class=3D"subprettyprint"><span style=3D"col=
or: #008;" class=3D"styled-by-prettify">for</span><span style=3D"color: #00=
0;" class=3D"styled-by-prettify"> </span><span style=3D"color: #660;" class=
=3D"styled-by-prettify">(</span><span style=3D"color: #066;" class=3D"style=
d-by-prettify">500</span><span style=3D"color: #660;" class=3D"styled-by-pr=
ettify">)</span></div></code></div><br> might complement the index-based fo=
r loop and have a similar meaning.</div></div></div></div></div>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;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"mailto:std-proposals+unsubscribe@isocpp.org">std-proposa=
ls+unsubscribe@isocpp.org</a>.<br />
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org">std-proposals@isocpp.org</a>.<br />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/9da42380-9f37-45eb-b609-fa7058c9c005%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/9da42380-9f37-45eb-b609-fa7058c9c005=
%40isocpp.org</a>.<br />
------=_Part_7_1092095898.1475850646044--
------=_Part_6_701967168.1475850646044--
.
Author: =?UTF-8?Q?Micha=C5=82_Dominiak?= <griwes@griwes.info>
Date: Fri, 07 Oct 2016 14:48:22 +0000
Raw View
--94eb2c0bb45013cc15053e478155
Content-Type: text/plain; charset=UTF-8
That's not a special case, that's just a curious example of applying a very
general rule.
On Fri, Oct 7, 2016 at 4:30 PM Leo Heinsaar <leoheinsaar@gmail.com> wrote:
> On Friday, October 7, 2016 at 5:45:04 PM UTC+4, Daker Fernandes Pinheiro
> wrote:
>
> #define repeat(N) for (int __i = 0; __i < N; __i++)
>
>
> Sure, I just thought that since we already have one special case,
>
> for (;;)
>
> to mean forever,
>
> for (500)
>
> might complement the index-based for loop and have a similar meaning.
>
> --
> 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.
> To view this discussion on the web visit
> https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/9da42380-9f37-45eb-b609-fa7058c9c005%40isocpp.org
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/9da42380-9f37-45eb-b609-fa7058c9c005%40isocpp.org?utm_medium=email&utm_source=footer>
> .
>
--
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.
To view this discussion on the web visit https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAPCFJdRsb2ROdyZNTDkHnt%2Bp_36_0%2BY0So4zpAoaMmWR93tbCg%40mail.gmail.com.
--94eb2c0bb45013cc15053e478155
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr">That's not a special case, that's just a curious e=
xample of applying a very general rule.</div><br><div class=3D"gmail_quote"=
><div dir=3D"ltr">On Fri, Oct 7, 2016 at 4:30 PM Leo Heinsaar <<a href=
=3D"mailto:leoheinsaar@gmail.com">leoheinsaar@gmail.com</a>> wrote:<br><=
/div><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-le=
ft:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr" class=3D"gmail_msg">On=
Friday, October 7, 2016 at 5:45:04 PM UTC+4, Daker Fernandes Pinheiro wrot=
e:</div><div dir=3D"ltr" class=3D"gmail_msg"><div class=3D"gmail_msg"><div =
class=3D"gmail_msg"><div class=3D"gmail_msg"><blockquote class=3D"gmail_quo=
te gmail_msg" style=3D"margin:0;margin-left:0.8ex;border-left:1px #ccc soli=
d;padding-left:1ex"><div dir=3D"ltr" class=3D"gmail_msg"><div class=3D"gmai=
l_msg">#define repeat(N) for (int __i =3D 0; __i < N; __i++)</div></div>=
</blockquote><div class=3D"gmail_msg"><br class=3D"gmail_msg"></div></div><=
/div></div></div><div dir=3D"ltr" class=3D"gmail_msg"><div class=3D"gmail_m=
sg"><div class=3D"gmail_msg"><div class=3D"gmail_msg"><div class=3D"gmail_m=
sg">Sure, I just thought that since we already have one special case,</div>=
<div class=3D"gmail_msg">=C2=A0=C2=A0<div class=3D"m_6054572138827343241pre=
ttyprint gmail_msg" style=3D"background-color:rgb(250,250,250);border-color=
:rgb(187,187,187);border-style:solid;border-width:1px;word-wrap:break-word"=
><code class=3D"m_6054572138827343241prettyprint gmail_msg"><div class=3D"m=
_6054572138827343241subprettyprint gmail_msg"><span style=3D"color:#008" cl=
ass=3D"m_6054572138827343241styled-by-prettify gmail_msg">for</span><span s=
tyle=3D"color:#000" class=3D"m_6054572138827343241styled-by-prettify gmail_=
msg"> </span><span style=3D"color:#660" class=3D"m_6054572138827343241style=
d-by-prettify gmail_msg">(;;)</span></div></code></div><div class=3D"gmail_=
msg"><br class=3D"gmail_msg"></div>to mean forever,</div><div class=3D"gmai=
l_msg">=C2=A0=C2=A0<div class=3D"m_6054572138827343241prettyprint gmail_msg=
" style=3D"background-color:rgb(250,250,250);border-color:rgb(187,187,187);=
border-style:solid;border-width:1px;word-wrap:break-word"><code class=3D"m_=
6054572138827343241prettyprint gmail_msg"><div class=3D"m_60545721388273432=
41subprettyprint gmail_msg"><span style=3D"color:#008" class=3D"m_605457213=
8827343241styled-by-prettify gmail_msg">for</span><span style=3D"color:#000=
" class=3D"m_6054572138827343241styled-by-prettify gmail_msg"> </span><span=
style=3D"color:#660" class=3D"m_6054572138827343241styled-by-prettify gmai=
l_msg">(</span><span style=3D"color:#066" class=3D"m_6054572138827343241sty=
led-by-prettify gmail_msg">500</span><span style=3D"color:#660" class=3D"m_=
6054572138827343241styled-by-prettify gmail_msg">)</span></div></code></div=
><br class=3D"gmail_msg"> might complement the index-based for loop and hav=
e a similar meaning.</div></div></div></div></div>
<p class=3D"gmail_msg"></p>
-- <br class=3D"gmail_msg">
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" group.<br class=3D"gmail_msg=
">
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" class=3D"gm=
ail_msg" target=3D"_blank">std-proposals+unsubscribe@isocpp.org</a>.<br cla=
ss=3D"gmail_msg">
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" class=3D"gmail_msg" target=3D"_blank">std-proposals@isocpp.org</a>.<b=
r class=3D"gmail_msg">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/9da42380-9f37-45eb-b609-fa7058c9c005%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter" class=3D"gmail_msg=
" target=3D"_blank">https://groups.google.com/a/isocpp.org/d/msgid/std-prop=
osals/9da42380-9f37-45eb-b609-fa7058c9c005%40isocpp.org</a>.<br class=3D"gm=
ail_msg">
</blockquote></div>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;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"mailto:std-proposals+unsubscribe@isocpp.org">std-proposa=
ls+unsubscribe@isocpp.org</a>.<br />
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org">std-proposals@isocpp.org</a>.<br />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAPCFJdRsb2ROdyZNTDkHnt%2Bp_36_0%2BY0=
So4zpAoaMmWR93tbCg%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfooter"=
>https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAPCFJdRsb2RO=
dyZNTDkHnt%2Bp_36_0%2BY0So4zpAoaMmWR93tbCg%40mail.gmail.com</a>.<br />
--94eb2c0bb45013cc15053e478155--
.
Author: Leo Heinsaar <leoheinsaar@gmail.com>
Date: Fri, 7 Oct 2016 08:32:07 -0700 (PDT)
Raw View
------=_Part_1679_788110968.1475854327246
Content-Type: multipart/alternative;
boundary="----=_Part_1680_854264115.1475854327246"
------=_Part_1680_854264115.1475854327246
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
On Friday, October 7, 2016 at 6:48:35 PM UTC+4, Micha=C5=82 Dominiak wrote:
>
> That's not a special case, that's just a curious example of applying a=20
> very general rule.
>
*"curious"* is hardly a technical term, whereas *"example of applying a=20
very general rule"* is, by definition, a special case.
--=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/46f26731-d459-4155-ba58-6faaf5877bfd%40isocpp.or=
g.
------=_Part_1680_854264115.1475854327246
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr">On Friday, October 7, 2016 at 6:48:35 PM UTC+4, Micha=C5=
=82 Dominiak wrote:<blockquote class=3D"gmail_quote" style=3D"margin: 0;mar=
gin-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D=
"ltr">That's not a special case, that's just a curious example of a=
pplying a very general rule.</div></blockquote><div><br></div><div><i>"=
;curious"</i> is hardly a technical term, whereas <i>"example of =
applying a very general rule"</i> is, by definition, a special case.</=
div></div>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;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"mailto:std-proposals+unsubscribe@isocpp.org">std-proposa=
ls+unsubscribe@isocpp.org</a>.<br />
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org">std-proposals@isocpp.org</a>.<br />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/46f26731-d459-4155-ba58-6faaf5877bfd%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/46f26731-d459-4155-ba58-6faaf5877bfd=
%40isocpp.org</a>.<br />
------=_Part_1680_854264115.1475854327246--
------=_Part_1679_788110968.1475854327246--
.
Author: Greg Marr <gregmmarr@gmail.com>
Date: Fri, 7 Oct 2016 10:18:58 -0700 (PDT)
Raw View
------=_Part_640_1735423479.1475860738704
Content-Type: multipart/alternative;
boundary="----=_Part_641_422372358.1475860738704"
------=_Part_641_422372358.1475860738704
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
On Friday, October 7, 2016 at 11:32:07 AM UTC-4, Leo Heinsaar wrote:
>
> On Friday, October 7, 2016 at 6:48:35 PM UTC+4, Micha=C5=82 Dominiak wrot=
e:
>>
>> That's not a special case, that's just a curious example of applying a=
=20
>> very general rule.
>>
>
> *"curious"* is hardly a technical term, whereas *"example of applying a=
=20
> very general rule"* is, by definition, a special case.
>
No it's not. There is no special case in the standard that allows this.=20
There is nothing that says (for example) "for(;;) is allowed and results in=
=20
an infinite loop". It's just a result of applying the rule that each of=20
the three parts of the for loop can be left blank. It's the same rule that=
=20
allows "for( ; i < N; ++i)" or "for(int i =3D 0; i < N; )".
--=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/055f1940-4f36-48be-963b-0ad608dd4dd4%40isocpp.or=
g.
------=_Part_641_422372358.1475860738704
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr">On Friday, October 7, 2016 at 11:32:07 AM UTC-4, Leo Heins=
aar 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"ltr">On =
Friday, October 7, 2016 at 6:48:35 PM UTC+4, Micha=C5=82 Dominiak wrote:<bl=
ockquote class=3D"gmail_quote" style=3D"margin:0;margin-left:0.8ex;border-l=
eft:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr">That's not a spec=
ial case, that's just a curious example of applying a very general rule=
..</div></blockquote><div><br></div><div><i>"curious"</i> is hardl=
y a technical term, whereas <i>"example of applying a very general rul=
e"</i> is, by definition, a special case.</div></div></blockquote><div=
><br></div><div>No it's not. =C2=A0There is no special case in the stan=
dard that allows this. There is nothing that says (for example) "for(;=
;) is allowed and results in an infinite loop". =C2=A0It's just a =
result of applying the rule that each of the three parts of the for loop ca=
n be left blank. =C2=A0It's the same rule that allows "for( ; i &l=
t; N; ++i)" or "for(int i =3D 0; i < N; )".</div><div><br=
></div></div>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;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"mailto:std-proposals+unsubscribe@isocpp.org">std-proposa=
ls+unsubscribe@isocpp.org</a>.<br />
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org">std-proposals@isocpp.org</a>.<br />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/055f1940-4f36-48be-963b-0ad608dd4dd4%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/055f1940-4f36-48be-963b-0ad608dd4dd4=
%40isocpp.org</a>.<br />
------=_Part_641_422372358.1475860738704--
------=_Part_640_1735423479.1475860738704--
.
Author: Leo Heinsaar <leoheinsaar@gmail.com>
Date: Fri, 7 Oct 2016 10:39:15 -0700 (PDT)
Raw View
------=_Part_2114_1100409944.1475861956031
Content-Type: multipart/alternative;
boundary="----=_Part_2115_388761343.1475861956031"
------=_Part_2115_388761343.1475861956031
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
On Friday, October 7, 2016 at 9:18:58 PM UTC+4, Greg Marr wrote:
>
> On Friday, October 7, 2016 at 11:32:07 AM UTC-4, Leo Heinsaar wrote:
>>
>> On Friday, October 7, 2016 at 6:48:35 PM UTC+4, Micha=C5=82 Dominiak wro=
te:
>>>
>>> That's not a special case, that's just a curious example of applying a=
=20
>>> very general rule.
>>>
>>
>> *"curious"* is hardly a technical term, whereas *"example of applying a=
=20
>> very general rule"* is, by definition, a special case.
>>
>
> No it's not. There is no special case in the standard that allows this.=
=20
> There is nothing that says (for example) "for(;;) is allowed and results =
in=20
> an infinite loop". It's just a result of applying the rule that each of=
=20
> the three parts of the for loop can be left blank. It's the same rule th=
at=20
> allows "for( ; i < N; ++i)" or "for(int i =3D 0; i < N; )".
>
I didn't mean "special case" in terms of the standard (if indeed it has=20
such terms), but in a mathematical sense, by which "for (;;)" is as special=
=20
case of "for(int i=3D0 ; i < N; ++i)" as it gets (the special case where N =
is=20
infinity).
--=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/7363d1c4-0f1d-4dc5-86a9-665d65ecb7e7%40isocpp.or=
g.
------=_Part_2115_388761343.1475861956031
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr">On Friday, October 7, 2016 at 9:18:58 PM UTC+4, Greg Marr =
wrote:<blockquote class=3D"gmail_quote" style=3D"margin: 0;margin-left: 0.8=
ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"ltr">On Frid=
ay, October 7, 2016 at 11:32:07 AM UTC-4, Leo Heinsaar wrote:<blockquote cl=
ass=3D"gmail_quote" style=3D"margin:0;margin-left:0.8ex;border-left:1px #cc=
c solid;padding-left:1ex"><div dir=3D"ltr">On Friday, October 7, 2016 at 6:=
48:35 PM UTC+4, Micha=C5=82 Dominiak wrote:<blockquote class=3D"gmail_quote=
" style=3D"margin:0;margin-left:0.8ex;border-left:1px #ccc solid;padding-le=
ft:1ex"><div dir=3D"ltr">That's not a special case, that's just a c=
urious example of applying a very general rule.</div></blockquote><div><br>=
</div><div><i>"curious"</i> is hardly a technical term, whereas <=
i>"example of applying a very general rule"</i> is, by definition=
, a special case.</div></div></blockquote><div><br></div><div>No it's n=
ot. =C2=A0There is no special case in the standard that allows this. There =
is nothing that says (for example) "for(;;) is allowed and results in =
an infinite loop". =C2=A0It's just a result of applying the rule t=
hat each of the three parts of the for loop can be left blank. =C2=A0It'=
;s the same rule that allows "for( ; i < N; ++i)" or "for=
(int i =3D 0; i < N; )".</div></div></blockquote><div><br></div><di=
v>I didn't mean "special case" in terms of the standard (if i=
ndeed it has such terms), but in a mathematical sense, by which "for (=
;;)" is as special case of "for(int i=3D0 ; i < N; ++i)" =
as it gets (the special case where N is infinity).</div></div>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;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"mailto:std-proposals+unsubscribe@isocpp.org">std-proposa=
ls+unsubscribe@isocpp.org</a>.<br />
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org">std-proposals@isocpp.org</a>.<br />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/7363d1c4-0f1d-4dc5-86a9-665d65ecb7e7%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/7363d1c4-0f1d-4dc5-86a9-665d65ecb7e7=
%40isocpp.org</a>.<br />
------=_Part_2115_388761343.1475861956031--
------=_Part_2114_1100409944.1475861956031--
.
Author: "D. B." <db0451@gmail.com>
Date: Fri, 7 Oct 2016 19:39:14 +0100
Raw View
--047d7b86d05a1f1ad1053e4aba6f
Content-Type: text/plain; charset=UTF-8
^ That does seem like a special case to me. Since when does an empty
statement (the middle, condition) evaluate to boolean true? Serious
question. Every now and again, I think about this, and it doesn't make
sense to me.
but anyway, for the purposes of 'Do X N times', I am perfectly content to
write for (unsigned i = N; i--;) { X }
(and yes, I am a dastardly and unapologetic user of unsigned variables)
--
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.
To view this discussion on the web visit https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CACGiwhHsWG9dKQnUoWTTCzw50c8aH63BUwRgEwVdGDwNg1LvKg%40mail.gmail.com.
--047d7b86d05a1f1ad1053e4aba6f
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><div><div>^ That does seem like a special case to me. Sinc=
e when does an empty statement (the middle, condition) evaluate to boolean =
true? Serious question. Every now and again, I think about this, and it doe=
sn't make sense to me.<br><br></div>but anyway, for the purposes of =
9;Do X N times', I am perfectly content to write <span style=3D"font-fa=
mily:monospace,monospace">for (unsigned i =3D N; i--;) { X }</span><i><span=
style=3D"font-family:monospace,monospace"><br></span><br></i></div>(and ye=
s, I am a dastardly and unapologetic user of unsigned variables)<br><br></d=
iv>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;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"mailto:std-proposals+unsubscribe@isocpp.org">std-proposa=
ls+unsubscribe@isocpp.org</a>.<br />
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org">std-proposals@isocpp.org</a>.<br />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CACGiwhHsWG9dKQnUoWTTCzw50c8aH63BUwRg=
EwVdGDwNg1LvKg%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfooter">htt=
ps://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CACGiwhHsWG9dKQnU=
oWTTCzw50c8aH63BUwRgEwVdGDwNg1LvKg%40mail.gmail.com</a>.<br />
--047d7b86d05a1f1ad1053e4aba6f--
.
Author: Barry Revzin <barry.revzin@gmail.com>
Date: Fri, 7 Oct 2016 12:08:09 -0700 (PDT)
Raw View
------=_Part_641_966064948.1475867289727
Content-Type: multipart/alternative;
boundary="----=_Part_642_984357066.1475867289728"
------=_Part_642_984357066.1475867289728
Content-Type: text/plain; charset=UTF-8
>
>
> No it's not. There is no special case in the standard that allows this.
> There is nothing that says (for example) "for(;;) is allowed and results in
> an infinite loop". It's just a result of applying the rule that each of
> the three parts of the for loop can be left blank. It's the same rule that
> allows "for( ; i < N; ++i)" or "for(int i = 0; i < N; )".
>
>
Yes there is. [stmt.for] has explicit wording for empty condition:
Either or both of the condition and the expression can be omitted. A
> missing condition makes the implied
while clause equivalent to while(true)
--
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.
To view this discussion on the web visit https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/cb0b3b00-1a84-42fb-85ff-b0f5b1ce0a1d%40isocpp.org.
------=_Part_642_984357066.1475867289728
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><blockquote class=3D"gmail_quote" style=3D"margin: 0;margi=
n-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"l=
tr"><div><br></div><div>No it's not. =C2=A0There is no special case in =
the standard that allows this. There is nothing that says (for example) &qu=
ot;for(;;) is allowed and results in an infinite loop". =C2=A0It's=
just a result of applying the rule that each of the three parts of the for=
loop can be left blank. =C2=A0It's the same rule that allows "for=
( ; i < N; ++i)" or "for(int i =3D 0; i < N; )".</div>=
<div><br></div></div></blockquote><div><br></div><div>Yes there is. [stmt.f=
or] has explicit wording for empty condition:</div><div><br></div><blockquo=
te class=3D"gmail_quote" style=3D"margin: 0px 0px 0px 0.8ex; border-left: 1=
px solid rgb(204, 204, 204); padding-left: 1ex;">Either or both of the cond=
ition and the expression can be omitted. A missing condition makes the impl=
ied</blockquote><blockquote class=3D"gmail_quote" style=3D"margin: 0px 0px =
0px 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;"><=
font face=3D"courier new, monospace">while </font>clause equivalent to <fon=
t face=3D"courier new, monospace">while(true)</font></blockquote><div><br><=
/div><div>=C2=A0</div></div>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;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"mailto:std-proposals+unsubscribe@isocpp.org">std-proposa=
ls+unsubscribe@isocpp.org</a>.<br />
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org">std-proposals@isocpp.org</a>.<br />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/cb0b3b00-1a84-42fb-85ff-b0f5b1ce0a1d%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/cb0b3b00-1a84-42fb-85ff-b0f5b1ce0a1d=
%40isocpp.org</a>.<br />
------=_Part_642_984357066.1475867289728--
------=_Part_641_966064948.1475867289727--
.
Author: szollosi.lorand@gmail.com
Date: Fri, 7 Oct 2016 14:09:06 -0700 (PDT)
Raw View
------=_Part_938_1956532925.1475874546187
Content-Type: multipart/alternative;
boundary="----=_Part_939_1737284056.1475874546187"
------=_Part_939_1737284056.1475874546187
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
Hi,
#define EAT_auto
#define CAT1(X, Y) X ## Y
#define CAT(X, Y) CAT1(X, Y)
#define \
times_auto(X) \
for (union \
{ \
int X * 0 + sizeof(int) * 8; \
int j =3D (true ? X, j) =3D 0; \
}; i < (false ? X); true ? ++ X)
#define times(X) times_auto(CAT(EAT_, X))
extern void f(int);
void a()
{
const int n =3D 3;
times(auto i : n) {
f(i);
}
}
So far it only works for const n and auto i. I'm unsure if that's a problem=
=20
at all - if you can modify (ok, destroy) n then `while(n--)` does the trick=
=20
in reverse order [1].
Wish we had constexpr?: operator like if constexpr(), that'd solve a lot of=
=20
things...
If you're worried about the performance, https://godbolt.org/g/ioV3XB
(Btw, I like the idea, I'm just saying that a macro can do this for you.)
Or make it auto-less, that's far easier - you might make type spec an=20
optional parameter.=20
Thanks,
-lorro
[1] Still in TOP10,=20
http://stackoverflow.com/questions/1642028/what-is-the-name-of-the-operator=
-in-c
2016. janu=C3=A1r 16., szombat 10:38:19 UTC+1 id=C5=91pontban Andrew Tomazo=
s a=20
k=C3=B6vetkez=C5=91t =C3=ADrta:
>
> Please find attached a rough incomplete 2-page draft entitled "Proposal o=
f=20
> Index-Based For Loop"
>
> Preliminary thoughts appreciated.
>
> Thanks,
> Andrew.
>
>
--=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/05f82d7c-4132-42d1-acc8-657a53626932%40isocpp.or=
g.
------=_Part_939_1737284056.1475874546187
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr">Hi,<br><br><div class=3D"prettyprint" style=3D"background-=
color: rgb(250, 250, 250); border-color: rgb(187, 187, 187); border-style: =
solid; border-width: 1px; word-wrap: break-word;"><code class=3D"prettyprin=
t"><div class=3D"subprettyprint"><span style=3D"color: #800;" class=3D"styl=
ed-by-prettify">#define</span><span style=3D"color: #000;" class=3D"styled-=
by-prettify"> EAT_auto<br></span><span style=3D"color: #800;" class=3D"styl=
ed-by-prettify">#define</span><span style=3D"color: #000;" class=3D"styled-=
by-prettify"> CAT1</span><span style=3D"color: #660;" class=3D"styled-by-pr=
ettify">(</span><span style=3D"color: #000;" class=3D"styled-by-prettify">X=
</span><span style=3D"color: #660;" class=3D"styled-by-prettify">,</span><s=
pan style=3D"color: #000;" class=3D"styled-by-prettify"> Y</span><span styl=
e=3D"color: #660;" class=3D"styled-by-prettify">)</span><span style=3D"colo=
r: #000;" class=3D"styled-by-prettify"> X </span><span style=3D"color: #800=
;" class=3D"styled-by-prettify">## Y</span><span style=3D"color: #000;" cla=
ss=3D"styled-by-prettify"><br></span><span style=3D"color: #800;" class=3D"=
styled-by-prettify">#define</span><span style=3D"color: #000;" class=3D"sty=
led-by-prettify"> CAT</span><span style=3D"color: #660;" class=3D"styled-by=
-prettify">(</span><span style=3D"color: #000;" class=3D"styled-by-prettify=
">X</span><span style=3D"color: #660;" class=3D"styled-by-prettify">,</span=
><span style=3D"color: #000;" class=3D"styled-by-prettify"> Y</span><span s=
tyle=3D"color: #660;" class=3D"styled-by-prettify">)</span><span style=3D"c=
olor: #000;" class=3D"styled-by-prettify"> CAT1</span><span style=3D"color:=
#660;" class=3D"styled-by-prettify">(</span><span style=3D"color: #000;" c=
lass=3D"styled-by-prettify">X</span><span style=3D"color: #660;" class=3D"s=
tyled-by-prettify">,</span><span style=3D"color: #000;" class=3D"styled-by-=
prettify"> Y</span><span style=3D"color: #660;" class=3D"styled-by-prettify=
">)</span><span style=3D"color: #000;" class=3D"styled-by-prettify"><br><br=
></span><span style=3D"color: #800;" class=3D"styled-by-prettify">#define</=
span><span style=3D"color: #000;" class=3D"styled-by-prettify"> =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0</span=
><span style=3D"color: #660;" class=3D"styled-by-prettify">\</span><span st=
yle=3D"color: #000;" class=3D"styled-by-prettify"><br>times_auto</span><spa=
n style=3D"color: #660;" class=3D"styled-by-prettify">(</span><span style=
=3D"color: #000;" class=3D"styled-by-prettify">X</span><span style=3D"color=
: #660;" class=3D"styled-by-prettify">)</span><span style=3D"color: #000;" =
class=3D"styled-by-prettify"> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0</span><span style=3D"color: #660;" class=3D"styled-by-prettif=
y">\</span><span style=3D"color: #000;" class=3D"styled-by-prettify"><br>=
=C2=A0 =C2=A0 </span><span style=3D"color: #008;" class=3D"styled-by-pretti=
fy">for</span><span style=3D"color: #000;" class=3D"styled-by-prettify"> </=
span><span style=3D"color: #660;" class=3D"styled-by-prettify">(</span><spa=
n style=3D"color: #008;" class=3D"styled-by-prettify">union</span><span sty=
le=3D"color: #000;" class=3D"styled-by-prettify"> =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 </span><span style=3D"color: #660;" class=3D"st=
yled-by-prettify">\</span><span style=3D"color: #000;" class=3D"styled-by-p=
rettify"><br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0</span><span style=3D"color:=
#660;" class=3D"styled-by-prettify">{</span><span style=3D"color: #000;" c=
lass=3D"styled-by-prettify"> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 </span><span style=3D"color: #660;" class=3D"styled-by=
-prettify">\</span><span style=3D"color: #000;" class=3D"styled-by-prettify=
"><br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0</span><span style=3D=
"color: #008;" class=3D"styled-by-prettify">int</span><span style=3D"color:=
#000;" class=3D"styled-by-prettify"> X </span><span 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: #066;" class=3D"styled-b=
y-prettify">0</span><span style=3D"color: #000;" class=3D"styled-by-prettif=
y"> </span><span style=3D"color: #660;" class=3D"styled-by-prettify">+</spa=
n><span style=3D"color: #000;" class=3D"styled-by-prettify"> </span><span s=
tyle=3D"color: #008;" class=3D"styled-by-prettify">sizeof</span><span style=
=3D"color: #660;" class=3D"styled-by-prettify">(</span><span style=3D"color=
: #008;" class=3D"styled-by-prettify">int</span><span style=3D"color: #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"> </span><span style=3D"color: #066;" class=3D"styled-by-prettify">8</=
span><span style=3D"color: #660;" class=3D"styled-by-prettify">;</span><spa=
n style=3D"color: #000;" class=3D"styled-by-prettify"> =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0</span><span style=3D"color: #660;" class=3D"styled-by-pretti=
fy">\</span><span style=3D"color: #000;" class=3D"styled-by-prettify"><br>=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0</span><span style=3D"color=
: #008;" class=3D"styled-by-prettify">int</span><span style=3D"color: #000;=
" class=3D"styled-by-prettify"> j </span><span style=3D"color: #660;" class=
=3D"styled-by-prettify">=3D</span><span style=3D"color: #000;" class=3D"sty=
led-by-prettify"> </span><span style=3D"color: #660;" class=3D"styled-by-pr=
ettify">(</span><span style=3D"color: #008;" class=3D"styled-by-prettify">t=
rue</span><span style=3D"color: #000;" class=3D"styled-by-prettify"> </span=
><span style=3D"color: #660;" class=3D"styled-by-prettify">?</span><span st=
yle=3D"color: #000;" class=3D"styled-by-prettify"> X</span><span style=3D"c=
olor: #660;" class=3D"styled-by-prettify">,</span><span style=3D"color: #00=
0;" class=3D"styled-by-prettify"> j</span><span style=3D"color: #660;" clas=
s=3D"styled-by-prettify">)</span><span style=3D"color: #000;" class=3D"styl=
ed-by-prettify"> </span><span style=3D"color: #660;" class=3D"styled-by-pre=
ttify">=3D</span><span style=3D"color: #000;" 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"styled-by-prettify">;</span><span styl=
e=3D"color: #000;" class=3D"styled-by-prettify"> =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0</span><span style=3D"color: #660;" class=3D"styled-by-pre=
ttify">\</span><span style=3D"color: #000;" class=3D"styled-by-prettify"><b=
r>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0</span><span style=3D"color: #660;" cla=
ss=3D"styled-by-prettify">};</span><span style=3D"color: #000;" class=3D"st=
yled-by-prettify"> i </span><span style=3D"color: #660;" class=3D"styled-by=
-prettify"><</span><span style=3D"color: #000;" class=3D"styled-by-prett=
ify"> </span><span style=3D"color: #660;" class=3D"styled-by-prettify">(</s=
pan><span style=3D"color: #008;" class=3D"styled-by-prettify">false</span><=
span style=3D"color: #000;" 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"> X</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: #008;" class=3D"style=
d-by-prettify">true</span><span style=3D"color: #000;" class=3D"styled-by-p=
rettify"> </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 sty=
le=3D"color: #000;" class=3D"styled-by-prettify"> X</span><span style=3D"co=
lor: #660;" class=3D"styled-by-prettify">)</span><span style=3D"color: #000=
;" class=3D"styled-by-prettify"><br><br></span><span style=3D"color: #800;"=
class=3D"styled-by-prettify">#define</span><span style=3D"color: #000;" cl=
ass=3D"styled-by-prettify"> times</span><span style=3D"color: #660;" class=
=3D"styled-by-prettify">(</span><span style=3D"color: #000;" class=3D"style=
d-by-prettify">X</span><span style=3D"color: #660;" class=3D"styled-by-pret=
tify">)</span><span style=3D"color: #000;" class=3D"styled-by-prettify"> ti=
mes_auto</span><span style=3D"color: #660;" class=3D"styled-by-prettify">(<=
/span><span style=3D"color: #000;" class=3D"styled-by-prettify">CAT</span><=
span style=3D"color: #660;" class=3D"styled-by-prettify">(</span><span styl=
e=3D"color: #000;" class=3D"styled-by-prettify">EAT_</span><span style=3D"c=
olor: #660;" class=3D"styled-by-prettify">,</span><span style=3D"color: #00=
0;" class=3D"styled-by-prettify"> X</span><span style=3D"color: #660;" clas=
s=3D"styled-by-prettify">))</span><span style=3D"color: #000;" class=3D"sty=
led-by-prettify"><br><br></span><span style=3D"color: #008;" class=3D"style=
d-by-prettify">extern</span><span style=3D"color: #000;" class=3D"styled-by=
-prettify"> </span><span style=3D"color: #008;" class=3D"styled-by-prettify=
">void</span><span style=3D"color: #000;" class=3D"styled-by-prettify"> f</=
span><span style=3D"color: #660;" class=3D"styled-by-prettify">(</span><spa=
n style=3D"color: #008;" class=3D"styled-by-prettify">int</span><span style=
=3D"color: #660;" class=3D"styled-by-prettify">);</span><span style=3D"colo=
r: #000;" class=3D"styled-by-prettify"><br><br></span><span style=3D"color:=
#008;" class=3D"styled-by-prettify">void</span><span style=3D"color: #000;=
" class=3D"styled-by-prettify"> a</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>=C2=A0 =C2=A0 </span><span style=3D"color: #008;" class=3D"styled-by-p=
rettify">const</span><span style=3D"color: #000;" class=3D"styled-by-pretti=
fy"> </span><span style=3D"color: #008;" class=3D"styled-by-prettify">int</=
span><span style=3D"color: #000;" class=3D"styled-by-prettify"> n </span><s=
pan style=3D"color: #660;" class=3D"styled-by-prettify">=3D</span><span sty=
le=3D"color: #000;" class=3D"styled-by-prettify"> </span><span style=3D"col=
or: #066;" class=3D"styled-by-prettify">3</span><span style=3D"color: #660;=
" class=3D"styled-by-prettify">;</span><span style=3D"color: #000;" class=
=3D"styled-by-prettify"><br>=C2=A0 =C2=A0 times</span><span style=3D"color:=
#660;" class=3D"styled-by-prettify">(</span><span style=3D"color: #008;" c=
lass=3D"styled-by-prettify">auto</span><span style=3D"color: #000;" class=
=3D"styled-by-prettify"> i </span><span style=3D"color: #660;" class=3D"sty=
led-by-prettify">:</span><span style=3D"color: #000;" class=3D"styled-by-pr=
ettify"> n</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 styl=
e=3D"color: #000;" class=3D"styled-by-prettify"><br>=C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 f</span><span style=3D"color: #660;" class=3D"styled-by-prett=
ify">(</span><span style=3D"color: #000;" class=3D"styled-by-prettify">i</s=
pan><span style=3D"color: #660;" class=3D"styled-by-prettify">);</span><spa=
n style=3D"color: #000;" class=3D"styled-by-prettify"><br>=C2=A0 =C2=A0 </s=
pan><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">}</span></div></code></div><=
br>So far it only works for const n and auto i. I'm unsure if that'=
s a problem at all - if you can modify (ok, destroy) n then `while(n--)` do=
es the trick in reverse order [1].<br>Wish we had constexpr?: operator like=
if constexpr(), that'd solve a lot of things...<br>If you're worri=
ed about the performance, https://godbolt.org/g/ioV3XB<br>(Btw, I like the =
idea, I'm just saying that a macro can do this for you.)<br>Or make it =
auto-less, that's far easier - you might make type spec an optional par=
ameter. <br><br>Thanks,<br>-lorro<br>[1] Still in TOP10, http://stackoverfl=
ow.com/questions/1642028/what-is-the-name-of-the-operator-in-c<br><br>2016.=
janu=C3=A1r 16., szombat 10:38:19 UTC+1 id=C5=91pontban Andrew Tomazos a k=
=C3=B6vetkez=C5=91t =C3=ADrta:<blockquote class=3D"gmail_quote" style=3D"ma=
rgin: 0;margin-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;">=
<div dir=3D"ltr">Please find attached a rough incomplete 2-page draft entit=
led "Proposal of Index-Based For Loop"<div><br></div><div>Prelimi=
nary thoughts appreciated.</div><div><br></div><div>Thanks,</div><div>Andre=
w.</div><div><br></div></div>
</blockquote></div>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;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"mailto:std-proposals+unsubscribe@isocpp.org">std-proposa=
ls+unsubscribe@isocpp.org</a>.<br />
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org">std-proposals@isocpp.org</a>.<br />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/05f82d7c-4132-42d1-acc8-657a53626932%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/05f82d7c-4132-42d1-acc8-657a53626932=
%40isocpp.org</a>.<br />
------=_Part_939_1737284056.1475874546187--
------=_Part_938_1956532925.1475874546187--
.
Author: Domen Vrankar <domen.vrankar@gmail.com>
Date: Fri, 7 Oct 2016 23:50:02 +0200
Raw View
--001a1144844ae4fe12053e4d666f
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
>
> 2016. janu=C3=A1r 16., szombat 10:38:19 UTC+1 id=C5=91pontban Andrew Toma=
zos a
> k=C3=B6vetkez=C5=91t =C3=ADrta:
>>
>> Please find attached a rough incomplete 2-page draft entitled "Proposal
>> of Index-Based For Loop"
>>
>> Preliminary thoughts appreciated.
>>
>> Thanks,
>> Andrew.
>>
>> Extremely old (and seemingly once again popular) thread...
So what's so terrible about "for(auto i : range(0, 3))" or "for(std::size_t
i =3D 0; i < 3; ++i)"?
Ranged for dominates my code by far so (at least in my case) that really
was the most general case of using for while on the other hand "for(auto i
: 3)" and "for(3)" just seems like
yet-another-cryptic-and-rare-case-that-I-wll-have-to-remember...
Not dumping every trivial feature that can be expressed by a library into
the language (unlike quite allot of other languages) is IMHO one of the
benefits of C++ and not it's drawback so pretty please don't try to change
it into one of those languages.
There are probably some other more beneficial features that people can work
on than these low hanging fruits for I-added-to-the-c++-standard bragging
rights only.
Regards,
Domen
--=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/CAKgx6B%2BSA4E6ibfA1t2uWB2zYr3jGF8-NTfmS%3DC1_V6=
%2BAhTbPA%40mail.gmail.com.
--001a1144844ae4fe12053e4d666f
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><div class=3D"gmail_extra"><div class=3D"gmail_quote"><blo=
ckquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left=
:1px solid rgb(204,204,204);padding-left:1ex"><div dir=3D"ltr">2016. janu=
=C3=A1r 16., szombat 10:38:19 UTC+1 id=C5=91pontban Andrew Tomazos a k=C3=
=B6vetkez=C5=91t =C3=ADrta:<blockquote class=3D"gmail_quote" style=3D"margi=
n:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex=
"><div dir=3D"ltr">Please find attached a rough incomplete 2-page draft ent=
itled "Proposal of Index-Based For Loop"<div><br></div><div>Preli=
minary thoughts appreciated.</div><div><br></div><div>Thanks,</div><div>And=
rew.</div><div><br></div></div><span class=3D"gmail-HOEnZb"><font color=3D"=
#888888">
</font></span></blockquote></div><span class=3D"gmail-HOEnZb"><font color=
=3D"#888888">
<p></p>
</font></span></blockquote></div>Extremely old (and seemingly once again po=
pular) thread...<br><br>So what's so terrible about "for(auto i : =
range(0, 3))" or "for(std::size_t i =3D 0; i < 3; ++i)"?<=
br><br>Ranged for dominates my code by far so (at least in my case) that re=
ally was the most general case of using for while on the other hand "f=
or(auto i : 3)" and "for(3)" just seems like yet-another-cry=
ptic-and-rare-case-that-I-wll-have-to-remember...<br></div><div class=3D"gm=
ail_extra"><br></div><div class=3D"gmail_extra">Not dumping every trivial f=
eature that can be expressed by a library into the language (unlike quite a=
llot of other languages) is IMHO one of the benefits of C++ and not it'=
s drawback so pretty please don't try to change it into one of those la=
nguages.<br></div><div class=3D"gmail_extra"><br></div><div class=3D"gmail_=
extra">There are probably some other more beneficial features that people c=
an work on than these low hanging fruits for I-added-to-the-c++-standard br=
agging rights only.<br></div><div class=3D"gmail_extra"><br></div><div clas=
s=3D"gmail_extra">Regards,<br></div><div class=3D"gmail_extra">Domen<br></d=
iv><div class=3D"gmail_extra"><br></div></div>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;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"mailto:std-proposals+unsubscribe@isocpp.org">std-proposa=
ls+unsubscribe@isocpp.org</a>.<br />
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org">std-proposals@isocpp.org</a>.<br />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAKgx6B%2BSA4E6ibfA1t2uWB2zYr3jGF8-NT=
fmS%3DC1_V6%2BAhTbPA%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfoote=
r">https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAKgx6B%2BS=
A4E6ibfA1t2uWB2zYr3jGF8-NTfmS%3DC1_V6%2BAhTbPA%40mail.gmail.com</a>.<br />
--001a1144844ae4fe12053e4d666f--
.
Author: "D. B." <db0451@gmail.com>
Date: Fri, 7 Oct 2016 23:29:45 +0100
Raw View
--089e01228c12825c9e053e4df2bb
Content-Type: text/plain; charset=UTF-8
On Fri, Oct 7, 2016 at 10:09 PM, <szollosi.lorand@gmail.com> wrote:
Hi,
>
> #define EAT_auto
> #define CAT1(X, Y) X ## Y
> #define CAT(X, Y) CAT1(X, Y)
>
> #define \
> times_auto(X) \
> for (union \
> { \
> int X * 0 + sizeof(int) * 8; \
> int j = (true ? X, j) = 0; \
> }; i < (false ? X); true ? ++ X)
>
> #define times(X) times_auto(CAT(EAT_, X))
>
> extern void f(int);
>
> void a()
> {
> const int n = 3;
> times(auto i : n) {
> f(i);
> }
> }
>
>
Can you explain why on Earth this is preferable to a normal for loop in any
way? Does anyone really think saving a few characters to obfuscate a basic
for loop is worth all that boilerplate? If so, I worry.
And also, what that union is doing? I don't feel like preprocessing this at
the moment, to figure out whether there's UB going on there due to
switching between inactive union members.
But again, even if there isn't UB, I can't see any reason to prefer this.
Help me understand.
--
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.
To view this discussion on the web visit https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CACGiwhEvJDqaYU2SstET%3DN-FhDPDRicMiPLuofwdwGoEvH6yfw%40mail.gmail.com.
--089e01228c12825c9e053e4df2bb
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><div class=3D"gmail_extra"><div class=3D"gmail_quote">On F=
ri, Oct 7, 2016 at 10:09 PM, <span dir=3D"ltr"><<a target=3D"_blank" hr=
ef=3D"mailto:szollosi.lorand@gmail.com">szollosi.lorand@gmail.com</a>></=
span> wrote:<br><br><blockquote style=3D"margin:0px 0px 0px 0.8ex;border-le=
ft:1px solid rgb(204,204,204);padding-left:1ex" class=3D"gmail_quote"><div =
dir=3D"ltr">Hi,<br><br><div style=3D"background-color:rgb(250,250,250);bord=
er-color:rgb(187,187,187);border-style:solid;border-width:1px;word-wrap:bre=
ak-word" class=3D"gmail-m_-5435845359693796962prettyprint"><code class=3D"g=
mail-m_-5435845359693796962prettyprint"><div class=3D"gmail-m_-543584535969=
3796962subprettyprint"><span class=3D"gmail-m_-5435845359693796962styled-by=
-prettify" style=3D"color:rgb(136,0,0)">#define</span><span class=3D"gmail-=
m_-5435845359693796962styled-by-prettify" style=3D"color:rgb(0,0,0)"> EAT_a=
uto<br></span><span class=3D"gmail-m_-5435845359693796962styled-by-prettify=
" style=3D"color:rgb(136,0,0)">#define</span><span class=3D"gmail-m_-543584=
5359693796962styled-by-prettify" style=3D"color:rgb(0,0,0)"> CAT1</span><sp=
an class=3D"gmail-m_-5435845359693796962styled-by-prettify" style=3D"color:=
rgb(102,102,0)">(</span><span class=3D"gmail-m_-5435845359693796962styled-b=
y-prettify" style=3D"color:rgb(0,0,0)">X</span><span class=3D"gmail-m_-5435=
845359693796962styled-by-prettify" style=3D"color:rgb(102,102,0)">,</span><=
span class=3D"gmail-m_-5435845359693796962styled-by-prettify" style=3D"colo=
r:rgb(0,0,0)"> Y</span><span class=3D"gmail-m_-5435845359693796962styled-by=
-prettify" style=3D"color:rgb(102,102,0)">)</span><span class=3D"gmail-m_-5=
435845359693796962styled-by-prettify" style=3D"color:rgb(0,0,0)"> X </span>=
<span class=3D"gmail-m_-5435845359693796962styled-by-prettify" style=3D"col=
or:rgb(136,0,0)">## Y</span><span class=3D"gmail-m_-5435845359693796962styl=
ed-by-prettify" style=3D"color:rgb(0,0,0)"><br></span><span class=3D"gmail-=
m_-5435845359693796962styled-by-prettify" style=3D"color:rgb(136,0,0)">#def=
ine</span><span class=3D"gmail-m_-5435845359693796962styled-by-prettify" st=
yle=3D"color:rgb(0,0,0)"> CAT</span><span class=3D"gmail-m_-543584535969379=
6962styled-by-prettify" style=3D"color:rgb(102,102,0)">(</span><span class=
=3D"gmail-m_-5435845359693796962styled-by-prettify" style=3D"color:rgb(0,0,=
0)">X</span><span class=3D"gmail-m_-5435845359693796962styled-by-prettify" =
style=3D"color:rgb(102,102,0)">,</span><span class=3D"gmail-m_-543584535969=
3796962styled-by-prettify" style=3D"color:rgb(0,0,0)"> Y</span><span class=
=3D"gmail-m_-5435845359693796962styled-by-prettify" style=3D"color:rgb(102,=
102,0)">)</span><span class=3D"gmail-m_-5435845359693796962styled-by-pretti=
fy" style=3D"color:rgb(0,0,0)"> CAT1</span><span class=3D"gmail-m_-54358453=
59693796962styled-by-prettify" style=3D"color:rgb(102,102,0)">(</span><span=
class=3D"gmail-m_-5435845359693796962styled-by-prettify" style=3D"color:rg=
b(0,0,0)">X</span><span class=3D"gmail-m_-5435845359693796962styled-by-pret=
tify" style=3D"color:rgb(102,102,0)">,</span><span class=3D"gmail-m_-543584=
5359693796962styled-by-prettify" style=3D"color:rgb(0,0,0)"> Y</span><span =
class=3D"gmail-m_-5435845359693796962styled-by-prettify" style=3D"color:rgb=
(102,102,0)">)</span><span class=3D"gmail-m_-5435845359693796962styled-by-p=
rettify" style=3D"color:rgb(0,0,0)"><br><br></span><span class=3D"gmail-m_-=
5435845359693796962styled-by-prettify" style=3D"color:rgb(136,0,0)">#define=
</span><span class=3D"gmail-m_-5435845359693796962styled-by-prettify" style=
=3D"color:rgb(0,0,0)"> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0</span><span class=3D"gmail-m_-54358453596937969=
62styled-by-prettify" style=3D"color:rgb(102,102,0)">\</span><span class=3D=
"gmail-m_-5435845359693796962styled-by-prettify" style=3D"color:rgb(0,0,0)"=
><br>times_auto</span><span class=3D"gmail-m_-5435845359693796962styled-by-=
prettify" style=3D"color:rgb(102,102,0)">(</span><span class=3D"gmail-m_-54=
35845359693796962styled-by-prettify" style=3D"color:rgb(0,0,0)">X</span><sp=
an class=3D"gmail-m_-5435845359693796962styled-by-prettify" style=3D"color:=
rgb(102,102,0)">)</span><span class=3D"gmail-m_-5435845359693796962styled-b=
y-prettify" style=3D"color:rgb(0,0,0)"> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0</span><span class=3D"gmail-m_-5435845359693796962s=
tyled-by-prettify" style=3D"color:rgb(102,102,0)">\</span><span class=3D"gm=
ail-m_-5435845359693796962styled-by-prettify" style=3D"color:rgb(0,0,0)"><b=
r>=C2=A0 =C2=A0 </span><span class=3D"gmail-m_-5435845359693796962styled-by=
-prettify" style=3D"color:rgb(0,0,136)">for</span><span class=3D"gmail-m_-5=
435845359693796962styled-by-prettify" style=3D"color:rgb(0,0,0)"> </span><s=
pan class=3D"gmail-m_-5435845359693796962styled-by-prettify" style=3D"color=
:rgb(102,102,0)">(</span><span class=3D"gmail-m_-5435845359693796962styled-=
by-prettify" style=3D"color:rgb(0,0,136)">union</span><span class=3D"gmail-=
m_-5435845359693796962styled-by-prettify" style=3D"color:rgb(0,0,0)"> =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 </span><span class=3D"gmai=
l-m_-5435845359693796962styled-by-prettify" style=3D"color:rgb(102,102,0)">=
\</span><span class=3D"gmail-m_-5435845359693796962styled-by-prettify" styl=
e=3D"color:rgb(0,0,0)"><br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0</span><span c=
lass=3D"gmail-m_-5435845359693796962styled-by-prettify" style=3D"color:rgb(=
102,102,0)">{</span><span class=3D"gmail-m_-5435845359693796962styled-by-pr=
ettify" style=3D"color:rgb(0,0,0)"> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 </span><span class=3D"gmail-m_-5435845359693796=
962styled-by-prettify" style=3D"color:rgb(102,102,0)">\</span><span class=
=3D"gmail-m_-5435845359693796962styled-by-prettify" style=3D"color:rgb(0,0,=
0)"><br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0</span><span class=
=3D"gmail-m_-5435845359693796962styled-by-prettify" style=3D"color:rgb(0,0,=
136)">int</span><span class=3D"gmail-m_-5435845359693796962styled-by-pretti=
fy" style=3D"color:rgb(0,0,0)"> X </span><span class=3D"gmail-m_-5435845359=
693796962styled-by-prettify" style=3D"color:rgb(102,102,0)">*</span><span c=
lass=3D"gmail-m_-5435845359693796962styled-by-prettify" style=3D"color:rgb(=
0,0,0)"> </span><span class=3D"gmail-m_-5435845359693796962styled-by-pretti=
fy" style=3D"color:rgb(0,102,102)">0</span><span class=3D"gmail-m_-54358453=
59693796962styled-by-prettify" style=3D"color:rgb(0,0,0)"> </span><span cla=
ss=3D"gmail-m_-5435845359693796962styled-by-prettify" style=3D"color:rgb(10=
2,102,0)">+</span><span class=3D"gmail-m_-5435845359693796962styled-by-pret=
tify" style=3D"color:rgb(0,0,0)"> </span><span class=3D"gmail-m_-5435845359=
693796962styled-by-prettify" style=3D"color:rgb(0,0,136)">sizeof</span><spa=
n class=3D"gmail-m_-5435845359693796962styled-by-prettify" style=3D"color:r=
gb(102,102,0)">(</span><span class=3D"gmail-m_-5435845359693796962styled-by=
-prettify" style=3D"color:rgb(0,0,136)">int</span><span class=3D"gmail-m_-5=
435845359693796962styled-by-prettify" style=3D"color:rgb(102,102,0)">)</spa=
n><span class=3D"gmail-m_-5435845359693796962styled-by-prettify" style=3D"c=
olor:rgb(0,0,0)"> </span><span class=3D"gmail-m_-5435845359693796962styled-=
by-prettify" style=3D"color:rgb(102,102,0)">*</span><span class=3D"gmail-m_=
-5435845359693796962styled-by-prettify" style=3D"color:rgb(0,0,0)"> </span>=
<span class=3D"gmail-m_-5435845359693796962styled-by-prettify" style=3D"col=
or:rgb(0,102,102)">8</span><span class=3D"gmail-m_-5435845359693796962style=
d-by-prettify" style=3D"color:rgb(102,102,0)">;</span><span class=3D"gmail-=
m_-5435845359693796962styled-by-prettify" style=3D"color:rgb(0,0,0)"> =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0</span><span class=3D"gmail-m_-5435845359693=
796962styled-by-prettify" style=3D"color:rgb(102,102,0)">\</span><span clas=
s=3D"gmail-m_-5435845359693796962styled-by-prettify" style=3D"color:rgb(0,0=
,0)"><br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0</span><span class=
=3D"gmail-m_-5435845359693796962styled-by-prettify" style=3D"color:rgb(0,0,=
136)">int</span><span class=3D"gmail-m_-5435845359693796962styled-by-pretti=
fy" style=3D"color:rgb(0,0,0)"> j </span><span class=3D"gmail-m_-5435845359=
693796962styled-by-prettify" style=3D"color:rgb(102,102,0)">=3D</span><span=
class=3D"gmail-m_-5435845359693796962styled-by-prettify" style=3D"color:rg=
b(0,0,0)"> </span><span class=3D"gmail-m_-5435845359693796962styled-by-pret=
tify" style=3D"color:rgb(102,102,0)">(</span><span class=3D"gmail-m_-543584=
5359693796962styled-by-prettify" style=3D"color:rgb(0,0,136)">true</span><s=
pan class=3D"gmail-m_-5435845359693796962styled-by-prettify" style=3D"color=
:rgb(0,0,0)"> </span><span class=3D"gmail-m_-5435845359693796962styled-by-p=
rettify" style=3D"color:rgb(102,102,0)">?</span><span class=3D"gmail-m_-543=
5845359693796962styled-by-prettify" style=3D"color:rgb(0,0,0)"> X</span><sp=
an class=3D"gmail-m_-5435845359693796962styled-by-prettify" style=3D"color:=
rgb(102,102,0)">,</span><span class=3D"gmail-m_-5435845359693796962styled-b=
y-prettify" style=3D"color:rgb(0,0,0)"> j</span><span class=3D"gmail-m_-543=
5845359693796962styled-by-prettify" style=3D"color:rgb(102,102,0)">)</span>=
<span class=3D"gmail-m_-5435845359693796962styled-by-prettify" style=3D"col=
or:rgb(0,0,0)"> </span><span class=3D"gmail-m_-5435845359693796962styled-by=
-prettify" style=3D"color:rgb(102,102,0)">=3D</span><span class=3D"gmail-m_=
-5435845359693796962styled-by-prettify" style=3D"color:rgb(0,0,0)"> </span>=
<span class=3D"gmail-m_-5435845359693796962styled-by-prettify" style=3D"col=
or:rgb(0,102,102)">0</span><span class=3D"gmail-m_-5435845359693796962style=
d-by-prettify" style=3D"color:rgb(102,102,0)">;</span><span class=3D"gmail-=
m_-5435845359693796962styled-by-prettify" style=3D"color:rgb(0,0,0)"> =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0</span><span class=3D"gmail-m_-543584=
5359693796962styled-by-prettify" style=3D"color:rgb(102,102,0)">\</span><sp=
an class=3D"gmail-m_-5435845359693796962styled-by-prettify" style=3D"color:=
rgb(0,0,0)"><br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0</span><span class=3D"gma=
il-m_-5435845359693796962styled-by-prettify" style=3D"color:rgb(102,102,0)"=
>};</span><span class=3D"gmail-m_-5435845359693796962styled-by-prettify" st=
yle=3D"color:rgb(0,0,0)"> i </span><span class=3D"gmail-m_-5435845359693796=
962styled-by-prettify" style=3D"color:rgb(102,102,0)"><</span><span clas=
s=3D"gmail-m_-5435845359693796962styled-by-prettify" style=3D"color:rgb(0,0=
,0)"> </span><span class=3D"gmail-m_-5435845359693796962styled-by-prettify"=
style=3D"color:rgb(102,102,0)">(</span><span class=3D"gmail-m_-54358453596=
93796962styled-by-prettify" style=3D"color:rgb(0,0,136)">false</span><span =
class=3D"gmail-m_-5435845359693796962styled-by-prettify" style=3D"color:rgb=
(0,0,0)"> </span><span class=3D"gmail-m_-5435845359693796962styled-by-prett=
ify" style=3D"color:rgb(102,102,0)">?</span><span class=3D"gmail-m_-5435845=
359693796962styled-by-prettify" style=3D"color:rgb(0,0,0)"> X</span><span c=
lass=3D"gmail-m_-5435845359693796962styled-by-prettify" style=3D"color:rgb(=
102,102,0)">);</span><span class=3D"gmail-m_-5435845359693796962styled-by-p=
rettify" style=3D"color:rgb(0,0,0)"> </span><span class=3D"gmail-m_-5435845=
359693796962styled-by-prettify" style=3D"color:rgb(0,0,136)">true</span><sp=
an class=3D"gmail-m_-5435845359693796962styled-by-prettify" style=3D"color:=
rgb(0,0,0)"> </span><span class=3D"gmail-m_-5435845359693796962styled-by-pr=
ettify" style=3D"color:rgb(102,102,0)">?</span><span class=3D"gmail-m_-5435=
845359693796962styled-by-prettify" style=3D"color:rgb(0,0,0)"> </span><span=
class=3D"gmail-m_-5435845359693796962styled-by-prettify" style=3D"color:rg=
b(102,102,0)">++</span><span class=3D"gmail-m_-5435845359693796962styled-by=
-prettify" style=3D"color:rgb(0,0,0)"> X</span><span class=3D"gmail-m_-5435=
845359693796962styled-by-prettify" style=3D"color:rgb(102,102,0)">)</span><=
span class=3D"gmail-m_-5435845359693796962styled-by-prettify" style=3D"colo=
r:rgb(0,0,0)"><br><br></span><span class=3D"gmail-m_-5435845359693796962sty=
led-by-prettify" style=3D"color:rgb(136,0,0)">#define</span><span class=3D"=
gmail-m_-5435845359693796962styled-by-prettify" style=3D"color:rgb(0,0,0)">=
times</span><span class=3D"gmail-m_-5435845359693796962styled-by-prettify"=
style=3D"color:rgb(102,102,0)">(</span><span class=3D"gmail-m_-54358453596=
93796962styled-by-prettify" style=3D"color:rgb(0,0,0)">X</span><span class=
=3D"gmail-m_-5435845359693796962styled-by-prettify" style=3D"color:rgb(102,=
102,0)">)</span><span class=3D"gmail-m_-5435845359693796962styled-by-pretti=
fy" style=3D"color:rgb(0,0,0)"> times_auto</span><span class=3D"gmail-m_-54=
35845359693796962styled-by-prettify" style=3D"color:rgb(102,102,0)">(</span=
><span class=3D"gmail-m_-5435845359693796962styled-by-prettify" style=3D"co=
lor:rgb(0,0,0)">CAT</span><span class=3D"gmail-m_-5435845359693796962styled=
-by-prettify" style=3D"color:rgb(102,102,0)">(</span><span class=3D"gmail-m=
_-5435845359693796962styled-by-prettify" style=3D"color:rgb(0,0,0)">EAT_</s=
pan><span class=3D"gmail-m_-5435845359693796962styled-by-prettify" style=3D=
"color:rgb(102,102,0)">,</span><span class=3D"gmail-m_-5435845359693796962s=
tyled-by-prettify" style=3D"color:rgb(0,0,0)"> X</span><span class=3D"gmail=
-m_-5435845359693796962styled-by-prettify" style=3D"color:rgb(102,102,0)">)=
)</span><span class=3D"gmail-m_-5435845359693796962styled-by-prettify" styl=
e=3D"color:rgb(0,0,0)"><br><br></span><span class=3D"gmail-m_-5435845359693=
796962styled-by-prettify" style=3D"color:rgb(0,0,136)">extern</span><span c=
lass=3D"gmail-m_-5435845359693796962styled-by-prettify" style=3D"color:rgb(=
0,0,0)"> </span><span class=3D"gmail-m_-5435845359693796962styled-by-pretti=
fy" style=3D"color:rgb(0,0,136)">void</span><span class=3D"gmail-m_-5435845=
359693796962styled-by-prettify" style=3D"color:rgb(0,0,0)"> f</span><span c=
lass=3D"gmail-m_-5435845359693796962styled-by-prettify" style=3D"color:rgb(=
102,102,0)">(</span><span class=3D"gmail-m_-5435845359693796962styled-by-pr=
ettify" style=3D"color:rgb(0,0,136)">int</span><span class=3D"gmail-m_-5435=
845359693796962styled-by-prettify" style=3D"color:rgb(102,102,0)">);</span>=
<span class=3D"gmail-m_-5435845359693796962styled-by-prettify" style=3D"col=
or:rgb(0,0,0)"><br><br></span><span class=3D"gmail-m_-5435845359693796962st=
yled-by-prettify" style=3D"color:rgb(0,0,136)">void</span><span class=3D"gm=
ail-m_-5435845359693796962styled-by-prettify" style=3D"color:rgb(0,0,0)"> a=
</span><span class=3D"gmail-m_-5435845359693796962styled-by-prettify" style=
=3D"color:rgb(102,102,0)">()</span><span class=3D"gmail-m_-5435845359693796=
962styled-by-prettify" style=3D"color:rgb(0,0,0)"><br></span><span class=3D=
"gmail-m_-5435845359693796962styled-by-prettify" style=3D"color:rgb(102,102=
,0)">{</span><span class=3D"gmail-m_-5435845359693796962styled-by-prettify"=
style=3D"color:rgb(0,0,0)"><br>=C2=A0 =C2=A0 </span><span class=3D"gmail-m=
_-5435845359693796962styled-by-prettify" style=3D"color:rgb(0,0,136)">const=
</span><span class=3D"gmail-m_-5435845359693796962styled-by-prettify" style=
=3D"color:rgb(0,0,0)"> </span><span class=3D"gmail-m_-5435845359693796962st=
yled-by-prettify" style=3D"color:rgb(0,0,136)">int</span><span class=3D"gma=
il-m_-5435845359693796962styled-by-prettify" style=3D"color:rgb(0,0,0)"> n =
</span><span class=3D"gmail-m_-5435845359693796962styled-by-prettify" style=
=3D"color:rgb(102,102,0)">=3D</span><span class=3D"gmail-m_-543584535969379=
6962styled-by-prettify" style=3D"color:rgb(0,0,0)"> </span><span class=3D"g=
mail-m_-5435845359693796962styled-by-prettify" style=3D"color:rgb(0,102,102=
)">3</span><span class=3D"gmail-m_-5435845359693796962styled-by-prettify" s=
tyle=3D"color:rgb(102,102,0)">;</span><span class=3D"gmail-m_-5435845359693=
796962styled-by-prettify" style=3D"color:rgb(0,0,0)"><br>=C2=A0 =C2=A0 time=
s</span><span class=3D"gmail-m_-5435845359693796962styled-by-prettify" styl=
e=3D"color:rgb(102,102,0)">(</span><span class=3D"gmail-m_-5435845359693796=
962styled-by-prettify" style=3D"color:rgb(0,0,136)">auto</span><span class=
=3D"gmail-m_-5435845359693796962styled-by-prettify" style=3D"color:rgb(0,0,=
0)"> i </span><span class=3D"gmail-m_-5435845359693796962styled-by-prettify=
" style=3D"color:rgb(102,102,0)">:</span><span class=3D"gmail-m_-5435845359=
693796962styled-by-prettify" style=3D"color:rgb(0,0,0)"> n</span><span clas=
s=3D"gmail-m_-5435845359693796962styled-by-prettify" style=3D"color:rgb(102=
,102,0)">)</span><span class=3D"gmail-m_-5435845359693796962styled-by-prett=
ify" style=3D"color:rgb(0,0,0)"> </span><span class=3D"gmail-m_-54358453596=
93796962styled-by-prettify" style=3D"color:rgb(102,102,0)">{</span><span cl=
ass=3D"gmail-m_-5435845359693796962styled-by-prettify" style=3D"color:rgb(0=
,0,0)"><br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 f</span><span class=3D"gmail-=
m_-5435845359693796962styled-by-prettify" style=3D"color:rgb(102,102,0)">(<=
/span><span class=3D"gmail-m_-5435845359693796962styled-by-prettify" style=
=3D"color:rgb(0,0,0)">i</span><span class=3D"gmail-m_-5435845359693796962st=
yled-by-prettify" style=3D"color:rgb(102,102,0)">);</span><span class=3D"gm=
ail-m_-5435845359693796962styled-by-prettify" style=3D"color:rgb(0,0,0)"><b=
r>=C2=A0 =C2=A0 </span><span class=3D"gmail-m_-5435845359693796962styled-by=
-prettify" style=3D"color:rgb(102,102,0)">}</span><span class=3D"gmail-m_-5=
435845359693796962styled-by-prettify" style=3D"color:rgb(0,0,0)"><br></span=
><span class=3D"gmail-m_-5435845359693796962styled-by-prettify" style=3D"co=
lor:rgb(102,102,0)">}</span></div></code></div><br></div></blockquote><div>=
=C2=A0</div><div>Can you explain why on Earth this is preferable to a norma=
l for loop in any way? Does anyone really think saving a few characters to =
obfuscate a basic for loop is worth all that boilerplate? If so, I worry.<b=
r><br>And also, what that union is doing? I don't feel like preprocessi=
ng this at the moment, to figure out whether there's UB going on there =
due to switching between inactive union members.<br><br>But again, even if =
there isn't UB, I can't see any reason to prefer this. Help me unde=
rstand.<br><br></div></div></div></div>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;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"mailto:std-proposals+unsubscribe@isocpp.org">std-proposa=
ls+unsubscribe@isocpp.org</a>.<br />
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org">std-proposals@isocpp.org</a>.<br />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CACGiwhEvJDqaYU2SstET%3DN-FhDPDRicMiP=
LuofwdwGoEvH6yfw%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfooter">h=
ttps://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CACGiwhEvJDqaYU=
2SstET%3DN-FhDPDRicMiPLuofwdwGoEvH6yfw%40mail.gmail.com</a>.<br />
--089e01228c12825c9e053e4df2bb--
.
Author: Richard Smith <richard@metafoo.co.uk>
Date: Fri, 7 Oct 2016 15:55:02 -0700
Raw View
--001a11425aa40c8a7d053e4e4dc3
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
On Fri, Oct 7, 2016 at 2:09 PM, <szollosi.lorand@gmail.com> wrote:
> Hi,
>
> #define EAT_auto
> #define CAT1(X, Y) X ## Y
> #define CAT(X, Y) CAT1(X, Y)
>
> #define \
> times_auto(X) \
> for (union \
> { \
> int X * 0 + sizeof(int) * 8; \
> int j =3D (true ? X, j) =3D 0; \
> }; i < (false ? X); true ? ++ X)
>
> #define times(X) times_auto(CAT(EAT_, X))
>
> extern void f(int);
>
> void a()
> {
> const int n =3D 3;
> times(auto i : n) {
> f(i);
> }
> }
>
Hah, this seems like a fun game. My entry: https://godbolt.org/g/yolwFc
But really, why bother when we can just use
for (auto i : integral_range(n))
?
So far it only works for const n and auto i. I'm unsure if that's a problem
> at all - if you can modify (ok, destroy) n then `while(n--)` does the tri=
ck
> in reverse order [1].
> Wish we had constexpr?: operator like if constexpr(), that'd solve a lot
> of things...
> If you're worried about the performance, https://godbolt.org/g/ioV3XB
> (Btw, I like the idea, I'm just saying that a macro can do this for you.)
> Or make it auto-less, that's far easier - you might make type spec an
> optional parameter.
>
> Thanks,
> -lorro
> [1] Still in TOP10, http://stackoverflow.com/
> questions/1642028/what-is-the-name-of-the-operator-in-c
>
> 2016. janu=C3=A1r 16., szombat 10:38:19 UTC+1 id=C5=91pontban Andrew Toma=
zos a
> k=C3=B6vetkez=C5=91t =C3=ADrta:
>>
>> Please find attached a rough incomplete 2-page draft entitled "Proposal
>> of Index-Based For Loop"
>>
>> Preliminary thoughts appreciated.
>>
>> Thanks,
>> Andrew.
>>
>> --
> 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.
> To view this discussion on the web visit https://groups.google.com/a/
> isocpp.org/d/msgid/std-proposals/05f82d7c-4132-42d1-
> acc8-657a53626932%40isocpp.org
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/05f82d7c-41=
32-42d1-acc8-657a53626932%40isocpp.org?utm_medium=3Demail&utm_source=3Dfoot=
er>
> .
>
--=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/CAOfiQqmgxd9juxu%2BLQ8ZWhEsfNY8f47jE%3DoSFukRBQw=
vUHYngg%40mail.gmail.com.
--001a11425aa40c8a7d053e4e4dc3
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><div class=3D"gmail_extra"><div class=3D"gmail_quote">On F=
ri, Oct 7, 2016 at 2:09 PM, <span dir=3D"ltr"><<a href=3D"mailto:szollo=
si.lorand@gmail.com" target=3D"_blank">szollosi.lorand@gmail.com</a>></s=
pan> wrote:<br><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0p=
x 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir=
=3D"ltr">Hi,<br><br><div class=3D"gmail-m_749761175140180926prettyprint" st=
yle=3D"background-color:rgb(250,250,250);border-color:rgb(187,187,187);bord=
er-style:solid;border-width:1px;word-wrap:break-word"><code class=3D"gmail-=
m_749761175140180926prettyprint"><div class=3D"gmail-m_749761175140180926su=
bprettyprint"><span style=3D"color:rgb(136,0,0)" class=3D"gmail-m_749761175=
140180926styled-by-prettify">#define</span><span style=3D"color:rgb(0,0,0)"=
class=3D"gmail-m_749761175140180926styled-by-prettify"> EAT_auto<br></span=
><span style=3D"color:rgb(136,0,0)" class=3D"gmail-m_749761175140180926styl=
ed-by-prettify">#define</span><span style=3D"color:rgb(0,0,0)" class=3D"gma=
il-m_749761175140180926styled-by-prettify"> CAT1</span><span style=3D"color=
:rgb(102,102,0)" class=3D"gmail-m_749761175140180926styled-by-prettify">(</=
span><span style=3D"color:rgb(0,0,0)" class=3D"gmail-m_749761175140180926st=
yled-by-prettify">X</span><span style=3D"color:rgb(102,102,0)" class=3D"gma=
il-m_749761175140180926styled-by-prettify">,</span><span style=3D"color:rgb=
(0,0,0)" class=3D"gmail-m_749761175140180926styled-by-prettify"> Y</span><s=
pan style=3D"color:rgb(102,102,0)" class=3D"gmail-m_749761175140180926style=
d-by-prettify">)</span><span style=3D"color:rgb(0,0,0)" class=3D"gmail-m_74=
9761175140180926styled-by-prettify"> X </span><span style=3D"color:rgb(136,=
0,0)" class=3D"gmail-m_749761175140180926styled-by-prettify">## Y</span><sp=
an style=3D"color:rgb(0,0,0)" class=3D"gmail-m_749761175140180926styled-by-=
prettify"><br></span><span style=3D"color:rgb(136,0,0)" class=3D"gmail-m_74=
9761175140180926styled-by-prettify">#define</span><span style=3D"color:rgb(=
0,0,0)" class=3D"gmail-m_749761175140180926styled-by-prettify"> CAT</span><=
span style=3D"color:rgb(102,102,0)" class=3D"gmail-m_749761175140180926styl=
ed-by-prettify">(</span><span style=3D"color:rgb(0,0,0)" class=3D"gmail-m_7=
49761175140180926styled-by-prettify">X</span><span style=3D"color:rgb(102,1=
02,0)" class=3D"gmail-m_749761175140180926styled-by-prettify">,</span><span=
style=3D"color:rgb(0,0,0)" class=3D"gmail-m_749761175140180926styled-by-pr=
ettify"> Y</span><span style=3D"color:rgb(102,102,0)" class=3D"gmail-m_7497=
61175140180926styled-by-prettify">)</span><span style=3D"color:rgb(0,0,0)" =
class=3D"gmail-m_749761175140180926styled-by-prettify"> CAT1</span><span st=
yle=3D"color:rgb(102,102,0)" class=3D"gmail-m_749761175140180926styled-by-p=
rettify">(</span><span style=3D"color:rgb(0,0,0)" class=3D"gmail-m_74976117=
5140180926styled-by-prettify">X</span><span style=3D"color:rgb(102,102,0)" =
class=3D"gmail-m_749761175140180926styled-by-prettify">,</span><span style=
=3D"color:rgb(0,0,0)" class=3D"gmail-m_749761175140180926styled-by-prettify=
"> Y</span><span style=3D"color:rgb(102,102,0)" class=3D"gmail-m_7497611751=
40180926styled-by-prettify">)</span><span style=3D"color:rgb(0,0,0)" class=
=3D"gmail-m_749761175140180926styled-by-prettify"><br><br></span><span styl=
e=3D"color:rgb(136,0,0)" class=3D"gmail-m_749761175140180926styled-by-prett=
ify">#define</span><span style=3D"color:rgb(0,0,0)" class=3D"gmail-m_749761=
175140180926styled-by-prettify"> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0</span><span style=3D"color:rgb(102,1=
02,0)" class=3D"gmail-m_749761175140180926styled-by-prettify">\</span><span=
style=3D"color:rgb(0,0,0)" class=3D"gmail-m_749761175140180926styled-by-pr=
ettify"><br>times_auto</span><span style=3D"color:rgb(102,102,0)" class=3D"=
gmail-m_749761175140180926styled-by-prettify">(</span><span style=3D"color:=
rgb(0,0,0)" class=3D"gmail-m_749761175140180926styled-by-prettify">X</span>=
<span style=3D"color:rgb(102,102,0)" class=3D"gmail-m_749761175140180926sty=
led-by-prettify">)</span><span style=3D"color:rgb(0,0,0)" class=3D"gmail-m_=
749761175140180926styled-by-prettify"> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0</span><span style=3D"color:rgb(102,102,0)" class=
=3D"gmail-m_749761175140180926styled-by-prettify">\</span><span style=3D"co=
lor:rgb(0,0,0)" class=3D"gmail-m_749761175140180926styled-by-prettify"><br>=
=C2=A0 =C2=A0 </span><span style=3D"color:rgb(0,0,136)" class=3D"gmail-m_74=
9761175140180926styled-by-prettify">for</span><span style=3D"color:rgb(0,0,=
0)" class=3D"gmail-m_749761175140180926styled-by-prettify"> </span><span st=
yle=3D"color:rgb(102,102,0)" class=3D"gmail-m_749761175140180926styled-by-p=
rettify">(</span><span style=3D"color:rgb(0,0,136)" class=3D"gmail-m_749761=
175140180926styled-by-prettify">union</span><span style=3D"color:rgb(0,0,0)=
" class=3D"gmail-m_749761175140180926styled-by-prettify"> =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 </span><span style=3D"color:rgb(102,102,=
0)" class=3D"gmail-m_749761175140180926styled-by-prettify">\</span><span st=
yle=3D"color:rgb(0,0,0)" class=3D"gmail-m_749761175140180926styled-by-prett=
ify"><br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0</span><span style=3D"color:rgb(=
102,102,0)" class=3D"gmail-m_749761175140180926styled-by-prettify">{</span>=
<span style=3D"color:rgb(0,0,0)" class=3D"gmail-m_749761175140180926styled-=
by-prettify"> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 </span><span style=3D"color:rgb(102,102,0)" class=3D"gmail-m_7497611=
75140180926styled-by-prettify">\</span><span style=3D"color:rgb(0,0,0)" cla=
ss=3D"gmail-m_749761175140180926styled-by-prettify"><br>=C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0</span><span style=3D"color:rgb(0,0,136)" cl=
ass=3D"gmail-m_749761175140180926styled-by-prettify">int</span><span style=
=3D"color:rgb(0,0,0)" class=3D"gmail-m_749761175140180926styled-by-prettify=
"> X </span><span style=3D"color:rgb(102,102,0)" class=3D"gmail-m_749761175=
140180926styled-by-prettify">*</span><span style=3D"color:rgb(0,0,0)" class=
=3D"gmail-m_749761175140180926styled-by-prettify"> </span><span style=3D"co=
lor:rgb(0,102,102)" class=3D"gmail-m_749761175140180926styled-by-prettify">=
0</span><span style=3D"color:rgb(0,0,0)" class=3D"gmail-m_74976117514018092=
6styled-by-prettify"> </span><span style=3D"color:rgb(102,102,0)" class=3D"=
gmail-m_749761175140180926styled-by-prettify">+</span><span style=3D"color:=
rgb(0,0,0)" class=3D"gmail-m_749761175140180926styled-by-prettify"> </span>=
<span style=3D"color:rgb(0,0,136)" class=3D"gmail-m_749761175140180926style=
d-by-prettify">sizeof</span><span style=3D"color:rgb(102,102,0)" class=3D"g=
mail-m_749761175140180926styled-by-prettify">(</span><span style=3D"color:r=
gb(0,0,136)" class=3D"gmail-m_749761175140180926styled-by-prettify">int</sp=
an><span style=3D"color:rgb(102,102,0)" class=3D"gmail-m_749761175140180926=
styled-by-prettify">)</span><span style=3D"color:rgb(0,0,0)" class=3D"gmail=
-m_749761175140180926styled-by-prettify"> </span><span style=3D"color:rgb(1=
02,102,0)" class=3D"gmail-m_749761175140180926styled-by-prettify">*</span><=
span style=3D"color:rgb(0,0,0)" class=3D"gmail-m_749761175140180926styled-b=
y-prettify"> </span><span style=3D"color:rgb(0,102,102)" class=3D"gmail-m_7=
49761175140180926styled-by-prettify">8</span><span style=3D"color:rgb(102,1=
02,0)" class=3D"gmail-m_749761175140180926styled-by-prettify">;</span><span=
style=3D"color:rgb(0,0,0)" class=3D"gmail-m_749761175140180926styled-by-pr=
ettify"> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0</span><span style=3D"color:rgb(=
102,102,0)" class=3D"gmail-m_749761175140180926styled-by-prettify">\</span>=
<span style=3D"color:rgb(0,0,0)" class=3D"gmail-m_749761175140180926styled-=
by-prettify"><br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0</span><sp=
an style=3D"color:rgb(0,0,136)" class=3D"gmail-m_749761175140180926styled-b=
y-prettify">int</span><span style=3D"color:rgb(0,0,0)" class=3D"gmail-m_749=
761175140180926styled-by-prettify"> j </span><span style=3D"color:rgb(102,1=
02,0)" class=3D"gmail-m_749761175140180926styled-by-prettify">=3D</span><sp=
an style=3D"color:rgb(0,0,0)" class=3D"gmail-m_749761175140180926styled-by-=
prettify"> </span><span style=3D"color:rgb(102,102,0)" class=3D"gmail-m_749=
761175140180926styled-by-prettify">(</span><span style=3D"color:rgb(0,0,136=
)" class=3D"gmail-m_749761175140180926styled-by-prettify">true</span><span =
style=3D"color:rgb(0,0,0)" class=3D"gmail-m_749761175140180926styled-by-pre=
ttify"> </span><span style=3D"color:rgb(102,102,0)" class=3D"gmail-m_749761=
175140180926styled-by-prettify">?</span><span style=3D"color:rgb(0,0,0)" cl=
ass=3D"gmail-m_749761175140180926styled-by-prettify"> X</span><span style=
=3D"color:rgb(102,102,0)" class=3D"gmail-m_749761175140180926styled-by-pret=
tify">,</span><span style=3D"color:rgb(0,0,0)" class=3D"gmail-m_74976117514=
0180926styled-by-prettify"> j</span><span style=3D"color:rgb(102,102,0)" cl=
ass=3D"gmail-m_749761175140180926styled-by-prettify">)</span><span style=3D=
"color:rgb(0,0,0)" class=3D"gmail-m_749761175140180926styled-by-prettify"> =
</span><span style=3D"color:rgb(102,102,0)" class=3D"gmail-m_74976117514018=
0926styled-by-prettify">=3D</span><span style=3D"color:rgb(0,0,0)" class=3D=
"gmail-m_749761175140180926styled-by-prettify"> </span><span style=3D"color=
:rgb(0,102,102)" class=3D"gmail-m_749761175140180926styled-by-prettify">0</=
span><span style=3D"color:rgb(102,102,0)" class=3D"gmail-m_7497611751401809=
26styled-by-prettify">;</span><span style=3D"color:rgb(0,0,0)" class=3D"gma=
il-m_749761175140180926styled-by-prettify"> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0</span><span style=3D"color:rgb(102,102,0)" class=3D"gmail-m_7497=
61175140180926styled-by-prettify">\</span><span style=3D"color:rgb(0,0,0)" =
class=3D"gmail-m_749761175140180926styled-by-prettify"><br>=C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0</span><span style=3D"color:rgb(102,102,0)" class=3D"gm=
ail-m_749761175140180926styled-by-prettify">};</span><span style=3D"color:r=
gb(0,0,0)" class=3D"gmail-m_749761175140180926styled-by-prettify"> i </span=
><span style=3D"color:rgb(102,102,0)" class=3D"gmail-m_749761175140180926st=
yled-by-prettify"><</span><span style=3D"color:rgb(0,0,0)" class=3D"gmai=
l-m_749761175140180926styled-by-prettify"> </span><span style=3D"color:rgb(=
102,102,0)" class=3D"gmail-m_749761175140180926styled-by-prettify">(</span>=
<span style=3D"color:rgb(0,0,136)" class=3D"gmail-m_749761175140180926style=
d-by-prettify">false</span><span style=3D"color:rgb(0,0,0)" class=3D"gmail-=
m_749761175140180926styled-by-prettify"> </span><span style=3D"color:rgb(10=
2,102,0)" class=3D"gmail-m_749761175140180926styled-by-prettify">?</span><s=
pan style=3D"color:rgb(0,0,0)" class=3D"gmail-m_749761175140180926styled-by=
-prettify"> X</span><span style=3D"color:rgb(102,102,0)" class=3D"gmail-m_7=
49761175140180926styled-by-prettify">);</span><span style=3D"color:rgb(0,0,=
0)" class=3D"gmail-m_749761175140180926styled-by-prettify"> </span><span st=
yle=3D"color:rgb(0,0,136)" class=3D"gmail-m_749761175140180926styled-by-pre=
ttify">true</span><span style=3D"color:rgb(0,0,0)" class=3D"gmail-m_7497611=
75140180926styled-by-prettify"> </span><span style=3D"color:rgb(102,102,0)"=
class=3D"gmail-m_749761175140180926styled-by-prettify">?</span><span style=
=3D"color:rgb(0,0,0)" class=3D"gmail-m_749761175140180926styled-by-prettify=
"> </span><span style=3D"color:rgb(102,102,0)" class=3D"gmail-m_74976117514=
0180926styled-by-prettify">++</span><span style=3D"color:rgb(0,0,0)" class=
=3D"gmail-m_749761175140180926styled-by-prettify"> X</span><span style=3D"c=
olor:rgb(102,102,0)" class=3D"gmail-m_749761175140180926styled-by-prettify"=
>)</span><span style=3D"color:rgb(0,0,0)" class=3D"gmail-m_7497611751401809=
26styled-by-prettify"><br><br></span><span style=3D"color:rgb(136,0,0)" cla=
ss=3D"gmail-m_749761175140180926styled-by-prettify">#define</span><span sty=
le=3D"color:rgb(0,0,0)" class=3D"gmail-m_749761175140180926styled-by-pretti=
fy"> times</span><span style=3D"color:rgb(102,102,0)" class=3D"gmail-m_7497=
61175140180926styled-by-prettify">(</span><span style=3D"color:rgb(0,0,0)" =
class=3D"gmail-m_749761175140180926styled-by-prettify">X</span><span style=
=3D"color:rgb(102,102,0)" class=3D"gmail-m_749761175140180926styled-by-pret=
tify">)</span><span style=3D"color:rgb(0,0,0)" class=3D"gmail-m_74976117514=
0180926styled-by-prettify"> times_auto</span><span style=3D"color:rgb(102,1=
02,0)" class=3D"gmail-m_749761175140180926styled-by-prettify">(</span><span=
style=3D"color:rgb(0,0,0)" class=3D"gmail-m_749761175140180926styled-by-pr=
ettify">CAT</span><span style=3D"color:rgb(102,102,0)" class=3D"gmail-m_749=
761175140180926styled-by-prettify">(</span><span style=3D"color:rgb(0,0,0)"=
class=3D"gmail-m_749761175140180926styled-by-prettify">EAT_</span><span st=
yle=3D"color:rgb(102,102,0)" class=3D"gmail-m_749761175140180926styled-by-p=
rettify">,</span><span style=3D"color:rgb(0,0,0)" class=3D"gmail-m_74976117=
5140180926styled-by-prettify"> X</span><span style=3D"color:rgb(102,102,0)"=
class=3D"gmail-m_749761175140180926styled-by-prettify">))</span><span styl=
e=3D"color:rgb(0,0,0)" class=3D"gmail-m_749761175140180926styled-by-prettif=
y"><br><br></span><span style=3D"color:rgb(0,0,136)" class=3D"gmail-m_74976=
1175140180926styled-by-prettify">extern</span><span style=3D"color:rgb(0,0,=
0)" class=3D"gmail-m_749761175140180926styled-by-prettify"> </span><span st=
yle=3D"color:rgb(0,0,136)" class=3D"gmail-m_749761175140180926styled-by-pre=
ttify">void</span><span style=3D"color:rgb(0,0,0)" class=3D"gmail-m_7497611=
75140180926styled-by-prettify"> f</span><span style=3D"color:rgb(102,102,0)=
" class=3D"gmail-m_749761175140180926styled-by-prettify">(</span><span styl=
e=3D"color:rgb(0,0,136)" class=3D"gmail-m_749761175140180926styled-by-prett=
ify">int</span><span style=3D"color:rgb(102,102,0)" class=3D"gmail-m_749761=
175140180926styled-by-prettify">);</span><span style=3D"color:rgb(0,0,0)" c=
lass=3D"gmail-m_749761175140180926styled-by-prettify"><br><br></span><span =
style=3D"color:rgb(0,0,136)" class=3D"gmail-m_749761175140180926styled-by-p=
rettify">void</span><span style=3D"color:rgb(0,0,0)" class=3D"gmail-m_74976=
1175140180926styled-by-prettify"> a</span><span style=3D"color:rgb(102,102,=
0)" class=3D"gmail-m_749761175140180926styled-by-prettify">()</span><span s=
tyle=3D"color:rgb(0,0,0)" class=3D"gmail-m_749761175140180926styled-by-pret=
tify"><br></span><span style=3D"color:rgb(102,102,0)" class=3D"gmail-m_7497=
61175140180926styled-by-prettify">{</span><span style=3D"color:rgb(0,0,0)" =
class=3D"gmail-m_749761175140180926styled-by-prettify"><br>=C2=A0 =C2=A0 </=
span><span style=3D"color:rgb(0,0,136)" class=3D"gmail-m_749761175140180926=
styled-by-prettify">const</span><span style=3D"color:rgb(0,0,0)" class=3D"g=
mail-m_749761175140180926styled-by-prettify"> </span><span style=3D"color:r=
gb(0,0,136)" class=3D"gmail-m_749761175140180926styled-by-prettify">int</sp=
an><span style=3D"color:rgb(0,0,0)" class=3D"gmail-m_749761175140180926styl=
ed-by-prettify"> n </span><span style=3D"color:rgb(102,102,0)" class=3D"gma=
il-m_749761175140180926styled-by-prettify">=3D</span><span style=3D"color:r=
gb(0,0,0)" class=3D"gmail-m_749761175140180926styled-by-prettify"> </span><=
span style=3D"color:rgb(0,102,102)" class=3D"gmail-m_749761175140180926styl=
ed-by-prettify">3</span><span style=3D"color:rgb(102,102,0)" class=3D"gmail=
-m_749761175140180926styled-by-prettify">;</span><span style=3D"color:rgb(0=
,0,0)" class=3D"gmail-m_749761175140180926styled-by-prettify"><br>=C2=A0 =
=C2=A0 times</span><span style=3D"color:rgb(102,102,0)" class=3D"gmail-m_74=
9761175140180926styled-by-prettify">(</span><span style=3D"color:rgb(0,0,13=
6)" class=3D"gmail-m_749761175140180926styled-by-prettify">auto</span><span=
style=3D"color:rgb(0,0,0)" class=3D"gmail-m_749761175140180926styled-by-pr=
ettify"> i </span><span style=3D"color:rgb(102,102,0)" class=3D"gmail-m_749=
761175140180926styled-by-prettify">:</span><span style=3D"color:rgb(0,0,0)"=
class=3D"gmail-m_749761175140180926styled-by-prettify"> n</span><span styl=
e=3D"color:rgb(102,102,0)" class=3D"gmail-m_749761175140180926styled-by-pre=
ttify">)</span><span style=3D"color:rgb(0,0,0)" class=3D"gmail-m_7497611751=
40180926styled-by-prettify"> </span><span style=3D"color:rgb(102,102,0)" cl=
ass=3D"gmail-m_749761175140180926styled-by-prettify">{</span><span style=3D=
"color:rgb(0,0,0)" class=3D"gmail-m_749761175140180926styled-by-prettify"><=
br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 f</span><span style=3D"color:rgb(102,=
102,0)" class=3D"gmail-m_749761175140180926styled-by-prettify">(</span><spa=
n style=3D"color:rgb(0,0,0)" class=3D"gmail-m_749761175140180926styled-by-p=
rettify">i</span><span style=3D"color:rgb(102,102,0)" class=3D"gmail-m_7497=
61175140180926styled-by-prettify">);</span><span style=3D"color:rgb(0,0,0)"=
class=3D"gmail-m_749761175140180926styled-by-prettify"><br>=C2=A0 =C2=A0 <=
/span><span style=3D"color:rgb(102,102,0)" class=3D"gmail-m_749761175140180=
926styled-by-prettify">}</span><span style=3D"color:rgb(0,0,0)" class=3D"gm=
ail-m_749761175140180926styled-by-prettify"><br></span><span style=3D"color=
:rgb(102,102,0)" class=3D"gmail-m_749761175140180926styled-by-prettify">}</=
span></div></code></div></div></blockquote><div><br></div><div>Hah, this se=
ems like a fun game. My entry: <a href=3D"https://godbolt.org/g/yolwFc">htt=
ps://godbolt.org/g/yolwFc</a></div><div><br></div><div>But really, why both=
er when we can just use</div><div><br></div><div>=C2=A0 for (auto i : integ=
ral_range(n))</div><div><br></div><div>?</div><div><br></div><blockquote cl=
ass=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid=
rgb(204,204,204);padding-left:1ex"><div dir=3D"ltr">So far it only works f=
or const n and auto i. I'm unsure if that's a problem at all - if y=
ou can modify (ok, destroy) n then `while(n--)` does the trick in reverse o=
rder [1].<br>Wish we had constexpr?: operator like if constexpr(), that'=
;d solve a lot of things...<br>If you're worried about the performance,=
<a href=3D"https://godbolt.org/g/ioV3XB" target=3D"_blank">https://godbolt=
..org/g/ioV3XB</a><br>(Btw, I like the idea, I'm just saying that a macr=
o can do this for you.)<br>Or make it auto-less, that's far easier - yo=
u might make type spec an optional parameter. <br><br>Thanks,<br>-lorro<br>=
[1] Still in TOP10, <a href=3D"http://stackoverflow.com/questions/1642028/w=
hat-is-the-name-of-the-operator-in-c" target=3D"_blank">http://stackoverflo=
w.com/<wbr>questions/1642028/what-is-the-<wbr>name-of-the-operator-in-c</a>=
<span class=3D"gmail-"><br><br>2016. janu=C3=A1r 16., szombat 10:38:19 UTC+=
1 id=C5=91pontban Andrew Tomazos a k=C3=B6vetkez=C5=91t =C3=ADrta:<blockquo=
te class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px =
solid rgb(204,204,204);padding-left:1ex"><div dir=3D"ltr">Please find attac=
hed a rough incomplete 2-page draft entitled "Proposal of Index-Based =
For Loop"<div><br></div><div>Preliminary thoughts appreciated.</div><d=
iv><br></div><div>Thanks,</div><div>Andrew.</div><div><br></div></div>
</blockquote></span></div>
<p></p>
-- <br><span class=3D"gmail-">
You received this message because you are subscribed to the Google Groups &=
quot;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"mailto:std-proposals+unsubscribe@isocpp.org" target=3D"_=
blank">std-proposals+unsubscribe@<wbr>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></span>
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/05f82d7c-4132-42d1-acc8-657a53626932%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter" target=3D"_blank">=
https://groups.google.com/a/<wbr>isocpp.org/d/msgid/std-<wbr>proposals/05f8=
2d7c-4132-42d1-<wbr>acc8-657a53626932%40isocpp.org</a><wbr>.<br>
</blockquote></div><br></div></div>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;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"mailto:std-proposals+unsubscribe@isocpp.org">std-proposa=
ls+unsubscribe@isocpp.org</a>.<br />
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org">std-proposals@isocpp.org</a>.<br />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAOfiQqmgxd9juxu%2BLQ8ZWhEsfNY8f47jE%=
3DoSFukRBQwvUHYngg%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfooter"=
>https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAOfiQqmgxd9j=
uxu%2BLQ8ZWhEsfNY8f47jE%3DoSFukRBQwvUHYngg%40mail.gmail.com</a>.<br />
--001a11425aa40c8a7d053e4e4dc3--
.
Author: szollosi.lorand@gmail.com
Date: Sat, 8 Oct 2016 01:40:31 -0700 (PDT)
Raw View
------=_Part_25_2054679230.1475916031955
Content-Type: multipart/alternative;
boundary="----=_Part_26_290245484.1475916031956"
------=_Part_26_290245484.1475916031956
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
Hi,
UB: to my knowledge it's not UB, as the underlying types are int, i.e.,=20
same-prefix POD. Just in case you're very worried, I can also do this under=
=20
strict aliasing rules for int using `for(union { ...; bool j =3D true}; j;=
=20
j=3Dfalse) for(i =3D 0;...;...)` loop, same result applies.
Richard: This is also good :).=20
Why: On one hand, it's a very good puzzle to see if the language already=20
allows for something being asked, one way or another. OTOH, there are=20
fields where DSLs are important. We here are mostly used to programmer's=20
notation, thus we'd simply write the old way or with integral_range. When=
=20
communicating to, let alone writing code for people who are used to other=
=20
notations, however, you might not accept our way of doing things, they=20
except mathematical / phys / eco / eng. / etc. notation. Now, either you=20
end up writing an interpreter/compiler, or you allow EDSLs in the language.=
=20
So far C++ has been a very good language for EDSLs, despite the common=20
claims not to do so. Note that the 'field' answer is sometimes different=20
than the 'language' answer: an example question that shows up all the time,=
=20
whether we allow new user-defined infix operators.
A very good example of how important the syntax is is the range for itself:=
=20
a *language construct* that 1. calls *conventionally-named* functions 2.=20
*defines* ASD variables other than the user explicitly asked, thus it's=20
incompatible with coroutines, 3. has *state that's not inspectable*. Yet we=
=20
love it, because we've seen it in other languages and wanted it for C++; we=
=20
wanted the benefits.
With all that said, I'd prefer solutions that allow user to write their=20
EDSL rather than bringing together all EDSLs in C++, hence I said=20
constexpr?:.
Thanks,
-lorro
2016. okt=C3=B3ber 8., szombat 0:55:06 UTC+2 id=C5=91pontban Richard Smith =
a=20
k=C3=B6vetkez=C5=91t =C3=ADrta:
>
> On Fri, Oct 7, 2016 at 2:09 PM, <szollos...@gmail.com <javascript:>>=20
> wrote:
>
>> Hi,
>>
>> #define EAT_auto
>> #define CAT1(X, Y) X ## Y
>> #define CAT(X, Y) CAT1(X, Y)
>>
>> #define \
>> times_auto(X) \
>> for (union \
>> { \
>> int X * 0 + sizeof(int) * 8; \
>> int j =3D (true ? X, j) =3D 0; \
>> }; i < (false ? X); true ? ++ X)
>>
>> #define times(X) times_auto(CAT(EAT_, X))
>>
>> extern void f(int);
>>
>> void a()
>> {
>> const int n =3D 3;
>> times(auto i : n) {
>> f(i);
>> }
>> }
>>
>
> Hah, this seems like a fun game. My entry: https://godbolt.org/g/yolwFc
>
> But really, why bother when we can just use
>
> for (auto i : integral_range(n))
>
> ?
>
> So far it only works for const n and auto i. I'm unsure if that's a=20
>> problem at all - if you can modify (ok, destroy) n then `while(n--)` doe=
s=20
>> the trick in reverse order [1].
>> Wish we had constexpr?: operator like if constexpr(), that'd solve a lot=
=20
>> of things...
>> If you're worried about the performance, https://godbolt.org/g/ioV3XB
>> (Btw, I like the idea, I'm just saying that a macro can do this for you.=
)
>> Or make it auto-less, that's far easier - you might make type spec an=20
>> optional parameter.=20
>>
>> Thanks,
>> -lorro
>> [1] Still in TOP10,=20
>> http://stackoverflow.com/questions/1642028/what-is-the-name-of-the-opera=
tor-in-c
>>
>> 2016. janu=C3=A1r 16., szombat 10:38:19 UTC+1 id=C5=91pontban Andrew Tom=
azos a=20
>> k=C3=B6vetkez=C5=91t =C3=ADrta:
>>>
>>> Please find attached a rough incomplete 2-page draft entitled "Proposal=
=20
>>> of Index-Based For Loop"
>>>
>>> Preliminary thoughts appreciated.
>>>
>>> Thanks,
>>> Andrew.
>>>
>>> --=20
>> You received this message because you are subscribed to the Google Group=
s=20
>> "ISO C++ Standard - Future Proposals" group.
>> To unsubscribe from this group and stop receiving emails from it, send a=
n=20
>> email to std-proposal...@isocpp.org <javascript:>.
>> To post to this group, send email to std-pr...@isocpp.org <javascript:>.
>> To view this discussion on the web visit=20
>> https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/05f82d7c-41=
32-42d1-acc8-657a53626932%40isocpp.org=20
>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/05f82d7c-4=
132-42d1-acc8-657a53626932%40isocpp.org?utm_medium=3Demail&utm_source=3Dfoo=
ter>
>> .
>>
>
>
--=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/cb4021f1-7a4c-454c-905a-81c53fc9ad2a%40isocpp.or=
g.
------=_Part_26_290245484.1475916031956
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr">Hi,<br><br>UB: to my knowledge it's not UB, as the und=
erlying types are int, i.e., same-prefix POD. Just in case you're very =
worried, I can also do this under strict aliasing rules for int using `for(=
union { ...; bool j =3D true}; j; j=3Dfalse) for(i =3D 0;...;...)` loop, sa=
me result applies.<br><br>Richard: This is also good :). <br><br>Why: On on=
e hand, it's a very good puzzle to see if the language already allows f=
or something being asked, one way or another. OTOH, there are fields where =
DSLs are important. We here are mostly used to programmer's notation, t=
hus we'd simply write the old way or with integral_range. When communic=
ating to, let alone writing code for people who are used to other notations=
, however, you might not accept our way of doing things, they except mathem=
atical / phys / eco / eng. / etc. notation. Now, either you end up writing =
an interpreter/compiler, or you allow EDSLs in the language. So far C++ has=
been a very good language for EDSLs, despite the common claims not to do s=
o. Note that the 'field' answer is sometimes different than the =
9;language' answer: an example question that shows up all the time, whe=
ther we allow new user-defined infix operators.<br>A very good example of h=
ow important the syntax is is the range for itself: a <i>language construct=
</i> that<i> </i>1. calls <i>conventionally-named</i> functions 2. <i>defin=
es</i> ASD variables other than the user explicitly asked, thus it's in=
compatible with coroutines, 3. has <i>state that's not inspectable</i>.=
Yet we love it, because we've seen it in other languages and wanted it=
for C++; we wanted the benefits.<br>With all that said, I'd prefer sol=
utions that allow user to write their EDSL rather than bringing together al=
l EDSLs in C++, hence I said constexpr?:.<br><br>Thanks,<br>-lorro<br><br>2=
016. okt=C3=B3ber 8., szombat 0:55:06 UTC+2 id=C5=91pontban Richard Smith a=
k=C3=B6vetkez=C5=91t =C3=ADrta:<blockquote class=3D"gmail_quote" style=3D"=
margin: 0;margin-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;=
"><div dir=3D"ltr"><div><div class=3D"gmail_quote">On Fri, Oct 7, 2016 at 2=
:09 PM, <span dir=3D"ltr"><<a href=3D"javascript:" target=3D"_blank" gd=
f-obfuscated-mailto=3D"ydISomkyCAAJ" rel=3D"nofollow" onmousedown=3D"this.h=
ref=3D'javascript:';return true;" onclick=3D"this.href=3D'javas=
cript:';return true;">szollos...@gmail.com</a>></span> wrote:<br><bl=
ockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-lef=
t:1px solid rgb(204,204,204);padding-left:1ex"><div dir=3D"ltr">Hi,<br><br>=
<div style=3D"background-color:rgb(250,250,250);border-color:rgb(187,187,18=
7);border-style:solid;border-width:1px;word-wrap:break-word"><code><div><sp=
an style=3D"color:rgb(136,0,0)">#define</span><span style=3D"color:rgb(0,0,=
0)"> EAT_auto<br></span><span style=3D"color:rgb(136,0,0)">#define</span><s=
pan style=3D"color:rgb(0,0,0)"> CAT1</span><span style=3D"color:rgb(102,102=
,0)">(</span><span style=3D"color:rgb(0,0,0)">X</span><span style=3D"color:=
rgb(102,102,0)">,</span><span style=3D"color:rgb(0,0,0)"> Y</span><span sty=
le=3D"color:rgb(102,102,0)">)</span><span style=3D"color:rgb(0,0,0)"> X </s=
pan><span style=3D"color:rgb(136,0,0)">## Y</span><span style=3D"color:rgb(=
0,0,0)"><br></span><span style=3D"color:rgb(136,0,0)">#define</span><span s=
tyle=3D"color:rgb(0,0,0)"> CAT</span><span style=3D"color:rgb(102,102,0)">(=
</span><span style=3D"color:rgb(0,0,0)">X</span><span style=3D"color:rgb(10=
2,102,0)">,</span><span style=3D"color:rgb(0,0,0)"> Y</span><span style=3D"=
color:rgb(102,102,0)">)</span><span style=3D"color:rgb(0,0,0)"> CAT1</span>=
<span style=3D"color:rgb(102,102,0)">(</span><span style=3D"color:rgb(0,0,0=
)">X</span><span style=3D"color:rgb(102,102,0)">,</span><span style=3D"colo=
r:rgb(0,0,0)"> Y</span><span style=3D"color:rgb(102,102,0)">)</span><span s=
tyle=3D"color:rgb(0,0,0)"><br><br></span><span style=3D"color:rgb(136,0,0)"=
>#define</span><span style=3D"color:rgb(0,0,0)"> =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0</span><span style=
=3D"color:rgb(102,102,0)">\</span><span style=3D"color:rgb(0,0,0)"><br>time=
s_auto</span><span style=3D"color:rgb(102,102,0)">(</span><span style=3D"co=
lor:rgb(0,0,0)">X</span><span style=3D"color:rgb(102,102,0)">)</span><span =
style=3D"color:rgb(0,0,0)"> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0</span><span style=3D"color:rgb(102,102,0)">\</span><span styl=
e=3D"color:rgb(0,0,0)"><br>=C2=A0 =C2=A0 </span><span style=3D"color:rgb(0,=
0,136)">for</span><span style=3D"color:rgb(0,0,0)"> </span><span style=3D"c=
olor:rgb(102,102,0)">(</span><span style=3D"color:rgb(0,0,136)">union</span=
><span style=3D"color:rgb(0,0,0)"> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 </span><span style=3D"color:rgb(102,102,0)">\</span><span sty=
le=3D"color:rgb(0,0,0)"><br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0</span><span =
style=3D"color:rgb(102,102,0)">{</span><span style=3D"color:rgb(0,0,0)"> =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 </span><=
span style=3D"color:rgb(102,102,0)">\</span><span style=3D"color:rgb(0,0,0)=
"><br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0</span><span style=3D=
"color:rgb(0,0,136)">int</span><span style=3D"color:rgb(0,0,0)"> X </span><=
span style=3D"color:rgb(102,102,0)">*</span><span style=3D"color:rgb(0,0,0)=
"> </span><span style=3D"color:rgb(0,102,102)">0</span><span style=3D"color=
:rgb(0,0,0)"> </span><span style=3D"color:rgb(102,102,0)">+</span><span sty=
le=3D"color:rgb(0,0,0)"> </span><span style=3D"color:rgb(0,0,136)">sizeof</=
span><span style=3D"color:rgb(102,102,0)">(</span><span style=3D"color:rgb(=
0,0,136)">int</span><span style=3D"color:rgb(102,102,0)">)</span><span styl=
e=3D"color:rgb(0,0,0)"> </span><span style=3D"color:rgb(102,102,0)">*</span=
><span style=3D"color:rgb(0,0,0)"> </span><span style=3D"color:rgb(0,102,10=
2)">8</span><span style=3D"color:rgb(102,102,0)">;</span><span style=3D"col=
or:rgb(0,0,0)"> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0</span><span style=3D"col=
or:rgb(102,102,0)">\</span><span style=3D"color:rgb(0,0,0)"><br>=C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0</span><span style=3D"color:rgb(0,0,1=
36)">int</span><span style=3D"color:rgb(0,0,0)"> j </span><span style=3D"co=
lor:rgb(102,102,0)">=3D</span><span style=3D"color:rgb(0,0,0)"> </span><spa=
n style=3D"color:rgb(102,102,0)">(</span><span style=3D"color:rgb(0,0,136)"=
>true</span><span style=3D"color:rgb(0,0,0)"> </span><span style=3D"color:r=
gb(102,102,0)">?</span><span style=3D"color:rgb(0,0,0)"> X</span><span styl=
e=3D"color:rgb(102,102,0)">,</span><span style=3D"color:rgb(0,0,0)"> j</spa=
n><span style=3D"color:rgb(102,102,0)">)</span><span style=3D"color:rgb(0,0=
,0)"> </span><span style=3D"color:rgb(102,102,0)">=3D</span><span style=3D"=
color:rgb(0,0,0)"> </span><span style=3D"color:rgb(0,102,102)">0</span><spa=
n style=3D"color:rgb(102,102,0)">;</span><span style=3D"color:rgb(0,0,0)"> =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0</span><span style=3D"color:rgb(10=
2,102,0)">\</span><span style=3D"color:rgb(0,0,0)"><br>=C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0</span><span style=3D"color:rgb(102,102,0)">};</span><span st=
yle=3D"color:rgb(0,0,0)"> i </span><span style=3D"color:rgb(102,102,0)"><=
;</span><span style=3D"color:rgb(0,0,0)"> </span><span style=3D"color:rgb(1=
02,102,0)">(</span><span style=3D"color:rgb(0,0,136)">false</span><span sty=
le=3D"color:rgb(0,0,0)"> </span><span style=3D"color:rgb(102,102,0)">?</spa=
n><span style=3D"color:rgb(0,0,0)"> X</span><span style=3D"color:rgb(102,10=
2,0)">);</span><span style=3D"color:rgb(0,0,0)"> </span><span style=3D"colo=
r:rgb(0,0,136)">true</span><span style=3D"color:rgb(0,0,0)"> </span><span s=
tyle=3D"color:rgb(102,102,0)">?</span><span style=3D"color:rgb(0,0,0)"> </s=
pan><span style=3D"color:rgb(102,102,0)">++</span><span style=3D"color:rgb(=
0,0,0)"> X</span><span style=3D"color:rgb(102,102,0)">)</span><span style=
=3D"color:rgb(0,0,0)"><br><br></span><span style=3D"color:rgb(136,0,0)">#de=
fine</span><span style=3D"color:rgb(0,0,0)"> times</span><span style=3D"col=
or:rgb(102,102,0)">(</span><span style=3D"color:rgb(0,0,0)">X</span><span s=
tyle=3D"color:rgb(102,102,0)">)</span><span style=3D"color:rgb(0,0,0)"> tim=
es_auto</span><span style=3D"color:rgb(102,102,0)">(</span><span style=3D"c=
olor:rgb(0,0,0)">CAT</span><span style=3D"color:rgb(102,102,0)">(</span><sp=
an style=3D"color:rgb(0,0,0)">EAT_</span><span style=3D"color:rgb(102,102,0=
)">,</span><span style=3D"color:rgb(0,0,0)"> X</span><span style=3D"color:r=
gb(102,102,0)">))</span><span style=3D"color:rgb(0,0,0)"><br><br></span><sp=
an style=3D"color:rgb(0,0,136)">extern</span><span style=3D"color:rgb(0,0,0=
)"> </span><span style=3D"color:rgb(0,0,136)">void</span><span style=3D"col=
or:rgb(0,0,0)"> f</span><span style=3D"color:rgb(102,102,0)">(</span><span =
style=3D"color:rgb(0,0,136)">int</span><span style=3D"color:rgb(102,102,0)"=
>);</span><span style=3D"color:rgb(0,0,0)"><br><br></span><span style=3D"co=
lor:rgb(0,0,136)">void</span><span style=3D"color:rgb(0,0,0)"> a</span><spa=
n style=3D"color:rgb(102,102,0)">()</span><span style=3D"color:rgb(0,0,0)">=
<br></span><span style=3D"color:rgb(102,102,0)">{</span><span style=3D"colo=
r:rgb(0,0,0)"><br>=C2=A0 =C2=A0 </span><span style=3D"color:rgb(0,0,136)">c=
onst</span><span style=3D"color:rgb(0,0,0)"> </span><span style=3D"color:rg=
b(0,0,136)">int</span><span style=3D"color:rgb(0,0,0)"> n </span><span styl=
e=3D"color:rgb(102,102,0)">=3D</span><span style=3D"color:rgb(0,0,0)"> </sp=
an><span style=3D"color:rgb(0,102,102)">3</span><span style=3D"color:rgb(10=
2,102,0)">;</span><span style=3D"color:rgb(0,0,0)"><br>=C2=A0 =C2=A0 times<=
/span><span style=3D"color:rgb(102,102,0)">(</span><span style=3D"color:rgb=
(0,0,136)">auto</span><span style=3D"color:rgb(0,0,0)"> i </span><span styl=
e=3D"color:rgb(102,102,0)">:</span><span style=3D"color:rgb(0,0,0)"> n</spa=
n><span style=3D"color:rgb(102,102,0)">)</span><span style=3D"color:rgb(0,0=
,0)"> </span><span style=3D"color:rgb(102,102,0)">{</span><span style=3D"co=
lor:rgb(0,0,0)"><br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 f</span><span style=
=3D"color:rgb(102,102,0)">(</span><span style=3D"color:rgb(0,0,0)">i</span>=
<span style=3D"color:rgb(102,102,0)">);</span><span style=3D"color:rgb(0,0,=
0)"><br>=C2=A0 =C2=A0 </span><span style=3D"color:rgb(102,102,0)">}</span><=
span style=3D"color:rgb(0,0,0)"><br></span><span style=3D"color:rgb(102,102=
,0)">}</span></div></code></div></div></blockquote><div><br></div><div>Hah,=
this seems like a fun game. My entry: <a href=3D"https://godbolt.org/g/yol=
wFc" target=3D"_blank" rel=3D"nofollow" onmousedown=3D"this.href=3D'htt=
ps://www.google.com/url?q\x3dhttps%3A%2F%2Fgodbolt.org%2Fg%2FyolwFc\x26sa\x=
3dD\x26sntz\x3d1\x26usg\x3dAFQjCNHFCxpm1PQV79gF77U1HIN2wvBiOA';return t=
rue;" onclick=3D"this.href=3D'https://www.google.com/url?q\x3dhttps%3A%=
2F%2Fgodbolt.org%2Fg%2FyolwFc\x26sa\x3dD\x26sntz\x3d1\x26usg\x3dAFQjCNHFCxp=
m1PQV79gF77U1HIN2wvBiOA';return true;">https://godbolt.org/g/yolwFc</a>=
</div><div><br></div><div>But really, why bother when we can just use</div>=
<div><br></div><div>=C2=A0 for (auto i : integral_range(n))</div><div><br><=
/div><div>?</div><div><br></div><blockquote class=3D"gmail_quote" style=3D"=
margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-lef=
t:1ex"><div dir=3D"ltr">So far it only works for const n and auto i. I'=
m unsure if that's a problem at all - if you can modify (ok, destroy) n=
then `while(n--)` does the trick in reverse order [1].<br>Wish we had cons=
texpr?: operator like if constexpr(), that'd solve a lot of things...<b=
r>If you're worried about the performance, <a href=3D"https://godbolt.o=
rg/g/ioV3XB" target=3D"_blank" rel=3D"nofollow" onmousedown=3D"this.href=3D=
'https://www.google.com/url?q\x3dhttps%3A%2F%2Fgodbolt.org%2Fg%2FioV3XB=
\x26sa\x3dD\x26sntz\x3d1\x26usg\x3dAFQjCNFWAvAlHWVSgP8XPRa-CJOpXS8OaQ';=
return true;" onclick=3D"this.href=3D'https://www.google.com/url?q\x3dh=
ttps%3A%2F%2Fgodbolt.org%2Fg%2FioV3XB\x26sa\x3dD\x26sntz\x3d1\x26usg\x3dAFQ=
jCNFWAvAlHWVSgP8XPRa-CJOpXS8OaQ';return true;">https://godbolt.org/g/io=
V3XB</a><br>(Btw, I like the idea, I'm just saying that a macro can do =
this for you.)<br>Or make it auto-less, that's far easier - you might m=
ake type spec an optional parameter. <br><br>Thanks,<br>-lorro<br>[1] Still=
in TOP10, <a href=3D"http://stackoverflow.com/questions/1642028/what-is-th=
e-name-of-the-operator-in-c" target=3D"_blank" rel=3D"nofollow" onmousedown=
=3D"this.href=3D'http://www.google.com/url?q\x3dhttp%3A%2F%2Fstackoverf=
low.com%2Fquestions%2F1642028%2Fwhat-is-the-name-of-the-operator-in-c\x26sa=
\x3dD\x26sntz\x3d1\x26usg\x3dAFQjCNEj0z-v4RbIgyDn4sjelnQ8cdIcmQ';return=
true;" onclick=3D"this.href=3D'http://www.google.com/url?q\x3dhttp%3A%=
2F%2Fstackoverflow.com%2Fquestions%2F1642028%2Fwhat-is-the-name-of-the-oper=
ator-in-c\x26sa\x3dD\x26sntz\x3d1\x26usg\x3dAFQjCNEj0z-v4RbIgyDn4sjelnQ8cdI=
cmQ';return true;">http://stackoverflow.com/<wbr>questions/1642028/what=
-is-the-<wbr>name-of-the-operator-in-c</a><span><br><br>2016. janu=C3=A1r 1=
6., szombat 10:38:19 UTC+1 id=C5=91pontban Andrew Tomazos a k=C3=B6vetkez=
=C5=91t =C3=ADrta:<blockquote class=3D"gmail_quote" style=3D"margin:0px 0px=
0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div di=
r=3D"ltr">Please find attached a rough incomplete 2-page draft entitled &qu=
ot;Proposal of Index-Based For Loop"<div><br></div><div>Preliminary th=
oughts appreciated.</div><div><br></div><div>Thanks,</div><div>Andrew.</div=
><div><br></div></div>
</blockquote></span></div>
<p></p>
-- <br><span>
You received this message because you are subscribed to the Google Groups &=
quot;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"=
ydISomkyCAAJ" rel=3D"nofollow" onmousedown=3D"this.href=3D'javascript:&=
#39;;return true;" onclick=3D"this.href=3D'javascript:';return true=
;">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"ydISomkyCAAJ" rel=3D"nofollow" onmousedown=3D"=
this.href=3D'javascript:';return true;" onclick=3D"this.href=3D'=
;javascript:';return true;">std-pr...@isocpp.org</a>.<br></span>
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/05f82d7c-4132-42d1-acc8-657a53626932%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter" target=3D"_blank" =
rel=3D"nofollow" onmousedown=3D"this.href=3D'https://groups.google.com/=
a/isocpp.org/d/msgid/std-proposals/05f82d7c-4132-42d1-acc8-657a53626932%40i=
socpp.org?utm_medium\x3demail\x26utm_source\x3dfooter';return true;" on=
click=3D"this.href=3D'https://groups.google.com/a/isocpp.org/d/msgid/st=
d-proposals/05f82d7c-4132-42d1-acc8-657a53626932%40isocpp.org?utm_medium\x3=
demail\x26utm_source\x3dfooter';return true;">https://groups.google.com=
/a/<wbr>isocpp.org/d/msgid/std-<wbr>proposals/05f82d7c-4132-42d1-<wbr>acc8-=
657a53626932%40isocpp.org</a><wbr>.<br>
</blockquote></div><br></div></div>
</blockquote></div>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;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"mailto:std-proposals+unsubscribe@isocpp.org">std-proposa=
ls+unsubscribe@isocpp.org</a>.<br />
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org">std-proposals@isocpp.org</a>.<br />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/cb4021f1-7a4c-454c-905a-81c53fc9ad2a%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/cb4021f1-7a4c-454c-905a-81c53fc9ad2a=
%40isocpp.org</a>.<br />
------=_Part_26_290245484.1475916031956--
------=_Part_25_2054679230.1475916031955--
.
Author: "D. B." <db0451@gmail.com>
Date: Sat, 8 Oct 2016 10:22:01 +0100
Raw View
--001a11444b2635e08e053e570ff7
Content-Type: text/plain; charset=UTF-8
On Sat, Oct 8, 2016 at 9:40 AM, <szollosi.lorand@gmail.com> wrote:
> Hi,
>
> UB: to my knowledge it's not UB, as the underlying types are int, i.e.,
> same-prefix POD. Just in case you're very worried, I can also do this under
> strict aliasing rules for int using `for(union { ...; bool j = true}; j;
> j=false) for(i = 0;...;...)` loop, same result applies.
>
I thought you might say that! :) But here's the thing. This is something
I've wondered about many times, and I don't think it's currently covered by
the language, though I'd welcome an authoritative comment on that, if
Richard or anyone has one!
The C++ Standard only makes an exception for allowing 'punning' i.e.
simultaneous existence/reading/writing of union members - which boils down
to simply substituting their names - when the access is done via an
instance of the union, and the members in question are "standard layout
structs with a common initial sequence".
(Thankfully, C++ did not adopt some of the horrible ambiguities that C has
in this area.)
And as far as I can tell, an int is not a struct. So I'm not sure the
wording makes any allowance for 'punning' int or any other basic types
like this. Yeah, sure - a compiler would have to make efforts to generate
UB here - but the key thing is that it *could* do so, by omission.
But anyway, then I thought about it, and I realised - such 'punning' kind
of makes sense in the context of vintage C structs used as unsafe tagged
unions, but it makes no sense for primitive types. Why write union { int a;
int b; } when we can just write int c?
Well, I guess you've just tried to answer that question ;)
As for the rest, nest commentary on the 'whys' - it is indeed an amusing
thought experiment. I like Richard's syntax a lot more, though. :D
--
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.
To view this discussion on the web visit https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CACGiwhGhp_Yn-Wj4dy43_7pWhJN0%3DKoysOeAG3Wp%3D-5pN7KHUg%40mail.gmail.com.
--001a11444b2635e08e053e570ff7
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><div class=3D"gmail_extra"><br><div class=3D"gmail_quote">=
On Sat, Oct 8, 2016 at 9:40 AM, <span dir=3D"ltr"><<a href=3D"mailto:sz=
ollosi.lorand@gmail.com" target=3D"_blank">szollosi.lorand@gmail.com</a>>=
;</span> wrote:<br><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 =
..8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr">Hi,<br><=
br>UB: to my knowledge it's not UB, as the underlying types are int, i.=
e., same-prefix POD. Just in case you're very worried, I can also do th=
is under strict aliasing rules for int using `for(union { ...; bool j =3D t=
rue}; j; j=3Dfalse) for(i =3D 0;...;...)` loop, same result applies.<br></d=
iv></blockquote></div><br><br></div><div class=3D"gmail_extra">I thought yo=
u might say that! :) But here's the thing. This is something I've w=
ondered about many times, and I don't think it's currently covered =
by the language, though I'd welcome an authoritative comment on that, i=
f Richard or anyone has one!<br><br></div><div class=3D"gmail_extra">The C+=
+ Standard only makes an exception for allowing 'punning' i.e. simu=
ltaneous existence/reading/writing of <span style=3D"font-family:monospace,=
monospace">union</span> members - which boils down to simply substituting t=
heir names - when the access is done via an instance of the union, and the =
members in question are "standard layout <span style=3D"font-family:mo=
nospace,monospace">struct</span>s with a common initial sequence".<br>=
<br></div><div class=3D"gmail_extra">(Thankfully, C++ did not adopt some of=
the horrible ambiguities that C has in this area.)<br></div><div class=3D"=
gmail_extra"><br></div><div class=3D"gmail_extra">And as far as I can tell,=
an <span style=3D"font-family:monospace,monospace">int</span> is not a <sp=
an style=3D"font-family:monospace,monospace">struct</span>. So I'm not =
sure the wording makes any allowance for 'punning'=C2=A0 <span styl=
e=3D"font-family:monospace,monospace">int</span> or any other basic types l=
ike this. Yeah, sure - a compiler would have to make efforts to generate UB=
here - but the key thing is that it <i>could</i> do so, by omission.<br><b=
r></div><div class=3D"gmail_extra">But anyway, then I thought about it, and=
I realised - such 'punning' kind of makes sense in the context of =
vintage C structs used as unsafe tagged unions, but it makes no sense for p=
rimitive types. Why write<span style=3D"font-family:monospace,monospace"> u=
nion { int a; int b; }</span> when we can just write <span style=3D"font-fa=
mily:monospace,monospace">int c</span>?<br><br></div><div class=3D"gmail_ex=
tra">Well, I guess you've just tried to answer that question ;)<br><br>=
</div><div class=3D"gmail_extra">As for the rest, nest commentary on the &#=
39;whys' - it is indeed an amusing thought experiment. I like Richard&#=
39;s syntax a lot more, though. :D<br></div></div>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;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"mailto:std-proposals+unsubscribe@isocpp.org">std-proposa=
ls+unsubscribe@isocpp.org</a>.<br />
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org">std-proposals@isocpp.org</a>.<br />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CACGiwhGhp_Yn-Wj4dy43_7pWhJN0%3DKoysO=
eAG3Wp%3D-5pN7KHUg%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfooter"=
>https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CACGiwhGhp_Yn=
-Wj4dy43_7pWhJN0%3DKoysOeAG3Wp%3D-5pN7KHUg%40mail.gmail.com</a>.<br />
--001a11444b2635e08e053e570ff7--
.
Author: "D. B." <db0451@gmail.com>
Date: Sat, 8 Oct 2016 10:23:00 +0100
Raw View
--089e01228c12bd532b053e57120f
Content-Type: text/plain; charset=UTF-8
* nest => nice, wtf
--
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.
To view this discussion on the web visit https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CACGiwhEXJ4iZ6Mfwsrwej4hMJ%2BQv5o_LU1mk01E%2BA9-QVtF_ow%40mail.gmail.com.
--089e01228c12bd532b053e57120f
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr">* nest =3D> nice, wtf<br></div>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;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"mailto:std-proposals+unsubscribe@isocpp.org">std-proposa=
ls+unsubscribe@isocpp.org</a>.<br />
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org">std-proposals@isocpp.org</a>.<br />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CACGiwhEXJ4iZ6Mfwsrwej4hMJ%2BQv5o_LU1=
mk01E%2BA9-QVtF_ow%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfooter"=
>https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CACGiwhEXJ4iZ=
6Mfwsrwej4hMJ%2BQv5o_LU1mk01E%2BA9-QVtF_ow%40mail.gmail.com</a>.<br />
--089e01228c12bd532b053e57120f--
.
Author: szollosi.lorand@gmail.com
Date: Sat, 8 Oct 2016 05:57:19 -0700 (PDT)
Raw View
------=_Part_100_1500466569.1475931439412
Content-Type: multipart/alternative;
boundary="----=_Part_101_1930805618.1475931439413"
------=_Part_101_1930805618.1475931439413
Content-Type: text/plain; charset=UTF-8
Hi,
Just for reference, the totally UB-less code: (and yes, by all means,
generating a range is better. This is just about how to introduce a new
variable w/o {}.)
Thanks,
-lorro
#define EAT_auto
#define CAT1(X, Y) X ## Y
#define CAT(X, Y) CAT1(X, Y)
#define \
times_auto(X) \
for (union \
{ \
int X * 0 + sizeof(int) * 8; \
bool run = true; \
int j; \
}; run; run = false) \
for ((true ? X, j) = 0; \
(true ? X) < (false ? X); \
true ? ++X) \
#define times(X) times_auto(CAT(EAT_, X))
extern void f(int);
void a()
{
const int n = 3;
times(auto i : n) {
f(i);
}
}
--
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.
To view this discussion on the web visit https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/5d7081d2-de04-470e-b53e-4e386507388d%40isocpp.org.
------=_Part_101_1930805618.1475931439413
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr">Hi,<br><br>Just for reference, the totally UB-less code: (=
and yes, by all means, generating a range is better. This is just about how=
to introduce a new variable w/o {}.)<br><br>Thanks,<br>-lorro<br><br><div =
class=3D"prettyprint" style=3D"background-color: rgb(250, 250, 250); border=
-color: rgb(187, 187, 187); border-style: solid; border-width: 1px; word-wr=
ap: break-word;"><code class=3D"prettyprint"><div class=3D"subprettyprint">=
<span style=3D"color: #800;" class=3D"styled-by-prettify">#define</span><sp=
an style=3D"color: #000;" class=3D"styled-by-prettify"> EAT_auto<br></span>=
<span style=3D"color: #800;" class=3D"styled-by-prettify">#define</span><sp=
an style=3D"color: #000;" class=3D"styled-by-prettify"> CAT1</span><span st=
yle=3D"color: #660;" class=3D"styled-by-prettify">(</span><span style=3D"co=
lor: #000;" class=3D"styled-by-prettify">X</span><span style=3D"color: #660=
;" class=3D"styled-by-prettify">,</span><span style=3D"color: #000;" class=
=3D"styled-by-prettify"> Y</span><span style=3D"color: #660;" class=3D"styl=
ed-by-prettify">)</span><span style=3D"color: #000;" class=3D"styled-by-pre=
ttify"> X </span><span style=3D"color: #800;" class=3D"styled-by-prettify">=
## Y</span><span style=3D"color: #000;" class=3D"styled-by-prettify"><br></=
span><span style=3D"color: #800;" class=3D"styled-by-prettify">#define</spa=
n><span style=3D"color: #000;" class=3D"styled-by-prettify"> CAT</span><spa=
n style=3D"color: #660;" class=3D"styled-by-prettify">(</span><span style=
=3D"color: #000;" class=3D"styled-by-prettify">X</span><span style=3D"color=
: #660;" class=3D"styled-by-prettify">,</span><span style=3D"color: #000;" =
class=3D"styled-by-prettify"> Y</span><span style=3D"color: #660;" class=3D=
"styled-by-prettify">)</span><span style=3D"color: #000;" class=3D"styled-b=
y-prettify"> CAT1</span><span style=3D"color: #660;" class=3D"styled-by-pre=
ttify">(</span><span style=3D"color: #000;" class=3D"styled-by-prettify">X<=
/span><span style=3D"color: #660;" class=3D"styled-by-prettify">,</span><sp=
an style=3D"color: #000;" class=3D"styled-by-prettify"> Y</span><span style=
=3D"color: #660;" class=3D"styled-by-prettify">)</span><span style=3D"color=
: #000;" class=3D"styled-by-prettify"><br><br></span><span style=3D"color: =
#800;" class=3D"styled-by-prettify">#define</span><span style=3D"color: #00=
0;" class=3D"styled-by-prettify"> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0</span><span style=3D"color: #660;" class=3D=
"styled-by-prettify">\</span><span style=3D"color: #000;" class=3D"styled-b=
y-prettify"><br>times_auto</span><span style=3D"color: #660;" class=3D"styl=
ed-by-prettify">(</span><span style=3D"color: #000;" class=3D"styled-by-pre=
ttify">X</span><span style=3D"color: #660;" class=3D"styled-by-prettify">)<=
/span><span style=3D"color: #000;" class=3D"styled-by-prettify"> =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0</span><span style=3D"color: #660;=
" class=3D"styled-by-prettify">\</span><span style=3D"color: #000;" class=
=3D"styled-by-prettify"><br>=C2=A0 =C2=A0 </span><span style=3D"color: #008=
;" class=3D"styled-by-prettify">for</span><span style=3D"color: #000;" clas=
s=3D"styled-by-prettify"> </span><span style=3D"color: #660;" class=3D"styl=
ed-by-prettify">(</span><span style=3D"color: #008;" class=3D"styled-by-pre=
ttify">union</span><span style=3D"color: #000;" class=3D"styled-by-prettify=
"> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 </span><span style=3D"colo=
r: #660;" class=3D"styled-by-prettify">\</span><span style=3D"color: #000;"=
class=3D"styled-by-prettify"><br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0</span>=
<span style=3D"color: #660;" class=3D"styled-by-prettify">{</span><span sty=
le=3D"color: #000;" class=3D"styled-by-prettify"> =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 </span><span style=3D"color: #660;" clas=
s=3D"styled-by-prettify">\</span><span style=3D"color: #000;" class=3D"styl=
ed-by-prettify"><br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0</span>=
<span style=3D"color: #008;" class=3D"styled-by-prettify">int</span><span s=
tyle=3D"color: #000;" class=3D"styled-by-prettify"> =C2=A0X </span><span st=
yle=3D"color: #660;" class=3D"styled-by-prettify">*</span><span style=3D"co=
lor: #000;" class=3D"styled-by-prettify"> </span><span style=3D"color: #066=
;" class=3D"styled-by-prettify">0</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"> </span><span style=3D"color: #008;" class=3D"styled-by-prettify">siz=
eof</span><span style=3D"color: #660;" class=3D"styled-by-prettify">(</span=
><span style=3D"color: #008;" class=3D"styled-by-prettify">int</span><span =
style=3D"color: #660;" class=3D"styled-by-prettify">)</span><span style=3D"=
color: #000;" class=3D"styled-by-prettify"> </span><span style=3D"color: #6=
60;" class=3D"styled-by-prettify">*</span><span style=3D"color: #000;" clas=
s=3D"styled-by-prettify"> </span><span style=3D"color: #066;" class=3D"styl=
ed-by-prettify">8</span><span style=3D"color: #660;" class=3D"styled-by-pre=
ttify">;</span><span style=3D"color: #000;" class=3D"styled-by-prettify"> =
=C2=A0 =C2=A0 =C2=A0 </span><span style=3D"color: #660;" class=3D"styled-by=
-prettify">\</span><span style=3D"color: #000;" class=3D"styled-by-prettify=
"><br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0</span><span style=3D=
"color: #008;" class=3D"styled-by-prettify">bool</span><span style=3D"color=
: #000;" class=3D"styled-by-prettify"> run </span><span style=3D"color: #66=
0;" class=3D"styled-by-prettify">=3D</span><span style=3D"color: #000;" cla=
ss=3D"styled-by-prettify"> </span><span style=3D"color: #008;" class=3D"sty=
led-by-prettify">true</span><span style=3D"color: #660;" class=3D"styled-by=
-prettify">;</span><span style=3D"color: #000;" class=3D"styled-by-prettify=
"> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0</s=
pan><span style=3D"color: #660;" class=3D"styled-by-prettify">\</span><span=
style=3D"color: #000;" class=3D"styled-by-prettify"><br>=C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0</span><span style=3D"color: #008;" class=3D=
"styled-by-prettify">int</span><span style=3D"color: #000;" class=3D"styled=
-by-prettify"> j</span><span style=3D"color: #660;" class=3D"styled-by-pret=
tify">;</span><span style=3D"color: #000;" class=3D"styled-by-prettify"> =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0</span><span style=3D"color: #660;" class=3D=
"styled-by-prettify">\</span><span style=3D"color: #000;" class=3D"styled-b=
y-prettify"><br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0</span><span style=3D"col=
or: #660;" class=3D"styled-by-prettify">};</span><span style=3D"color: #000=
;" class=3D"styled-by-prettify"> run</span><span style=3D"color: #660;" cla=
ss=3D"styled-by-prettify">;</span><span style=3D"color: #000;" class=3D"sty=
led-by-prettify"> run </span><span style=3D"color: #660;" class=3D"styled-b=
y-prettify">=3D</span><span style=3D"color: #000;" class=3D"styled-by-prett=
ify"> </span><span style=3D"color: #008;" class=3D"styled-by-prettify">fals=
e</span><span style=3D"color: #660;" class=3D"styled-by-prettify">)</span><=
span style=3D"color: #000;" class=3D"styled-by-prettify"> =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0</span><span style=3D"c=
olor: #660;" class=3D"styled-by-prettify">\</span><span style=3D"color: #00=
0;" class=3D"styled-by-prettify"><br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 </span><sp=
an style=3D"color: #008;" class=3D"styled-by-prettify">for</span><span styl=
e=3D"color: #000;" class=3D"styled-by-prettify"> </span><span style=3D"colo=
r: #660;" class=3D"styled-by-prettify">((</span><span style=3D"color: #008;=
" class=3D"styled-by-prettify">true</span><span style=3D"color: #000;" clas=
s=3D"styled-by-prettify"> </span><span style=3D"color: #660;" class=3D"styl=
ed-by-prettify">?</span><span style=3D"color: #000;" class=3D"styled-by-pre=
ttify"> X</span><span style=3D"color: #660;" class=3D"styled-by-prettify">,=
</span><span style=3D"color: #000;" class=3D"styled-by-prettify"> j</span><=
span style=3D"color: #660;" class=3D"styled-by-prettify">)</span><span styl=
e=3D"color: #000;" class=3D"styled-by-prettify"> </span><span style=3D"colo=
r: #660;" class=3D"styled-by-prettify">=3D</span><span style=3D"color: #000=
;" 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"> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0</span=
><span style=3D"color: #660;" class=3D"styled-by-prettify">\</span><span st=
yle=3D"color: #000;" class=3D"styled-by-prettify"><br>=C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0</span><span style=3D"color: #660;" class=3D"sty=
led-by-prettify">(</span><span style=3D"color: #008;" class=3D"styled-by-pr=
ettify">true</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"> X</span><span s=
tyle=3D"color: #660;" class=3D"styled-by-prettify">)</span><span style=3D"c=
olor: #000;" class=3D"styled-by-prettify"> </span><span style=3D"color: #66=
0;" class=3D"styled-by-prettify"><</span><span style=3D"color: #000;" cl=
ass=3D"styled-by-prettify"> </span><span style=3D"color: #660;" class=3D"st=
yled-by-prettify">(</span><span style=3D"color: #008;" class=3D"styled-by-p=
rettify">false</span><span style=3D"color: #000;" class=3D"styled-by-pretti=
fy"> </span><span style=3D"color: #660;" class=3D"styled-by-prettify">?</sp=
an><span style=3D"color: #000;" class=3D"styled-by-prettify"> X</span><span=
style=3D"color: #660;" class=3D"styled-by-prettify">);</span><span style=
=3D"color: #000;" class=3D"styled-by-prettify"> =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 </span><span style=3D"color: #660;" class=3D"styled-by-prettify">\<=
/span><span style=3D"color: #000;" class=3D"styled-by-prettify"><br>=C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0</span><span style=3D"color: #008;=
" class=3D"styled-by-prettify">true</span><span style=3D"color: #000;" clas=
s=3D"styled-by-prettify"> </span><span style=3D"color: #660;" class=3D"styl=
ed-by-prettify">?</span><span style=3D"color: #000;" class=3D"styled-by-pre=
ttify"> </span><span style=3D"color: #660;" class=3D"styled-by-prettify">++=
</span><span style=3D"color: #000;" class=3D"styled-by-prettify">X</span><s=
pan style=3D"color: #660;" class=3D"styled-by-prettify">)</span><span style=
=3D"color: #000;" class=3D"styled-by-prettify"> =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 </span><span style=
=3D"color: #660;" class=3D"styled-by-prettify">\</span><span style=3D"color=
: #000;" class=3D"styled-by-prettify"><br><br></span><span style=3D"color: =
#800;" class=3D"styled-by-prettify">#define</span><span style=3D"color: #00=
0;" class=3D"styled-by-prettify"> times</span><span style=3D"color: #660;" =
class=3D"styled-by-prettify">(</span><span style=3D"color: #000;" class=3D"=
styled-by-prettify">X</span><span style=3D"color: #660;" class=3D"styled-by=
-prettify">)</span><span style=3D"color: #000;" class=3D"styled-by-prettify=
"> times_auto</span><span style=3D"color: #660;" class=3D"styled-by-prettif=
y">(</span><span style=3D"color: #000;" class=3D"styled-by-prettify">CAT</s=
pan><span style=3D"color: #660;" class=3D"styled-by-prettify">(</span><span=
style=3D"color: #000;" class=3D"styled-by-prettify">EAT_</span><span style=
=3D"color: #660;" class=3D"styled-by-prettify">,</span><span style=3D"color=
: #000;" class=3D"styled-by-prettify"> X</span><span style=3D"color: #660;"=
class=3D"styled-by-prettify">))</span><span style=3D"color: #000;" class=
=3D"styled-by-prettify"><br><br></span><span style=3D"color: #008;" class=
=3D"styled-by-prettify">extern</span><span style=3D"color: #000;" class=3D"=
styled-by-prettify"> </span><span style=3D"color: #008;" class=3D"styled-by=
-prettify">void</span><span style=3D"color: #000;" class=3D"styled-by-prett=
ify"> f</span><span style=3D"color: #660;" class=3D"styled-by-prettify">(</=
span><span style=3D"color: #008;" class=3D"styled-by-prettify">int</span><s=
pan style=3D"color: #660;" class=3D"styled-by-prettify">);</span><span styl=
e=3D"color: #000;" class=3D"styled-by-prettify"><br><br></span><span style=
=3D"color: #008;" class=3D"styled-by-prettify">void</span><span style=3D"co=
lor: #000;" class=3D"styled-by-prettify"> a</span><span style=3D"color: #66=
0;" class=3D"styled-by-prettify">()</span><span style=3D"color: #000;" clas=
s=3D"styled-by-prettify"><br></span><span style=3D"color: #660;" class=3D"s=
tyled-by-prettify">{</span><span style=3D"color: #000;" class=3D"styled-by-=
prettify"><br>=C2=A0 =C2=A0 </span><span style=3D"color: #008;" class=3D"st=
yled-by-prettify">const</span><span style=3D"color: #000;" class=3D"styled-=
by-prettify"> </span><span style=3D"color: #008;" class=3D"styled-by-pretti=
fy">int</span><span style=3D"color: #000;" class=3D"styled-by-prettify"> n =
</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 sty=
le=3D"color: #066;" class=3D"styled-by-prettify">3</span><span style=3D"col=
or: #660;" class=3D"styled-by-prettify">;</span><span style=3D"color: #000;=
" class=3D"styled-by-prettify"><br>=C2=A0 =C2=A0 times</span><span style=3D=
"color: #660;" class=3D"styled-by-prettify">(</span><span style=3D"color: #=
008;" class=3D"styled-by-prettify">auto</span><span style=3D"color: #000;" =
class=3D"styled-by-prettify"> i </span><span style=3D"color: #660;" class=
=3D"styled-by-prettify">:</span><span style=3D"color: #000;" class=3D"style=
d-by-prettify"> n</span><span style=3D"color: #660;" class=3D"styled-by-pre=
ttify">)</span><span style=3D"color: #000;" class=3D"styled-by-prettify"> <=
/span><span style=3D"color: #660;" class=3D"styled-by-prettify">{</span><sp=
an style=3D"color: #000;" class=3D"styled-by-prettify"><br>=C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 f</span><span style=3D"color: #660;" class=3D"styled-b=
y-prettify">(</span><span style=3D"color: #000;" class=3D"styled-by-prettif=
y">i</span><span style=3D"color: #660;" class=3D"styled-by-prettify">);</sp=
an><span style=3D"color: #000;" class=3D"styled-by-prettify"><br>=C2=A0 =C2=
=A0 </span><span style=3D"color: #660;" class=3D"styled-by-prettify">}</spa=
n><span style=3D"color: #000;" class=3D"styled-by-prettify"><br></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></div></code></di=
v></div>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;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"mailto:std-proposals+unsubscribe@isocpp.org">std-proposa=
ls+unsubscribe@isocpp.org</a>.<br />
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org">std-proposals@isocpp.org</a>.<br />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/5d7081d2-de04-470e-b53e-4e386507388d%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/5d7081d2-de04-470e-b53e-4e386507388d=
%40isocpp.org</a>.<br />
------=_Part_101_1930805618.1475931439413--
------=_Part_100_1500466569.1475931439412--
.
Author: Greg Marr <gregmmarr@gmail.com>
Date: Sat, 8 Oct 2016 16:34:18 -0700 (PDT)
Raw View
------=_Part_178_1743623540.1475969658140
Content-Type: multipart/alternative;
boundary="----=_Part_179_754908649.1475969658140"
------=_Part_179_754908649.1475969658140
Content-Type: text/plain; charset=UTF-8
On Friday, October 7, 2016 at 3:08:10 PM UTC-4, Barry Revzin wrote:
>
>
>> No it's not. There is no special case in the standard that allows this.
>> There is nothing that says (for example) "for(;;) is allowed and results in
>> an infinite loop". It's just a result of applying the rule that each of
>> the three parts of the for loop can be left blank. It's the same rule that
>> allows "for( ; i < N; ++i)" or "for(int i = 0; i < N; )".
>>
>>
> Yes there is. [stmt.for] has explicit wording for empty condition:
>
> Either or both of the condition and the expression can be omitted. A
>> missing condition makes the implied
>
> while clause equivalent to while(true)
>
>
That's my point exactly. There is no special case for "for (;;)", as Leo
proposed. It's the very general rule that allows either the condition on
expression to be omitted, as Michal pointed out.
It's a huge leap to say that "since for(;;) is a special case that loops
forever, it makes sense to make for(500) loop 500 times".
--
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.
To view this discussion on the web visit https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/7d2e7fb9-b4d2-43c1-b246-de2fa32a8247%40isocpp.org.
------=_Part_179_754908649.1475969658140
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr">On Friday, October 7, 2016 at 3:08:10 PM UTC-4, Barry Revz=
in 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"ltr"><blo=
ckquote class=3D"gmail_quote" style=3D"margin:0;margin-left:0.8ex;border-le=
ft:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr"><div><br></div><div>No=
it's not. =C2=A0There is no special case in the standard that allows t=
his. There is nothing that says (for example) "for(;;) is allowed and =
results in an infinite loop". =C2=A0It's just a result of applying=
the rule that each of the three parts of the for loop can be left blank. =
=C2=A0It's the same rule that allows "for( ; i < N; ++i)" =
or "for(int i =3D 0; i < N; )".</div><div><br></div></div></bl=
ockquote><div><br></div><div>Yes there is. [stmt.for] has explicit wording =
for empty condition:</div><div><br></div><blockquote class=3D"gmail_quote" =
style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);pa=
dding-left:1ex">Either or both of the condition and the expression can be o=
mitted. A missing condition makes the implied</blockquote><blockquote class=
=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rg=
b(204,204,204);padding-left:1ex"><font face=3D"courier new, monospace">whil=
e </font>clause equivalent to <font face=3D"courier new, monospace">while(t=
rue)</font></blockquote></div></blockquote><div><br></div><div>That's m=
y point exactly. =C2=A0There is no special case for "for (;;)", a=
s Leo proposed. =C2=A0It's the very general rule that allows either the=
condition on expression to be omitted, as Michal pointed out.</div><div><b=
r></div><div>It's a huge leap to say that "since for(;;) is a spec=
ial case that loops forever, it makes sense to make for(500) loop 500 times=
".</div><div><br></div></div>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;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"mailto:std-proposals+unsubscribe@isocpp.org">std-proposa=
ls+unsubscribe@isocpp.org</a>.<br />
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org">std-proposals@isocpp.org</a>.<br />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/7d2e7fb9-b4d2-43c1-b246-de2fa32a8247%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/7d2e7fb9-b4d2-43c1-b246-de2fa32a8247=
%40isocpp.org</a>.<br />
------=_Part_179_754908649.1475969658140--
------=_Part_178_1743623540.1475969658140--
.
Author: Thiago Macieira <thiago@macieira.org>
Date: Sun, 09 Oct 2016 10:14:41 +0200
Raw View
Em sexta-feira, 7 de outubro de 2016, =C3=A0s 06:38:28 CEST, Leo Heinsaar e=
screveu:
> > > Quickly glanced through the thread, didn't notice a frequent special
> >=20
> > case -
> >=20
> > > would something like the following be too fancy?
> > >=20
> > > for (500)
> > >=20
> > > doSomething(); // 500 times, index irrelevant
> >=20
> > I don't think that's frequent enough. In 15 years of doing C++, I can't
> > remember the last time I've needed something like this.
>=20
> Come on, it surely is. Say, in some test code which calls a function 500
> times and then measures the average.
Right, I can't remember the last time. I usually just use QBENCHMARK macro,=
=20
which does its looping, measures time (or another type of events), and then=
=20
produces a report.
--=20
Thiago Macieira - thiago (AT) macieira.info - thiago (AT) kde.org
Software Architect - Intel Open Source Technology Center
--=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/1587972.XH7G7WIx0D%40tjmaciei-mobl1.
.
Author: Leo Heinsaar <leoheinsaar@gmail.com>
Date: Sun, 9 Oct 2016 01:45:37 -0700 (PDT)
Raw View
------=_Part_2622_334134147.1476002737417
Content-Type: multipart/alternative;
boundary="----=_Part_2623_501913035.1476002737417"
------=_Part_2623_501913035.1476002737417
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
>
> It's a huge leap to say that "since for(;;) is a special case that loops=
=20
> forever, it makes sense to make for(500) loop 500 times".
>
That's one small step for the Standard, one giant leap for mankind :-)
But if seriously, I guess I just don't see it as such. It may be too fancy,=
=20
or not worth the effort, but in terms of general/special cases, both=20
mathematically and =E2=80=94 as it turns out =E2=80=94 syntactically by the=
Standard, it=20
looks like the most natural extension of meaning to me.
Simple loops that do something 500 times are perhaps the single most=20
"magic" thing that made and will continues to make many fall in love with=
=20
programming. You show for (500) cout << "Name"; to a classroom of 20, and=
=20
at least 5 of them will become programmers. (Try to do that with=20
QBENCHMARK.) Surely they (simple loops) deserve to be as simple as possible=
=20
in our favorite language =E2=80=94 for educational purposes if not for any =
other=20
reason. But that's just MHO.
--=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/83b754cd-b737-478c-ad2d-4a50630fce5a%40isocpp.or=
g.
------=_Part_2623_501913035.1476002737417
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><blockquote class=3D"gmail_quote" style=3D"margin: 0;margi=
n-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"l=
tr"><div>It's a huge leap to say that "since for(;;) is a special =
case that loops forever, it makes sense to make for(500) loop 500 times&quo=
t;.<br></div></div></blockquote><div><br></div><div>That's one small st=
ep for the Standard, one giant leap for mankind :-)<br></div><div><br></div=
><div>But if seriously, I guess I just don't see it as such. It may be =
too fancy, or not worth the effort, but in terms of general/special cases, =
both mathematically and =E2=80=94 as it turns out =E2=80=94 syntactically b=
y the Standard, it looks like the most natural extension of meaning to me.<=
/div><div><br></div><div>Simple loops that do something 500 times are perha=
ps the single most "magic" thing that made and will continues to =
make many fall in love with programming. You show for (500) cout << &=
quot;Name"; to a classroom of 20, and at least 5 of them will become p=
rogrammers. (Try to do that with QBENCHMARK.) Surely they (simple loops) de=
serve to be as simple as possible in our favorite language=C2=A0=E2=80=94 f=
or educational purposes if not for any other reason. But that's just MH=
O.</div></div>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;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"mailto:std-proposals+unsubscribe@isocpp.org">std-proposa=
ls+unsubscribe@isocpp.org</a>.<br />
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org">std-proposals@isocpp.org</a>.<br />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/83b754cd-b737-478c-ad2d-4a50630fce5a%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/83b754cd-b737-478c-ad2d-4a50630fce5a=
%40isocpp.org</a>.<br />
------=_Part_2623_501913035.1476002737417--
------=_Part_2622_334134147.1476002737417--
.
Author: Leo Heinsaar <leoheinsaar@gmail.com>
Date: Sun, 9 Oct 2016 01:52:33 -0700 (PDT)
Raw View
------=_Part_236_220614175.1476003153138
Content-Type: multipart/alternative;
boundary="----=_Part_237_1557711660.1476003153138"
------=_Part_237_1557711660.1476003153138
Content-Type: text/plain; charset=UTF-8
>
> > Come on, it surely is. Say, in some test code which calls a function 500
> > times and then measures the average.
>
> Right, I can't remember the last time. I usually just use QBENCHMARK
> macro,
> which does its looping, measures time (or another type of events), and
> then
> produces a report.
>
Well, not everybody uses Qt (great tool by the way), and benchmarking was
just an example anyway.
--
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.
To view this discussion on the web visit https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/177681ec-99ab-4719-a7e9-70d23ed0dc63%40isocpp.org.
------=_Part_237_1557711660.1476003153138
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><blockquote class=3D"gmail_quote" style=3D"margin: 0;margi=
n-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;">> Come on,=
it surely is. Say, in some test code which calls a function 500
<br>> times and then measures the average.
<br>
<br>Right, I can't remember the last time. I usually just use QBENCHMAR=
K macro,=20
<br>which does its looping, measures time (or another type of events), and =
then=20
<br>produces a report.<br></blockquote><div><br></div><div>Well, not everyb=
ody uses Qt (great tool by the way), and benchmarking was just an example a=
nyway.</div></div>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;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"mailto:std-proposals+unsubscribe@isocpp.org">std-proposa=
ls+unsubscribe@isocpp.org</a>.<br />
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org">std-proposals@isocpp.org</a>.<br />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/177681ec-99ab-4719-a7e9-70d23ed0dc63%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/177681ec-99ab-4719-a7e9-70d23ed0dc63=
%40isocpp.org</a>.<br />
------=_Part_237_1557711660.1476003153138--
------=_Part_236_220614175.1476003153138--
.
Author: Thiago Macieira <thiago@macieira.org>
Date: Sun, 09 Oct 2016 11:53:30 +0200
Raw View
Em domingo, 9 de outubro de 2016, =C3=A0s 01:45:37 CEST, Leo Heinsaar escre=
veu:
> You show for (500) cout << "Name"; to a classroom of 20, and
> at least 5 of them will become programmers. (Try to do that with
> QBENCHMARK.)
QBENCHMARK
expensiveFunction();
Produces:
RESULT : tst_BenchlibTickCounter::threeBillionTicks():
1,358 msecs per iteration (total: 1,358, iterations: 1)
And with a few changes in the command-line, without changing the program, i=
t=20
can produce:
138,399,579 instruction reads per iteration (total: 138,399,579, iterations=
:=20
1)
3,000,005,772 CPU ticks per iteration (total: 3,000,005,772, iterations: 1)
4,321,883,842 CPU cycles per iteration (total: 4,321,883,842, iterations: 1=
)
7,455,968,077 instructions per iteration (total: 7,455,968,077, iterations:=
1)
2,492,100,514 cache loads per iteration (total: 2,492,100,514, iterations: =
1)
etc.
--=20
Thiago Macieira - thiago (AT) macieira.info - thiago (AT) kde.org
Software Architect - Intel Open Source Technology Center
--=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/54669498.CW394sXDT8%40tjmaciei-mobl1.
.
Author: Thiago Macieira <thiago@macieira.org>
Date: Sun, 09 Oct 2016 11:54:16 +0200
Raw View
Em domingo, 9 de outubro de 2016, =C3=A0s 01:52:33 CEST, Leo Heinsaar escre=
veu:
> > > Come on, it surely is. Say, in some test code which calls a function =
500
> > > times and then measures the average.
> >=20
> > Right, I can't remember the last time. I usually just use QBENCHMARK
> > macro,
> > which does its looping, measures time (or another type of events), and
> > then
> > produces a report.
>=20
> Well, not everybody uses Qt (great tool by the way), and benchmarking was
> just an example anyway.
Then give me another. How often do you need to iterate a given number of ti=
mes=20
and not use the induction variable?
--=20
Thiago Macieira - thiago (AT) macieira.info - thiago (AT) kde.org
Software Architect - Intel Open Source Technology Center
--=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/5530695.rN5UutzDva%40tjmaciei-mobl1.
.
Author: Leo Heinsaar <leoheinsaar@gmail.com>
Date: Sun, 9 Oct 2016 06:00:41 -0700 (PDT)
Raw View
------=_Part_293_1424488370.1476018041637
Content-Type: multipart/alternative;
boundary="----=_Part_294_1817207759.1476018041637"
------=_Part_294_1817207759.1476018041637
Content-Type: text/plain; charset=UTF-8
>
> > You show for (500) cout << "Name"; to a classroom of 20, and
> > at least 5 of them will become programmers. (Try to do that with
> > QBENCHMARK.)
>
> QBENCHMARK
> expensiveFunction(); ...
I meant the educational, not the technical aspect of it.
--
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.
To view this discussion on the web visit https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/4335872b-8dc0-4aef-818c-42bc00ccec93%40isocpp.org.
------=_Part_294_1817207759.1476018041637
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><blockquote class=3D"gmail_quote" style=3D"margin: 0;margi=
n-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;">> You show=
for (500) cout << "Name"; to a classroom of 20, and
<br>> at least 5 of them will become programmers. (Try to do that with
<br>> QBENCHMARK.)
<br>
<br>QBENCHMARK
<br>=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0expensiveFunction(); =
=C2=A0...=C2=A0</blockquote><div><br></div><div>I meant the educational, no=
t the technical aspect of it.</div></div>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;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"mailto:std-proposals+unsubscribe@isocpp.org">std-proposa=
ls+unsubscribe@isocpp.org</a>.<br />
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org">std-proposals@isocpp.org</a>.<br />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/4335872b-8dc0-4aef-818c-42bc00ccec93%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/4335872b-8dc0-4aef-818c-42bc00ccec93=
%40isocpp.org</a>.<br />
------=_Part_294_1817207759.1476018041637--
------=_Part_293_1424488370.1476018041637--
.
Author: "D. B." <db0451@gmail.com>
Date: Sun, 9 Oct 2016 14:08:13 +0100
Raw View
--047d7bd91ac000a22b053e6e5697
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
On Sun, Oct 9, 2016 at 9:45 AM, Leo Heinsaar <leoheinsaar@gmail.com> wrote:
> It's a huge leap to say that "since for(;;) is a special case that loops
>> forever, it makes sense to make for(500) loop 500 times".
>>
>
> [...]
>
> Simple loops that do something 500 times are perhaps the single most
> "magic" thing that made and will continues to make many fall in love with
> programming. You show for (500) cout << "Name"; to a classroom of 20, and
> at least 5 of them will become programmers. (Try to do that with
> QBENCHMARK.) Surely they (simple loops) deserve to be as simple as possib=
le
> in our favorite language =E2=80=94 for educational purposes if not for an=
y other
> reason. But that's just MHO.
>
Really? I would think/hope most people would get bored of a simple loop
within a few minutes and ask how they could do something that was actually
useful.
Given that, and the existence of more important barriers to super-fast
learning of this language, I don't see education utility as a convincing
rationale.
Besides, these hypothetical learners might quickly ask 'How can I print the
elapsed count in my loop? or How can I change the numbers I'm looping
between? or How can I jump by more than 1 each time?' .... and that's when
they'll see that the existing for loop is just fine.
--=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/CACGiwhGHChRH6j%3Dkz7zjW2zZ8j7d8eQPsd9y9mFstWcy%=
3DUZazg%40mail.gmail.com.
--047d7bd91ac000a22b053e6e5697
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><div class=3D"gmail_extra"><div class=3D"gmail_quote">On S=
un, Oct 9, 2016 at 9:45 AM, Leo Heinsaar <span dir=3D"ltr"><<a href=3D"m=
ailto:leoheinsaar@gmail.com" target=3D"_blank">leoheinsaar@gmail.com</a>>=
;</span> wrote:<br><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 =
..8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr"><span cl=
ass=3D""><blockquote class=3D"gmail_quote" style=3D"margin:0;margin-left:0.=
8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr"><div>It&#=
39;s a huge leap to say that "since for(;;) is a special case that loo=
ps forever, it makes sense to make for(500) loop 500 times".<br></div>=
</div></blockquote><div><br></div></span>[...]<div><br></div><div>Simple lo=
ops that do something 500 times are perhaps the single most "magic&quo=
t; thing that made and will continues to make many fall in love with progra=
mming. You show for (500) cout << "Name"; to a classroom of=
20, and at least 5 of them will become programmers. (Try to do that with Q=
BENCHMARK.) Surely they (simple loops) deserve to be as simple as possible =
in our favorite language=C2=A0=E2=80=94 for educational purposes if not for=
any other reason. But that's just MHO.<br></div></div></blockquote><di=
v><br><br></div><div>Really? I would think/hope most people would get bored=
of a simple loop within a few minutes and ask how they could do something =
that was actually useful.<br><br></div><div>Given that, and the existence o=
f more important barriers to super-fast learning of this language, I don=
9;t see education utility as a convincing rationale.<br><br></div><div>Besi=
des, these hypothetical learners might quickly ask 'How can I print the=
elapsed count in my loop? or How can I change the numbers I'm looping =
between? or How can I jump by more than 1 each time?' .... and that'=
;s when they'll see that the existing for loop is just fine.<br><br></d=
iv></div></div></div>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;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"mailto:std-proposals+unsubscribe@isocpp.org">std-proposa=
ls+unsubscribe@isocpp.org</a>.<br />
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org">std-proposals@isocpp.org</a>.<br />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CACGiwhGHChRH6j%3Dkz7zjW2zZ8j7d8eQPsd=
9y9mFstWcy%3DUZazg%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfooter"=
>https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CACGiwhGHChRH=
6j%3Dkz7zjW2zZ8j7d8eQPsd9y9mFstWcy%3DUZazg%40mail.gmail.com</a>.<br />
--047d7bd91ac000a22b053e6e5697--
.
Author: Thiago Macieira <thiago@macieira.org>
Date: Mon, 10 Oct 2016 04:02:31 +0200
Raw View
Em domingo, 9 de outubro de 2016, =C3=A0s 06:00:41 CEST, Leo Heinsaar escre=
veu:
> > > You show for (500) cout << "Name"; to a classroom of 20, and
> > > at least 5 of them will become programmers. (Try to do that with
> > > QBENCHMARK.)
> >=20
> > QBENCHMARK
> >=20
> > expensiveFunction(); ...
>=20
> I meant the educational, not the technical aspect of it.
And we all know that code that you learn and write as a student in early=20
stages of programming is nowhere good. Why should we add more complexity to=
=20
the language for something that is hardly ever used once you're past that=
=20
stage?
--=20
Thiago Macieira - thiago (AT) macieira.info - thiago (AT) kde.org
Software Architect - Intel Open Source Technology Center
--=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/1818128.E3SLxdONPZ%40tjmaciei-mobl1.
.
Author: Lorand Szollosi <szollosi.lorand@gmail.com>
Date: Mon, 10 Oct 2016 20:56:44 +0200
Raw View
Hi,
Constexpr times(N) migh force loop unrolling. But actually, what I'd really=
find useful is times(init-expr; times; post-expr). That'd give us this for=
(N), declare(int i) {}, scoped destruction of union members and stackless c=
oroutine variables / member statics that are only needed up to a point, stu=
ffing multiple statements into one (via switch), function reentry (via cont=
inue), and about a dozen more features that I can't currently think of.
Thanks,
-lorro
2016. okt. 10. d=C3=A1tummal, 4:02 id=C5=91pontban Thiago Macieira <thiago@=
macieira.org> =C3=ADrta:
> Em domingo, 9 de outubro de 2016, =C3=A0s 06:00:41 CEST, Leo Heinsaar esc=
reveu:
>>>> You show for (500) cout << "Name"; to a classroom of 20, and
>>>> at least 5 of them will become programmers. (Try to do that with
>>>> QBENCHMARK.)
>>>=20
>>> QBENCHMARK
>>>=20
>>> expensiveFunction(); ...
>>=20
>> I meant the educational, not the technical aspect of it.
>=20
> And we all know that code that you learn and write as a student in early=
=20
> stages of programming is nowhere good. Why should we add more complexity =
to=20
> the language for something that is hardly ever used once you're past that=
=20
> stage?
>=20
> --=20
> Thiago Macieira - thiago (AT) macieira.info - thiago (AT) kde.org
> Software Architect - Intel Open Source Technology Center
>=20
> --=20
> You received this message because you are subscribed to a topic in the Go=
ogle Groups "ISO C++ Standard - Future Proposals" group.
> To unsubscribe from this topic, visit https://groups.google.com/a/isocpp.=
org/d/topic/std-proposals/f39RoLhdm1E/unsubscribe.
> To unsubscribe from this group and all its topics, send an email to std-p=
roposals+unsubscribe@isocpp.org.
> To post to this group, send email to std-proposals@isocpp.org.
> To view this discussion on the web visit https://groups.google.com/a/isoc=
pp.org/d/msgid/std-proposals/1818128.E3SLxdONPZ%40tjmaciei-mobl1.
--=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/2BC44C72-B869-4603-8DA5-C7A299552A98%40gmail.com=
..
.
Author: szollosi.lorand@gmail.com
Date: Mon, 10 Oct 2016 12:18:19 -0700 (PDT)
Raw View
------=_Part_2612_2079965733.1476127099690
Content-Type: multipart/alternative;
boundary="----=_Part_2613_28736678.1476127099690"
------=_Part_2613_28736678.1476127099690
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
Hi,
s/member statics/function statics/
Regards,
-lorro
2016. okt=C3=B3ber 10., h=C3=A9tf=C5=91 20:56:48 UTC+2 id=C5=91pontban Lora=
nd Szollosi a=20
k=C3=B6vetkez=C5=91t =C3=ADrta:
>
> Hi,=20
>
> Constexpr times(N) migh force loop unrolling. But actually, what I'd=20
> really find useful is times(init-expr; times; post-expr). That'd give us=
=20
> this for(N), declare(int i) {}, scoped destruction of union members and=
=20
> stackless coroutine variables / member statics that are only needed up to=
=20
> a point, stuffing multiple statements into one (via switch), function=20
> reentry (via continue), and about a dozen more features that I can't=20
> currently think of.=20
>
> Thanks,=20
> -lorro=20
>
> 2016. okt. 10. d=C3=A1tummal, 4:02 id=C5=91pontban Thiago Macieira <
> thiago@macieira.org> =C3=ADrta:=20
>
> > Em domingo, 9 de outubro de 2016, =C3=A0s 06:00:41 CEST, Leo Heinsaar=
=20
> escreveu:=20
> >>>> You show for (500) cout << "Name"; to a classroom of 20, and=20
> >>>> at least 5 of them will become programmers. (Try to do that with=20
> >>>> QBENCHMARK.)=20
> >>>=20
> >>> QBENCHMARK=20
> >>>=20
> >>> expensiveFunction(); ...=20
> >>=20
> >> I meant the educational, not the technical aspect of it.=20
> >=20
> > And we all know that code that you learn and write as a student in earl=
y=20
> > stages of programming is nowhere good. Why should we add more complexit=
y=20
> to=20
> > the language for something that is hardly ever used once you're past=20
> that=20
> > stage?=20
> >=20
> > --=20
> > Thiago Macieira - thiago (AT) macieira.info - thiago (AT) kde.org=20
> > Software Architect - Intel Open Source Technology Center=20
> >=20
> > --=20
> > You received this message because you are subscribed to a topic in the=
=20
> Google Groups "ISO C++ Standard - Future Proposals" group.=20
> > To unsubscribe from this topic, visit=20
> https://groups.google.com/a/isocpp.org/d/topic/std-proposals/f39RoLhdm1E/=
unsubscribe.=20
>
> > To unsubscribe from this group and all its topics, send an email to=20
> std-proposals+unsubscribe@isocpp.org.=20
> > To post to this group, send email to std-proposals@isocpp.org.=20
> > To view this discussion on the web visit=20
> https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/1818128.E3SL=
xdONPZ%40tjmaciei-mobl1.=20
>
>
--=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/0ca51fb5-2858-41a1-9619-33cfe93f7b82%40isocpp.or=
g.
------=_Part_2613_28736678.1476127099690
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr">Hi,<br><br>s/member statics/function statics/<br><br>Regar=
ds,<br>-lorro<br><br>2016. okt=C3=B3ber 10., h=C3=A9tf=C5=91 20:56:48 UTC+2=
id=C5=91pontban Lorand Szollosi a k=C3=B6vetkez=C5=91t =C3=ADrta:<blockquo=
te class=3D"gmail_quote" style=3D"margin: 0;margin-left: 0.8ex;border-left:=
1px #ccc solid;padding-left: 1ex;">Hi,
<br>
<br>Constexpr times(N) migh force loop unrolling. But actually, what I'=
d really find useful is times(init-expr; times; post-expr). That'd give=
us this for(N), declare(int i) {}, scoped destruction of union members and=
stackless coroutine variables / <span style=3D"color: rgb(255, 0, 0);">mem=
ber</span> <span style=3D"color: rgb(255, 0, 0);">statics</span> that are o=
nly needed up to a point, stuffing multiple statements into one (via switch=
), function reentry (via continue), and about a dozen more features that I =
can't currently think of.
<br>
<br>Thanks,
<br>-lorro
<br>
<br>2016. okt. 10. d=C3=A1tummal, 4:02 id=C5=91pontban Thiago Macieira <=
<a href=3D"mailto:thiago@macieira.org" target=3D"_blank" rel=3D"nofollow" o=
nmousedown=3D"this.href=3D'mailto:thiago@macieira.org';return true;=
" onclick=3D"this.href=3D'mailto:thiago@macieira.org';return true;"=
>thiago@macieira.org</a>> =C3=ADrta:
<br>
<br>> Em domingo, 9 de outubro de 2016, =C3=A0s 06:00:41 CEST, Leo Heins=
aar escreveu:
<br>>>>> You show for (500) cout << "Name"; to =
a classroom of 20, and
<br>>>>> at least 5 of them will become programmers. (Try to do=
that with
<br>>>>> QBENCHMARK.)
<br>>>>=20
<br>>>> QBENCHMARK
<br>>>>=20
<br>>>> =C2=A0 =C2=A0 =C2=A0 =C2=A0expensiveFunction(); =C2=A0...
<br>>>=20
<br>>> I meant the educational, not the technical aspect of it.
<br>>=20
<br>> And we all know that code that you learn and write as a student in=
early=20
<br>> stages of programming is nowhere good. Why should we add more comp=
lexity to=20
<br>> the language for something that is hardly ever used once you'r=
e past that=20
<br>> stage?
<br>>=20
<br>> --=20
<br>> Thiago Macieira - thiago (AT) <a href=3D"http://macieira.info" tar=
get=3D"_blank" rel=3D"nofollow" onmousedown=3D"this.href=3D'http://www.=
google.com/url?q\x3dhttp%3A%2F%2Fmacieira.info\x26sa\x3dD\x26sntz\x3d1\x26u=
sg\x3dAFQjCNEswDUBNCNanbu7euhqLn_62FW8ag';return true;" onclick=3D"this=
..href=3D'http://www.google.com/url?q\x3dhttp%3A%2F%2Fmacieira.info\x26s=
a\x3dD\x26sntz\x3d1\x26usg\x3dAFQjCNEswDUBNCNanbu7euhqLn_62FW8ag';retur=
n true;">macieira.info</a> - thiago (AT) <a href=3D"http://kde.org" target=
=3D"_blank" rel=3D"nofollow" onmousedown=3D"this.href=3D'http://www.goo=
gle.com/url?q\x3dhttp%3A%2F%2Fkde.org\x26sa\x3dD\x26sntz\x3d1\x26usg\x3dAFQ=
jCNHGRJdo5_JYG1DowztwAHAKs80XSA';return true;" onclick=3D"this.href=3D&=
#39;http://www.google.com/url?q\x3dhttp%3A%2F%2Fkde.org\x26sa\x3dD\x26sntz\=
x3d1\x26usg\x3dAFQjCNHGRJdo5_JYG1DowztwAHAKs80XSA';return true;">kde.or=
g</a>
<br>> =C2=A0 Software Architect - Intel Open Source Technology Center
<br>>=20
<br>> --=20
<br>> You received this message because you are subscribed to a topic in=
the Google Groups "ISO C++ Standard - Future Proposals" group.
<br>> To unsubscribe from this topic, visit <a href=3D"https://groups.go=
ogle.com/a/isocpp.org/d/topic/std-proposals/f39RoLhdm1E/unsubscribe" target=
=3D"_blank" rel=3D"nofollow" onmousedown=3D"this.href=3D'https://groups=
..google.com/a/isocpp.org/d/topic/std-proposals/f39RoLhdm1E/unsubscribe'=
;return true;" onclick=3D"this.href=3D'https://groups.google.com/a/isoc=
pp.org/d/topic/std-proposals/f39RoLhdm1E/unsubscribe';return true;">htt=
ps://groups.google.com/a/<wbr>isocpp.org/d/topic/std-<wbr>proposals/f39RoLh=
dm1E/<wbr>unsubscribe</a>.
<br>> To unsubscribe from this group and all its topics, send an email t=
o <a href=3D"mailto:std-proposals%2Bunsubscribe@isocpp.org" target=3D"_blan=
k" rel=3D"nofollow" onmousedown=3D"this.href=3D'mailto:std-proposals%2B=
unsubscribe@isocpp.org';return true;" onclick=3D"this.href=3D'mailt=
o:std-proposals%2Bunsubscribe@isocpp.org';return true;">std-proposals+u=
nsubscribe@<wbr>isocpp.org</a>.
<br>> To post to this group, send email to <a href=3D"mailto:std-proposa=
ls@isocpp.org" target=3D"_blank" rel=3D"nofollow" onmousedown=3D"this.href=
=3D'mailto:std-proposals@isocpp.org';return true;" onclick=3D"this.=
href=3D'mailto:std-proposals@isocpp.org';return true;">std-proposal=
s@isocpp.org</a>.
<br>> To view this discussion on the web visit <a href=3D"https://groups=
..google.com/a/isocpp.org/d/msgid/std-proposals/1818128.E3SLxdONPZ%40tjmacie=
i-mobl1" target=3D"_blank" rel=3D"nofollow" onmousedown=3D"this.href=3D'=
;https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/1818128.E3SLx=
dONPZ%40tjmaciei-mobl1';return true;" onclick=3D"this.href=3D'https=
://groups.google.com/a/isocpp.org/d/msgid/std-proposals/1818128.E3SLxdONPZ%=
40tjmaciei-mobl1';return true;">https://groups.google.com/a/<wbr>isocpp=
..org/d/msgid/std-<wbr>proposals/1818128.E3SLxdONPZ%<wbr>40tjmaciei-mobl1</a=
>.
<br></blockquote></div>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;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"mailto:std-proposals+unsubscribe@isocpp.org">std-proposa=
ls+unsubscribe@isocpp.org</a>.<br />
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org">std-proposals@isocpp.org</a>.<br />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/0ca51fb5-2858-41a1-9619-33cfe93f7b82%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/0ca51fb5-2858-41a1-9619-33cfe93f7b82=
%40isocpp.org</a>.<br />
------=_Part_2613_28736678.1476127099690--
------=_Part_2612_2079965733.1476127099690--
.
Author: "Francis (Grizzly) Smit" <grizzlysmit@gmail.com>
Date: Tue, 11 Oct 2016 07:05:35 +1100
Raw View
why not use a sequence class like this
for(auto i : seq<int>(500) ) smt;
where seq is defined such that it's a standard container like thing with=20
begin and end defined to iterate over the range
http://en.cppreference.com/w/cpp/language/range-for
i.e.
template<typename T>
class seq {
private:
T _start =3D 0;
T _step =3D 1;
T _end;
public:
seq(T _e) : _end(_e) {};
seq(T _s, T _e) : _start(_s), _end(_e) {};
seq(T _s, T _e, T _stp) : _start(_s), _end(_e), _step(_stp) {};
seqiterator<T> begin();
seqiterator<T> end();
}
where seqiterator is an interator that ranges over the values from=20
_start to _end going step at a time
you might also want to look at Eric Nieblers range stuff I think he=20
might have built this already
https://github.com/ericniebler/range-v3 and=20
https://ericniebler.github.io/range-v3/
On 11/10/16 05:56, Lorand Szollosi wrote:
> Hi,
>
> Constexpr times(N) migh force loop unrolling. But actually, what I'd real=
ly find useful is times(init-expr; times; post-expr). That'd give us this f=
or(N), declare(int i) {}, scoped destruction of union members and stackless=
coroutine variables / member statics that are only needed up to a point, s=
tuffing multiple statements into one (via switch), function reentry (via co=
ntinue), and about a dozen more features that I can't currently think of.
>
> Thanks,
> -lorro
>
> 2016. okt. 10. d=C3=A1tummal, 4:02 id=C5=91pontban Thiago Macieira <thiag=
o@macieira.org> =C3=ADrta:
>
>> Em domingo, 9 de outubro de 2016, =C3=A0s 06:00:41 CEST, Leo Heinsaar es=
creveu:
>>>>> You show for (500) cout << "Name"; to a classroom of 20, and
>>>>> at least 5 of them will become programmers. (Try to do that with
>>>>> QBENCHMARK.)
>>>> QBENCHMARK
>>>>
>>>> expensiveFunction(); ...
>>> I meant the educational, not the technical aspect of it.
>> And we all know that code that you learn and write as a student in early
>> stages of programming is nowhere good. Why should we add more complexity=
to
>> the language for something that is hardly ever used once you're past tha=
t
>> stage?
>>
>> --=20
>> Thiago Macieira - thiago (AT) macieira.info - thiago (AT) kde.org
>> Software Architect - Intel Open Source Technology Center
>>
>> --=20
>> You received this message because you are subscribed to a topic in the G=
oogle Groups "ISO C++ Standard - Future Proposals" group.
>> To unsubscribe from this topic, visit https://groups.google.com/a/isocpp=
..org/d/topic/std-proposals/f39RoLhdm1E/unsubscribe.
>> To unsubscribe from this group and all its topics, send an email to std-=
proposals+unsubscribe@isocpp.org.
>> To post to this group, send email to std-proposals@isocpp.org.
>> To view this discussion on the web visit https://groups.google.com/a/iso=
cpp.org/d/msgid/std-proposals/1818128.E3SLxdONPZ%40tjmaciei-mobl1.
--=20
.~. In my life God comes first....
/V\ but Linux is pretty high after that :-D
/( )\ Francis (Grizzly) Smit
^^-^^ http://www.smit.id.au/
-----BEGIN GEEK CODE BLOCK-----
Version: 3.1
GM/CS/H/P/S/IT/L d- s+:+ a++ C++++ UL++++$ P+++ L+++$ E--- W+++
N w--- M-- V-- PE- PGP t+ 5-- X-- R- tv b++++ DI(+) D-
G e++ h+ y? r% z---
------END GEEK CODE BLOCK------
http://www.geekcode.com/
--=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/bbbd3dd1-7532-052f-a2aa-87b3a9b26be3%40gmail.com=
..
.
Author: szollosi.lorand@gmail.com
Date: Tue, 11 Oct 2016 00:33:51 -0700 (PDT)
Raw View
------=_Part_930_131096301.1476171231867
Content-Type: multipart/alternative;
boundary="----=_Part_931_2011944612.1476171231868"
------=_Part_931_2011944612.1476171231868
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
Hi,
Note that this was proposed to OP who didn't like it.
(Also, it doesn't give you all the benefits I've listed above.)
Thanks,
-lorro
2016. okt=C3=B3ber 10., h=C3=A9tf=C5=91 22:05:42 UTC+2 id=C5=91pontban Fran=
cis Grizzly Smit a=20
k=C3=B6vetkez=C5=91t =C3=ADrta:
>
> why not use a sequence class like this=20
>
> for(auto i : seq<int>(500) ) smt;=20
>
> where seq is defined such that it's a standard container like thing with=
=20
> begin and end defined to iterate over the range=20
>
> http://en.cppreference.com/w/cpp/language/range-for=20
>
> i.e.=20
>
> template<typename T>=20
> class seq {=20
> private:=20
> T _start =3D 0;=20
> T _step =3D 1;=20
> T _end;=20
> public:=20
> seq(T _e) : _end(_e) {};=20
> seq(T _s, T _e) : _start(_s), _end(_e) {};=20
> seq(T _s, T _e, T _stp) : _start(_s), _end(_e), _step(_stp) {};=
=20
> seqiterator<T> begin();=20
> seqiterator<T> end();=20
> }=20
>
> where seqiterator is an interator that ranges over the values from=20
> _start to _end going step at a time=20
>
> you might also want to look at Eric Nieblers range stuff I think he=20
> might have built this already=20
>
> https://github.com/ericniebler/range-v3 and=20
> https://ericniebler.github.io/range-v3/=20
>
> On 11/10/16 05:56, Lorand Szollosi wrote:=20
> > Hi,=20
> >=20
> > Constexpr times(N) migh force loop unrolling. But actually, what I'd=20
> really find useful is times(init-expr; times; post-expr). That'd give us=
=20
> this for(N), declare(int i) {}, scoped destruction of union members and=
=20
> stackless coroutine variables / member statics that are only needed up to=
a=20
> point, stuffing multiple statements into one (via switch), function reent=
ry=20
> (via continue), and about a dozen more features that I can't currently=20
> think of.=20
> >=20
> > Thanks,=20
> > -lorro=20
> >=20
> > 2016. okt. 10. d=C3=A1tummal, 4:02 id=C5=91pontban Thiago Macieira <
> thi...@macieira.org <javascript:>> =C3=ADrta:=20
> >=20
> >> Em domingo, 9 de outubro de 2016, =C3=A0s 06:00:41 CEST, Leo Heinsaar=
=20
> escreveu:=20
> >>>>> You show for (500) cout << "Name"; to a classroom of 20, and=20
> >>>>> at least 5 of them will become programmers. (Try to do that with=20
> >>>>> QBENCHMARK.)=20
> >>>> QBENCHMARK=20
> >>>>=20
> >>>> expensiveFunction(); ...=20
> >>> I meant the educational, not the technical aspect of it.=20
> >> And we all know that code that you learn and write as a student in=20
> early=20
> >> stages of programming is nowhere good. Why should we add more=20
> complexity to=20
> >> the language for something that is hardly ever used once you're past=
=20
> that=20
> >> stage?=20
> >>=20
> >> --=20
> >> Thiago Macieira - thiago (AT) macieira.info - thiago (AT) kde.org=20
> >> Software Architect - Intel Open Source Technology Center=20
> >>=20
> >> --=20
> >> You received this message because you are subscribed to a topic in the=
=20
> Google Groups "ISO C++ Standard - Future Proposals" group.=20
> >> To unsubscribe from this topic, visit=20
> https://groups.google.com/a/isocpp.org/d/topic/std-proposals/f39RoLhdm1E/=
unsubscribe.=20
>
> >> To unsubscribe from this group and all its topics, send an email to=20
> std-proposal...@isocpp.org <javascript:>.=20
> >> To post to this group, send email to std-pr...@isocpp.org <javascript:=
>.=20
>
> >> To view this discussion on the web visit=20
> https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/1818128.E3SL=
xdONPZ%40tjmaciei-mobl1.=20
>
>
> --=20
>
> .~. In my life God comes first....=20
> /V\ but Linux is pretty high after that :-D=20
> /( )\ Francis (Grizzly) Smit=20
> ^^-^^ http://www.smit.id.au/=20
> -----BEGIN GEEK CODE BLOCK-----=20
> Version: 3.1=20
> GM/CS/H/P/S/IT/L d- s+:+ a++ C++++ UL++++$ P+++ L+++$ E--- W+++=20
> N w--- M-- V-- PE- PGP t+ 5-- X-- R- tv b++++ DI(+) D-=20
> G e++ h+ y? r% z---=20
> ------END GEEK CODE BLOCK------=20
> http://www.geekcode.com/=20
>
>
--=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/347c46b3-0d48-45fb-b92f-4f5ac05dc196%40isocpp.or=
g.
------=_Part_931_2011944612.1476171231868
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr">Hi,<br><br>Note that this was proposed to OP who didn'=
t like it.<br>(Also, it doesn't give you all the benefits I've list=
ed above.)<br><br>Thanks,<br>-lorro<br><br>2016. okt=C3=B3ber 10., h=C3=A9t=
f=C5=91 22:05:42 UTC+2 id=C5=91pontban Francis Grizzly Smit a k=C3=B6vetkez=
=C5=91t =C3=ADrta:<blockquote class=3D"gmail_quote" style=3D"margin: 0;marg=
in-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;">why not use =
a sequence class like this
<br>
<br>for(auto i : seq<int>(500) ) smt;
<br>
<br>where seq is defined such that it's a standard container like thing=
with=20
<br>begin and end defined to iterate over the range
<br>
<br><a href=3D"http://en.cppreference.com/w/cpp/language/range-for" target=
=3D"_blank" rel=3D"nofollow" onmousedown=3D"this.href=3D'http://www.goo=
gle.com/url?q\x3dhttp%3A%2F%2Fen.cppreference.com%2Fw%2Fcpp%2Flanguage%2Fra=
nge-for\x26sa\x3dD\x26sntz\x3d1\x26usg\x3dAFQjCNH3QhRuPJz-ujdUDPswW3mC177eO=
A';return true;" onclick=3D"this.href=3D'http://www.google.com/url?=
q\x3dhttp%3A%2F%2Fen.cppreference.com%2Fw%2Fcpp%2Flanguage%2Frange-for\x26s=
a\x3dD\x26sntz\x3d1\x26usg\x3dAFQjCNH3QhRuPJz-ujdUDPswW3mC177eOA';retur=
n true;">http://en.cppreference.com/w/<wbr>cpp/language/range-for</a>
<br>
<br>i.e.
<br>
<br>template<typename T>
<br>class seq {
<br>=C2=A0 =C2=A0 =C2=A0private:
<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 T _start =3D 0;
<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 T _step =3D 1;
<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 T _end;
<br>=C2=A0 =C2=A0 =C2=A0public:
<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0seq(T _e) : _end(_e) {};
<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0seq(T _s, T _e) : _start(_s), _end(_e=
) {};
<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0seq(T _s, T _e, T _stp) : _start(_s),=
_end(_e), _step(_stp) {};
<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0seqiterator<T> begin();
<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0seqiterator<T> end();
<br>}
<br>
<br>where seqiterator is an interator that ranges over the values from=20
<br>_start to _end going step at a time
<br>
<br>you might also want to look at Eric Nieblers range stuff I think he=20
<br>might have built this already
<br>
<br><a href=3D"https://github.com/ericniebler/range-v3" target=3D"_blank" r=
el=3D"nofollow" onmousedown=3D"this.href=3D'https://www.google.com/url?=
q\x3dhttps%3A%2F%2Fgithub.com%2Fericniebler%2Frange-v3\x26sa\x3dD\x26sntz\x=
3d1\x26usg\x3dAFQjCNF6-7MwmERsjtO_yikBxBOgeh0fkA';return true;" onclick=
=3D"this.href=3D'https://www.google.com/url?q\x3dhttps%3A%2F%2Fgithub.c=
om%2Fericniebler%2Frange-v3\x26sa\x3dD\x26sntz\x3d1\x26usg\x3dAFQjCNF6-7Mwm=
ERsjtO_yikBxBOgeh0fkA';return true;">https://github.com/<wbr>ericnieble=
r/range-v3</a> and=20
<br><a href=3D"https://ericniebler.github.io/range-v3/" target=3D"_blank" r=
el=3D"nofollow" onmousedown=3D"this.href=3D'https://www.google.com/url?=
q\x3dhttps%3A%2F%2Fericniebler.github.io%2Frange-v3%2F\x26sa\x3dD\x26sntz\x=
3d1\x26usg\x3dAFQjCNHdpMWPZ4IBG_Bbzjvnp4Di_V_xhw';return true;" onclick=
=3D"this.href=3D'https://www.google.com/url?q\x3dhttps%3A%2F%2Fericnieb=
ler.github.io%2Frange-v3%2F\x26sa\x3dD\x26sntz\x3d1\x26usg\x3dAFQjCNHdpMWPZ=
4IBG_Bbzjvnp4Di_V_xhw';return true;">https://ericniebler.github.io/<wbr=
>range-v3/</a>
<br>
<br>On 11/10/16 05:56, Lorand Szollosi wrote:
<br>> Hi,
<br>>
<br>> Constexpr times(N) migh force loop unrolling. But actually, what I=
'd really find useful is times(init-expr; times; post-expr). That'd=
give us this for(N), declare(int i) {}, scoped destruction of union member=
s and stackless coroutine variables / member statics that are only needed u=
p to a point, stuffing multiple statements into one (via switch), function =
reentry (via continue), and about a dozen more features that I can't cu=
rrently think of.
<br>>
<br>> Thanks,
<br>> -lorro
<br>>
<br>> 2016. okt. 10. d=C3=A1tummal, 4:02 id=C5=91pontban Thiago Macieira=
<<a href=3D"javascript:" target=3D"_blank" gdf-obfuscated-mailto=3D"WgA=
u4J3YAAAJ" rel=3D"nofollow" onmousedown=3D"this.href=3D'javascript:'=
;;return true;" onclick=3D"this.href=3D'javascript:';return true;">=
thi...@macieira.org</a>> =C3=ADrta:
<br>>
<br>>> Em domingo, 9 de outubro de 2016, =C3=A0s 06:00:41 CEST, Leo H=
einsaar escreveu:
<br>>>>>> You show for (500) cout << "Name";=
to a classroom of 20, and
<br>>>>>> at least 5 of them will become programmers. (Try t=
o do that with
<br>>>>>> QBENCHMARK.)
<br>>>>> QBENCHMARK
<br>>>>>
<br>>>>> =C2=A0 =C2=A0 =C2=A0 =C2=A0 expensiveFunction(); =C2=
=A0...
<br>>>> I meant the educational, not the technical aspect of it.
<br>>> And we all know that code that you learn and write as a studen=
t in early
<br>>> stages of programming is nowhere good. Why should we add more =
complexity to
<br>>> the language for something that is hardly ever used once you&#=
39;re past that
<br>>> stage?
<br>>>
<br>>> --=20
<br>>> Thiago Macieira - thiago (AT) <a href=3D"http://macieira.info"=
target=3D"_blank" rel=3D"nofollow" onmousedown=3D"this.href=3D'http://=
www.google.com/url?q\x3dhttp%3A%2F%2Fmacieira.info\x26sa\x3dD\x26sntz\x3d1\=
x26usg\x3dAFQjCNEswDUBNCNanbu7euhqLn_62FW8ag';return true;" onclick=3D"=
this.href=3D'http://www.google.com/url?q\x3dhttp%3A%2F%2Fmacieira.info\=
x26sa\x3dD\x26sntz\x3d1\x26usg\x3dAFQjCNEswDUBNCNanbu7euhqLn_62FW8ag';r=
eturn true;">macieira.info</a> - thiago (AT) <a href=3D"http://kde.org" tar=
get=3D"_blank" rel=3D"nofollow" onmousedown=3D"this.href=3D'http://www.=
google.com/url?q\x3dhttp%3A%2F%2Fkde.org\x26sa\x3dD\x26sntz\x3d1\x26usg\x3d=
AFQjCNHGRJdo5_JYG1DowztwAHAKs80XSA';return true;" onclick=3D"this.href=
=3D'http://www.google.com/url?q\x3dhttp%3A%2F%2Fkde.org\x26sa\x3dD\x26s=
ntz\x3d1\x26usg\x3dAFQjCNHGRJdo5_JYG1DowztwAHAKs80XSA';return true;">kd=
e.org</a>
<br>>> =C2=A0 =C2=A0Software Architect - Intel Open Source Technology=
Center
<br>>>
<br>>> --=20
<br>>> You received this message because you are subscribed to a topi=
c in the Google Groups "ISO C++ Standard - Future Proposals" grou=
p.
<br>>> To unsubscribe from this topic, visit <a href=3D"https://group=
s.google.com/a/isocpp.org/d/topic/std-proposals/f39RoLhdm1E/unsubscribe" ta=
rget=3D"_blank" rel=3D"nofollow" onmousedown=3D"this.href=3D'https://gr=
oups.google.com/a/isocpp.org/d/topic/std-proposals/f39RoLhdm1E/unsubscribe&=
#39;;return true;" onclick=3D"this.href=3D'https://groups.google.com/a/=
isocpp.org/d/topic/std-proposals/f39RoLhdm1E/unsubscribe';return true;"=
>https://groups.google.com/a/<wbr>isocpp.org/d/topic/std-<wbr>proposals/f39=
RoLhdm1E/<wbr>unsubscribe</a>.
<br>>> To unsubscribe from this group and all its topics, send an ema=
il to <a href=3D"javascript:" target=3D"_blank" gdf-obfuscated-mailto=3D"Wg=
Au4J3YAAAJ" rel=3D"nofollow" onmousedown=3D"this.href=3D'javascript:=
9;;return true;" onclick=3D"this.href=3D'javascript:';return true;"=
>std-proposal...@<wbr>isocpp.org</a>.
<br>>> To post to this group, send email to <a href=3D"javascript:" t=
arget=3D"_blank" gdf-obfuscated-mailto=3D"WgAu4J3YAAAJ" rel=3D"nofollow" on=
mousedown=3D"this.href=3D'javascript:';return true;" onclick=3D"thi=
s.href=3D'javascript:';return true;">std-pr...@isocpp.org</a>.
<br>>> To view this discussion on the web visit <a href=3D"https://gr=
oups.google.com/a/isocpp.org/d/msgid/std-proposals/1818128.E3SLxdONPZ%40tjm=
aciei-mobl1" target=3D"_blank" rel=3D"nofollow" onmousedown=3D"this.href=3D=
'https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/1818128.E=
3SLxdONPZ%40tjmaciei-mobl1';return true;" onclick=3D"this.href=3D'h=
ttps://groups.google.com/a/isocpp.org/d/msgid/std-proposals/1818128.E3SLxdO=
NPZ%40tjmaciei-mobl1';return true;">https://groups.google.com/a/<wbr>is=
ocpp.org/d/msgid/std-<wbr>proposals/1818128.E3SLxdONPZ%<wbr>40tjmaciei-mobl=
1</a>.
<br>
<br>--=20
<br>
<br>=C2=A0 =C2=A0 .~. =C2=A0 =C2=A0 In my life God comes first....
<br>=C2=A0 =C2=A0 /V\ =C2=A0 =C2=A0 =C2=A0 =C2=A0 but Linux is pretty high =
after that :-D
<br>=C2=A0 =C2=A0/( )\ =C2=A0 =C2=A0Francis (Grizzly) Smit
<br>=C2=A0 =C2=A0^^-^^ =C2=A0 =C2=A0<a href=3D"http://www.smit.id.au/" targ=
et=3D"_blank" rel=3D"nofollow" onmousedown=3D"this.href=3D'http://www.g=
oogle.com/url?q\x3dhttp%3A%2F%2Fwww.smit.id.au%2F\x26sa\x3dD\x26sntz\x3d1\x=
26usg\x3dAFQjCNGlnVuSYKGCoHelaM7yQZgW7XG2Ng';return true;" onclick=3D"t=
his.href=3D'http://www.google.com/url?q\x3dhttp%3A%2F%2Fwww.smit.id.au%=
2F\x26sa\x3dD\x26sntz\x3d1\x26usg\x3dAFQjCNGlnVuSYKGCoHelaM7yQZgW7XG2Ng'=
;;return true;">http://www.smit.id.au/</a>
<br>-----BEGIN GEEK CODE BLOCK-----
<br>Version: 3.1
<br>GM/CS/H/P/S/IT/L d- s+:+ a++ C++++ UL++++$ P+++ L+++$ E--- W+++
<br>N w--- M-- V-- PE- PGP t+ 5-- X-- R- tv b++++ DI(+) D-
<br>G e++ h+ y? r% z---
<br>------END GEEK CODE BLOCK------
<br><a href=3D"http://www.geekcode.com/" target=3D"_blank" rel=3D"nofollow"=
onmousedown=3D"this.href=3D'http://www.google.com/url?q\x3dhttp%3A%2F%=
2Fwww.geekcode.com%2F\x26sa\x3dD\x26sntz\x3d1\x26usg\x3dAFQjCNGT9FDMmEN5fHE=
yPsvoxX8fntXajQ';return true;" onclick=3D"this.href=3D'http://www.g=
oogle.com/url?q\x3dhttp%3A%2F%2Fwww.geekcode.com%2F\x26sa\x3dD\x26sntz\x3d1=
\x26usg\x3dAFQjCNGT9FDMmEN5fHEyPsvoxX8fntXajQ';return true;">http://www=
..geekcode.com/</a>
<br>
<br></blockquote></div>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" group.<br />
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a href=3D"mailto:std-proposals+unsubscribe@isocpp.org">std-proposa=
ls+unsubscribe@isocpp.org</a>.<br />
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org">std-proposals@isocpp.org</a>.<br />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/347c46b3-0d48-45fb-b92f-4f5ac05dc196%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/347c46b3-0d48-45fb-b92f-4f5ac05dc196=
%40isocpp.org</a>.<br />
------=_Part_931_2011944612.1476171231868--
------=_Part_930_131096301.1476171231867--
.