Topic: A proposal to add lambda/function traits to the STL
Author: Emil Madsen <sovende@gmail.com>
Date: Wed, 6 Nov 2013 10:35:18 -0800 (PST)
Raw View
------=_Part_484_31164119.1383762918599
Content-Type: multipart/alternative;
boundary="----=_Part_485_24233107.1383762918599"
------=_Part_485_24233107.1383762918599
Content-Type: text/plain; charset=ISO-8859-1
I just finished writing the first draft of my first proposal ever.
And before submitting it, I'd like to discuss the matter at hand, and the
proposal at this forum.
The proposal is about adding traits, to determine a lambdas return and
argument type(s) at compile time, to the standard library.
Have a look,
I'm open to all kinds of criticism and feedback :)
// Emil 'Skeen' Madsen.
--
---
You received this message because you are subscribed to the Google Groups "ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an email to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
Visit this group at http://groups.google.com/a/isocpp.org/group/std-proposals/.
------=_Part_485_24233107.1383762918599
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr">I just finished writing the first draft of my first propos=
al ever.<br>And before submitting it, I'd like to discuss the matter at han=
d, and the proposal at this forum.<br><br>The proposal is about adding trai=
ts, to determine a lambdas return and argument type(s) at compile time, to =
the standard library.<br><br>Have a look,<br>I'm open to all kinds of criti=
cism and feedback :)<br><br>// Emil 'Skeen' Madsen.<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 std-proposals+unsubscribe@isocpp.org.<br />
To post to this group, send email to std-proposals@isocpp.org.<br />
Visit this group at <a href=3D"http://groups.google.com/a/isocpp.org/group/=
std-proposals/">http://groups.google.com/a/isocpp.org/group/std-proposals/<=
/a>.<br />
------=_Part_485_24233107.1383762918599--
------=_Part_484_31164119.1383762918599
Content-Type: application/pdf; name=Proposal_to_add_lambda_traits.pdf
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=Proposal_to_add_lambda_traits.pdf
X-Attachment-Id: 6dbb5f13-e5b0-4f54-98db-9382f147a719
Content-ID: <6dbb5f13-e5b0-4f54-98db-9382f147a719>
JVBERi0xLjQKJdDUxdgKMSAwIG9iago8PCAvUyAvR29UbyAvRCAoc2VjdGlvbi4xKSA+PgplbmRv
YmoKNCAwIG9iagooSW50cm9kdWN0aW9uKQplbmRvYmoKNSAwIG9iago8PCAvUyAvR29UbyAvRCAo
c2VjdGlvbi4yKSA+PgplbmRvYmoKOCAwIG9iagooTW90aXZhdGlvbikKZW5kb2JqCjkgMCBvYmoK
PDwgL1MgL0dvVG8gL0QgKHNlY3Rpb24uMykgPj4KZW5kb2JqCjEyIDAgb2JqCihTY29wZSkKZW5k
b2JqCjEzIDAgb2JqCjw8IC9TIC9Hb1RvIC9EIChzZWN0aW9uLjQpID4+CmVuZG9iagoxNiAwIG9i
agooSW1wYWN0IE9uIHRoZSBTdGFuZGFyZCkKZW5kb2JqCjE3IDAgb2JqCjw8IC9TIC9Hb1RvIC9E
IChzZWN0aW9uLjUpID4+CmVuZG9iagoyMCAwIG9iagooRGVzaWduIERlY2lzaW9ucykKZW5kb2Jq
CjIxIDAgb2JqCjw8IC9TIC9Hb1RvIC9EIChzZWN0aW9uLjYpID4+CmVuZG9iagoyNCAwIG9iagoo
VGVjaG5pY2FsIFNwZWNpZmljYXRpb25zKQplbmRvYmoKMjUgMCBvYmoKPDwgL1MgL0dvVG8gL0Qg
KHNlY3Rpb24uNykgPj4KZW5kb2JqCjI4IDAgb2JqCihBY2tub3dsZWRnZW1lbnRzKQplbmRvYmoK
MjkgMCBvYmoKPDwgL1MgL0dvVG8gL0QgWzMwIDAgUiAgL0ZpdCBdID4+CmVuZG9iagozOSAwIG9i
aiA8PAovTGVuZ3RoIDg5OCAgICAgICAKL0ZpbHRlciAvRmxhdGVEZWNvZGUKPj4Kc3RyZWFtCnja
hVVdc9Q2FH3fX6FHeaiFPi2Lmc4QSNoJA20hO/SB8qDYysbEX7XlQP59ryQ7ZCHQZGYlX+lcHZ9z
df1iv3v6GysRp6QouEL7K8QFI5QqVGhOdIH2NfqAT3v4+/XuLg9j9nH/CkAGMUmELHgAAYZRjnJe
EGVUAp11TZvlgmn8xtazi7jd2X73744hCv8MaY4KbgiXBlXd7sNHimqIv0KUCFOiz3FXh6QyMLbo
Yvd29yLy1YgxYpSKRzMqCTUCFVQRU26EhyznGldwPi/wH8OzLGdSFN+/CGSGFSLlCnznbpu5GfoA
oNJg0OKxbafWO9jCC8Ewp0zkjOW0ONq5qvDXBFSUxJ9c5UNSJWWIHSbbdU1/SARf2/6w2IMLTxq/
fPLklzXeXE52uksPZ7cZLA7t4oFfCv2dlQwP0819ot+nYRkfI3yy+OthCgQKxjdrAPDVmu+VGNv1
ZB/1o5TeAx96ihRYqOQx+qyzTQsoKRSebwJx5/rn1UzsQuqbVEIS6k4SXWoWfMwNg3LSKBeKiFW8
EziLRr3GIDYeZtumkB/SaOs6TVrbZVzhy7ivzhi2Ia6wn2zj52OQv3Zp8WL/OlFRUI6acHAnUAEl
hCGGm8TiJcgtKPYuDfMKYQ+rkMba5yVPkPO1fM4BwoBDOJjheoEwrsA/4BcspExLzDb1IQGT5j4B
AOC3ANXfDL65zQqB7Wo9NYX5H1z6ZYriiyqoB88uAqTihGsNwAgQMZhv0eNk70FNOP+8G23lIYdW
+M8+jUlDmFx429d2Ahu45KJcE35DCxIVzOBTNzeHNcGpq+JNA294SY36AfA8UdhnRmJXBTWv+6aK
ZRAOD2/GYaH5hwpZRX1CQqmF/nHCqA0HaU5Cvpj0ph/C8Ll19cF1wWkenIYmQkF3+ZMqEQ8c18lx
ujpOwfEqWpZapv5Jxeyvm3icwWOqdr1WewjZplsX/ZDGeRnDphJuv0+RCmpq6MZwP4PVDOe+CdMu
C49xy+T81LjbDNrRlnm4SmO8PjpeH41rm4JP03C19OkttiTL1Oc+bL9LRNf0UAePdcDRQq9z3k3Q
DeBjcAScodFJSfEyxxYW1+OFJVmuaRkaQIjNTTe2Ls2XOTbKMHVf7Nd4Zfs0udw4SVbiq2EBVjHe
rOuxcsOki9cqiLF59G0PnF18cRLXePi4aehzJSN8s51tX7X/AEHs12EKZW5kc3RyZWFtCmVuZG9i
agozMCAwIG9iaiA8PAovVHlwZSAvUGFnZQovQ29udGVudHMgMzkgMCBSCi9SZXNvdXJjZXMgMzgg
MCBSCi9NZWRpYUJveCBbMCAwIDU5NS4yNzYgODQxLjg5XQovUGFyZW50IDQ5IDAgUgovQW5ub3Rz
IFsgMzEgMCBSIDMyIDAgUiAzMyAwIFIgMzQgMCBSIDM1IDAgUiAzNiAwIFIgMzcgMCBSIF0KPj4g
ZW5kb2JqCjMxIDAgb2JqIDw8Ci9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovQm9yZGVyWzAg
MCAxXS9IL0kvQ1sxIDAgMF0KL1JlY3QgWzcxLjAwNCA0MTYuNzU0IDE2NC41NDcgNDI2Ljk5N10K
L0EgPDwgL1MgL0dvVG8gL0QgKHNlY3Rpb24uMSkgPj4KPj4gZW5kb2JqCjMyIDAgb2JqIDw8Ci9U
eXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovQm9yZGVyWzAgMCAxXS9IL0kvQ1sxIDAgMF0KL1Jl
Y3QgWzcxLjAwNCAzOTAuNjA1IDE1NS4wMzcgNDAwLjg0N10KL0EgPDwgL1MgL0dvVG8gL0QgKHNl
Y3Rpb24uMikgPj4KPj4gZW5kb2JqCjMzIDAgb2JqIDw8Ci9UeXBlIC9Bbm5vdAovU3VidHlwZSAv
TGluawovQm9yZGVyWzAgMCAxXS9IL0kvQ1sxIDAgMF0KL1JlY3QgWzcxLjAwNCAzNjIuMTMxIDEy
NC42OTkgMzc0LjY5OF0KL0EgPDwgL1MgL0dvVG8gL0QgKHNlY3Rpb24uMykgPj4KPj4gZW5kb2Jq
CjM0IDAgb2JqIDw8Ci9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovQm9yZGVyWzAgMCAxXS9I
L0kvQ1sxIDAgMF0KL1JlY3QgWzcxLjAwNCAzMzUuOTgyIDIzNS41IDM0OC41NDldCi9BIDw8IC9T
IC9Hb1RvIC9EIChzZWN0aW9uLjQpID4+Cj4+IGVuZG9iagozNSAwIG9iaiA8PAovVHlwZSAvQW5u
b3QKL1N1YnR5cGUgL0xpbmsKL0JvcmRlclswIDAgMV0vSC9JL0NbMSAwIDBdCi9SZWN0IFs3MS4w
MDQgMzA5LjgzMyAxODkuMzk1IDMyMi40XQovQSA8PCAvUyAvR29UbyAvRCAoc2VjdGlvbi41KSA+
Pgo+PiBlbmRvYmoKMzYgMCBvYmogPDwKL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9Cb3Jk
ZXJbMCAwIDFdL0gvSS9DWzEgMCAwXQovUmVjdCBbNzEuMDA0IDI4My42ODQgMjI5LjUyOSAyOTYu
MjUxXQovQSA8PCAvUyAvR29UbyAvRCAoc2VjdGlvbi42KSA+Pgo+PiBlbmRvYmoKMzcgMCBvYmog
PDwKL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9Cb3JkZXJbMCAwIDFdL0gvSS9DWzEgMCAw
XQovUmVjdCBbNzEuMDA0IDI1Ny41MzUgMjAxLjczMSAyNzAuMTAyXQovQSA8PCAvUyAvR29UbyAv
RCAoc2VjdGlvbi43KSA+Pgo+PiBlbmRvYmoKNDAgMCBvYmogPDwKL0QgWzMwIDAgUiAvWFlaIDcx
IDc3MC44OSBudWxsXQo+PiBlbmRvYmoKNDEgMCBvYmogPDwKL0QgWzMwIDAgUiAvWFlaIDcyIDcz
My4wMjggbnVsbF0KPj4gZW5kb2JqCjQ2IDAgb2JqIDw8Ci9EIFszMCAwIFIgL1hZWiA3MiA0NjUu
OTUgbnVsbF0KPj4gZW5kb2JqCjIgMCBvYmogPDwKL0QgWzMwIDAgUiAvWFlaIDcyIDI0MC41MiBu
dWxsXQo+PiBlbmRvYmoKMzggMCBvYmogPDwKL0ZvbnQgPDwgL0YxOCA0MiAwIFIgL0YxOSA0MyAw
IFIgL0YxNyA0NCAwIFIgL0Y0OCA0NSAwIFIgL0Y1MCA0NyAwIFIgL0Y1MSA0OCAwIFIgPj4KL1By
b2NTZXQgWyAvUERGIC9UZXh0IF0KPj4gZW5kb2JqCjUzIDAgb2JqIDw8Ci9MZW5ndGggMTg2NCAg
ICAgIAovRmlsdGVyIC9GbGF0ZURlY29kZQo+PgpzdHJlYW0KeNrFF9tu2zb0vV+RtylALVs3S3az
Au0u2IZuGFADe1iHgJHomKgkeiQdzxv27zs32XJiY0/DgDgiDw/P/cb3q1fTb4vZTVLGaVLkN6v1
TZnCXxLPyuxm1dz8Gn1/O8lm+D+ZlYvoRxvM0+18FqlgbH/72+qH6bdJeZMk8aIoUrw/u5mk8zit
Ur7+kw16CSQWRbTaGH87SfN5tLZta2/TMtqb/pFBjfH1DphE3iNhgg3fVnWI/AC7MmqUEFGtt7gq
I3WbRFu8u22NltNghYZrTK/cQRjv+hoF93Kxbxje6bCxTN7HqBWpUcXVQtT4ZaNBmBxQiRFy9CQt
KZBfFBKh/C2PjAXqHncdEATMIAjW8ZFXCH06kg0b3TEGaoSQp9siBwpGPbTavwZYiZbSjFSjZD2v
tZkMqiR5DFdZFaDo3rDnsvnYcxAEeZaD3lmcYSwg8qdZUl7yMiyrLAHShPUzyqy8n35k6W/TKgKB
MtRvQ4sX9mEgmgexZHuyEu7A0kDHmh7JBe1eC673u47sg0gmfOF5Vatt2Dk9aTV7Jr6k40QEB6/H
s6L8P5T0oVkuzzX9NCtme4owxNs7td0SBd3ASfKakSBC/huFmPxJhyHAj6pUz1SZD6oE3W1bFXQj
ZkCTHNhtQmzKn6PJyuHABP7uyFlHdx6lUDuMd1x9pluHPX4gmzk9J+kiTufFebCu8HKaL6JOmZ5X
EkOgjUE+HEp8ZNfwLWbMEgGK3WZP3gXLA5OIy9YCMFV4gzgAEvogkHZyavnbICNZU14emREJAQQq
f6QTAz7Nstz5QCzz08XNqNyQtIKu/4BiV5vQHi7luJf4qc0aK9+8EsZzgP2h6sBLkuEgqAwiOcfo
zyI6htKSFFAOTatfYHqha7cc2niM9awSz3sG7TyjrZ3teNVY7gNEzsgxJ4Wp8ermkpIdBdWBo+Rh
0AIDcev0WjsskJg/HDFQ3YpiIRQKpvCdPXpBs8fRl1UBIrJAVS76AUz0A9CoW6C7FlnU6lGAe8Yi
NSsJFdgr3nrb6T0EkiD1n3sWQrB8gHwSqkookM/h7HQNhaI0ONNK7OI01MF+cuZd7BNJxg0vW0Bt
VY5SXENdRUN7NBQfrbEVYb/mXFxcqmoANFBgJ/M8haxDqRgkbOqdc9Le2sORmNNUqgGxtwwEZftG
ueaSd8krg4fTMuPQhO/vO+0O7J4yH+IF4KYHyTsloQdHEl9wxD4EEGlSjYoano4bqpAKXrdrvjIV
ElLqeIfmI9tRPlTR1/aSClsIC482TFDlIKvA9kqGYpdg0+9kBZWfZxg6t/wdTS1ZAn4w5EU4eDKK
F7veaR+cqbkWJ6fSLKTIp2OWVF8vyHxWbSFCHJWz6yn0XnPtLoqI7YcrErwg/wZTq5aCAIxMtMBs
SLfDvEgoY9H8AaR/2LG8cBOdTZRGHQZZ9MNid+Qx6sZy+HIUoyvhesrUtttCRZsE02lpt3vTttK3
aVitICJpS6WZepU0qEfdQ7EJUnsajZW8N+QwocViD6hQ0gizlhoi5B4gVqSR7jhrh/EAnOb1BReI
8N8jGiSi9l73NcmP4yIlBsI7rXpZSuzBirXIIVeVXN87QzrA8iQmbAYx2VtJJPT33AIQYzOaWYnL
MVdw52UgqA0apr7uBCnhAzVLA18FnQ/tXEqjxoWBCVCWcodZw97blotwM5xLi6D7ZBFYbZ0VC3vV
DjT5q1rzeRhTcNuPCFgsYiMRRL49ljZh4RTUjkt5RfTn2Zg1yThPeaiaS5VCAChBTyEMISgwBXhJ
iixgMaGU2sroVjZyGpxy9X0yzvbDQwOlLU/SzrG/eO2GwoKC9OTkKTiZh83nSrzwkMxyfgh96TZ9
Izxlcu3PhrtyHCDps9fQ9UrzTl4FDmtKUJKcgVLzwBuYbYCwkKUSQlwH+faIanetZNloZBjJJm/T
it6m8k6C6fls5BbpaPYU6e5q2+i3Z0aTk0HZuwDNGFKop2JfwBT11bsPH969B9iHb95eMnfd0nRe
JDgWNPdDG7ivbf9ENTRcuvUXAeE5MJ+lz/qRM08Kn+NHhOQcYTplbvxSRxGJJ07P6EMENFb7/ovA
eL3GGMaV4tMH2xy4ROBOifAm8N5vsKOQ/XHb6ydMJ8R40PzFXqGb+N/MiMqfzLh6LVLHccyrjxfN
yd1I5KX+gbdrjHawpwv3wd6P7YxzEQ7e+F4zfdCP2t17DeMHFNm71UnNj8D3Lc9PSHpyhfn41ZdE
pMZJhzUaRtzLReSOowNDI4mWSx7q7vEWyXXNx2Oy+XFyEJrI90h2uTylIZnEPd59RChQAENC00ed
3r7hgp3De2uWPYun3QO8Qa6Hk0zRSJycRpp+yYBG1+2gTI1hcdUFASNKlHqhdTGybqc+63uDxn3m
K2/+1PdQ/67ZbGwljPWx8ZdLmAzDAf07Ix8n+DBJ8CeWWVRxPivPKf795lIM3E2PReL5yzxN53FR
5vSuraqK8VPEfPXN6tU/lw88lQplbmRzdHJlYW0KZW5kb2JqCjUyIDAgb2JqIDw8Ci9UeXBlIC9Q
YWdlCi9Db250ZW50cyA1MyAwIFIKL1Jlc291cmNlcyA1MSAwIFIKL01lZGlhQm94IFswIDAgNTk1
LjI3NiA4NDEuODldCi9QYXJlbnQgNDkgMCBSCj4+IGVuZG9iago1NCAwIG9iaiA8PAovRCBbNTIg
MCBSIC9YWVogNzEgNzcwLjg5IG51bGxdCj4+IGVuZG9iago2IDAgb2JqIDw8Ci9EIFs1MiAwIFIg
L1hZWiA3MiA3MzMuMDI4IG51bGxdCj4+IGVuZG9iago1MSAwIG9iaiA8PAovRm9udCA8PCAvRjUw
IDQ3IDAgUiAvRjE3IDQ0IDAgUiAvRjM2IDU1IDAgUiAvRjUyIDU2IDAgUiA+PgovUHJvY1NldCBb
IC9QREYgL1RleHQgXQo+PiBlbmRvYmoKNjEgMCBvYmogPDwKL0xlbmd0aCAxNzM0ICAgICAgCi9G
aWx0ZXIgL0ZsYXRlRGVjb2RlCj4+CnN0cmVhbQp42o1XWW8bNxB+z68Q8pJ1Yyl76nDcAE2TAO5D
WiBu+5AEDr1LSWxWS5Xk2jGK/vfOxbXkroEAhpecGXKGc3wzen355MW7bDHJstmqqvLJ5XqyyOEv
m6WLYnLZTD4m723QZyfTMs+SL/5kmiXhJEsaXJydme4kXyZBb7S78vrvXne1Pr88PZnmq1XyYTab
odirL7xXXcOLtTO6azxvnF5rx8tg5bvVvKgt3LcPPh6zO169L8pVMUOb5sklCH++/GWSTqZZOSvL
OVutrkF0kdgT+HeD/+DKYl7AlURvaFsmqm1J5NYz23bCQFtYvru/wgUmKpZp1Q7JrKlRxwdl60Nz
drbuuzoY24FjikUBB0D+jsX0t+AUMLsN78MWXSbGOnCpcboZe2DQu32rAkiWy1ViurV1O4VKkLAU
ZyGLvImk/5mLXBX4W9vd3rQiGcxOg61VLkGja8joPR3WjV6fTBdp8ozsZnaWRNPxCqd939KzRmw/
cgo8Fa40nTcUFAip4o8Prq8Dhrmokt+92mgWPQwhiO1UdCdsWubZryzamq+YoPolWvHiHST4QaKD
UTkYlS7ZqPPaNvrVaC71GNQqo4hfo+dw/SN+quTj509plZouMNXALuPlPyzgdOhdJ+dttyHxH7IU
BV8y+d+XY2p7T95FAXDY1b2/DrQDAxw/8K4gXW8gTc8bXbcYkru9Rn1sN2p8dXYWgDgozJez5SqL
YYEEqq+U91CRUOd4kkJl/JVXO30ezUAmp7PYANEEmhhxPryyC6QSdN4o4Lc9ZBXqXc5nWTo/fu3T
gzeC7PAU1mE8P/va2a+6e8q+w6umY3edvxhi+RDdYtBXLInoAaVWPYIXJSlGvl3zt7a983Lmr94H
gREmeAM1KcxghyovocoVcqj+qwRKVWS2omXfO6ysZWK9UKK+sI0WBIAKKIaqSpPfWk2oFAYVZOBh
DlX8Pgsq3CnXRtTgzXUr5bKzTqqo93rdt1w1YC1EYLfHcm61Z4FadbxgR0kthq3tN1u2he/Zz8Zy
+bXG8qarMsGmIs/FAUCyhIk3xvYig540NQGaUAiJcNFTF0ITGRHyxNe6U85YkSTfwRd9d8oSJogk
2NvKPar1llfX5BkxRTXNI4i7RbDMF5kEBVd7ZxkSrVctk24RcVgLboe7c8BL9CESj56LhE9pUcrl
lB0ozG0Q1R1C7xX0CxPk2M/Pn2cZSzP4qtibqYIRO7NF8pNIG9Gg9uBbCMboG1HnEtpY1AJrb9te
6j1fFUlng8hY/lrXGPD/nVDx/XecbNrTmTy57h+cqaHzqutWD2fuXyhaBbcOW5YXC+6hEAUlAIZL
QrvRh0n2QMpryFkyrvEIIzNpDekkW8zyrCoFJYrVbJULSlzA0fT+f5YuYLqpMfJA0I/BzHyWL/ND
mFnOxVZtGSaAcLu1z9qW19StgEvVuTysNNiEeAVUqvO8pEQnnhHKQT7qhkkAGxqaKzValLUP7gPU
7xrlmmjDtcNQLrPkdNSPTvBtozvtIIiCcF5epr7KKFMNV9Hm1pnAdiNcUjDiJaaO0Ho0mjWacbiV
F8Fpgr8s+XNr5Z5ojP4WZQyOoM0YFEKtcAaMXvx4EsgYfPGHBP5it4eBDa6qVsmv6NR5GoE8TT6A
M7EE0Z/fkxYYtzIvH+IIkphVYW8hiR4fi6vBr7gZogu+WUBSXwSmN1YKkLdUs7iQkZI3Nfphq7pN
FMPkwK/qpLPgZkiQEafWLU4LVJdVPtQlVnCBuIDfItlq1XD0yrRM3n7DmZ45Zs2SgEgcig6xl0gE
FEUhiISLcRQEUb5fbFCt9CQ6pFii07ejc6jeK0czdFFGM3l9P1SW+UF7KHmuh88GfJjR9EzEFpK7
g27FmYVNp8SZlrmAj/Feqr4SJ/s1PED40g9hNQSEi6iU5xOrd07zz62xpxz4uKwEbwCcfL+B4AbC
AtjSfLKTa+TXAtIbPfjfMyVyQrxp7KcevrMAL8iZh+CT4++SMWPp9xt15mUEZmiZOPXxkibK0IOt
NP2vqIMhI2L8oRHy+0EkyMHwPZpS0NEZ5GrfsF0SGhDDBlqKJYKisDquxpEHHP3mOFJVK34GYIBp
OLVAhCe+fC4zBP3I8XzglrGo/Z4+FCHoDUxTm44h6I2ujaea+642RIhZVZBkqL8SZECKPEN3vFX8
aZktAykQmkE3rqNuPiKi4kigHLdm9PM8B8hiAECBTu041avYFYAYs3Q6OqGo+Es6x+5puGTYl+h7
J4GI4C5TK+cFdBfj695Ho4FxMIpBL1vmCc+vOfitWpST6SKbFRgM1F0g68nbyyf/AZljnlUKZW5k
c3RyZWFtCmVuZG9iago2MCAwIG9iaiA8PAovVHlwZSAvUGFnZQovQ29udGVudHMgNjEgMCBSCi9S
ZXNvdXJjZXMgNTkgMCBSCi9NZWRpYUJveCBbMCAwIDU5NS4yNzYgODQxLjg5XQovUGFyZW50IDQ5
IDAgUgovQW5ub3RzIFsgNTAgMCBSIDU3IDAgUiBdCj4+IGVuZG9iago1MCAwIG9iaiA8PAovVHlw
ZSAvQW5ub3QKL0JvcmRlclswIDAgMV0vSC9JL0NbMCAxIDFdCi9SZWN0IFs0NjkuMzI1IDcxNy41
NDUgNTAzLjQ5NyA3MzAuMzAzXQovU3VidHlwZS9MaW5rL0E8PC9UeXBlL0FjdGlvbi9TL1VSSS9V
UkkoaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9wYXBlcnMvMjAx
My9uMzQ5My5odG1sKT4+Cj4+IGVuZG9iago1NyAwIG9iaiA8PAovVHlwZSAvQW5ub3QKL0JvcmRl
clswIDAgMV0vSC9JL0NbMCAxIDFdCi9SZWN0IFs3MS4wMDQgMjQ3LjM4OSAxMDUuMTc2IDI2MC4x
NDddCi9TdWJ0eXBlL0xpbmsvQTw8L1R5cGUvQWN0aW9uL1MvVVJJL1VSSShodHRwOi8vd3d3Lm9w
ZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL3BhcGVycy8yMDEzL24zNDkzLmh0bWwpPj4K
Pj4gZW5kb2JqCjYyIDAgb2JqIDw8Ci9EIFs2MCAwIFIgL1hZWiA3MSA3NzAuODkgbnVsbF0KPj4g
ZW5kb2JqCjEwIDAgb2JqIDw8Ci9EIFs2MCAwIFIgL1hZWiA3MiA0NDkuMDE1IG51bGxdCj4+IGVu
ZG9iagoxNCAwIG9iaiA8PAovRCBbNjAgMCBSIC9YWVogNzIgMzU0LjU3NiBudWxsXQo+PiBlbmRv
YmoKMTggMCBvYmogPDwKL0QgWzYwIDAgUiAvWFlaIDcyIDIxNi4xMzYgbnVsbF0KPj4gZW5kb2Jq
CjU5IDAgb2JqIDw8Ci9Gb250IDw8IC9GMTcgNDQgMCBSIC9GNTIgNTYgMCBSIC9GNTAgNDcgMCBS
ID4+Ci9Qcm9jU2V0IFsgL1BERiAvVGV4dCBdCj4+IGVuZG9iago2NiAwIG9iaiA8PAovTGVuZ3Ro
IDg2OSAgICAgICAKL0ZpbHRlciAvRmxhdGVEZWNvZGUKPj4Kc3RyZWFtCnjalVZfb9MwEH/fp+gT
TdCaJmnSNl2ZBIjBeAC0RbwAmtzUba2ldmU7VN3Ed+cu52wNZIJJbW3f/Xz/fdc3+cnwIg170SSI
ozTp5aveJIZPFISTUS9f9r55Xy/9QRROMi/3s9DjhT8KvY0UBSv9wWgcetc7WJEhvoejpGB+5Fmh
pPF/5B+HF9GkF0VBlqYxyg57g3gcxNOYRH/x44mnjBGLkoOQeOyJ7a7kWy6RYRnKIbqRAtREHvwA
h9tTIi8Qd6B9/xYPXNZ3D3bbdxi6oozlSyTA1sm8tqxA7O3nn3489bgG+1NUovC4PyMHwPA/HEiC
JMzIgXmhlvwcgciJgJOkxBkO/UEaJd6F0rhJvTWXXENsREFne9hxc0qgldJ7ppd0sIoAlQE0p70R
a8lspTlB1IpWYQ3x+2rHAa2ZVeBFGsI36rfMGpNZlkOAmeVzUI/iJds6Ffl5F95YXRXWWVnJAjNy
YzVDzQiHYIzDuH1nRvBdtSgbZ+EqaDu+PV/yosQYoLkvgJnPZuBEywP8klWDLj33XXH/ddZQ42kw
zeJ2Nq53UKasFHeutFzwycidwvRIy7WLKmUi8bZ8u+C6HQTzvOi+LZkxOdDA49PHApD4WhrMFYcM
y5yutkBbTG4QBER7rdfmucmaX6FQJ7+OOVkEh9nsJQYa+EhG4aCpptTaCmCAu7ZT4/3fReDyUBkh
12SKrvXeoCtEePXgL8h2JnWmzWALKOhSgUa4speWJDAt7OFIZlK7YMQdVytyovanqaVOHQ85g2sY
oxsnW/wzxEyvuyrwKCZR+/JRTJpgpI3hD4l+6lUZu5zNbAXt8Qaroe6Sdi5cnRgMZQOYuySenwOB
yolcHyRZEIejtmD3Yjqf2ONrOqbOhw9tr6vBY3+cEvKTsqC67rYX/hSSXZZP9flndPSCSerkC5oG
RF2pSroOz6xT+l7YD9UicJ28NebA0lEWZHH2OOVgijWz7jVOuXrU3UqFy77ky3VtMRzs/wy3yz5a
E428UpAfdMKmUq8bJm8N7TsdjcbUmhCwEQ7JpNnXWMeoZxmsrVk2cbNM4XZPgP1G1IANHTnBKP4V
K8uDs5UzZ/X20d6OEig0h6xhNWOYLdkHsnZaNfOWlQEVMwQlnSR4fwoV5v5VJMg7eZef/AbSbkS9
CmVuZHN0cmVhbQplbmRvYmoKNjUgMCBvYmogPDwKL1R5cGUgL1BhZ2UKL0NvbnRlbnRzIDY2IDAg
UgovUmVzb3VyY2VzIDY0IDAgUgovTWVkaWFCb3ggWzAgMCA1OTUuMjc2IDg0MS44OV0KL1BhcmVu
dCA0OSAwIFIKL0Fubm90cyBbIDU4IDAgUiA2MyAwIFIgXQo+PiBlbmRvYmoKNTggMCBvYmogPDwK
L1R5cGUgL0Fubm90Ci9Cb3JkZXJbMCAwIDFdL0gvSS9DWzAgMSAxXQovUmVjdCBbMzcxLjgwNyA2
OTEuNDcxIDQ0Ni45NDUgNzA0LjAyMV0KL1N1YnR5cGUvTGluay9BPDwvVHlwZS9BY3Rpb24vUy9V
UkkvVVJJKGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNzk0MzUyNS9pcy1pdC1w
b3NzaWJsZS10by1maWd1cmUtb3V0LXRoZS1wYXJhbWV0ZXItdHlwZS1hbmQtcmV0dXJuLXR5cGUt
b2YtYS1sYW1iZGEpPj4KPj4gZW5kb2JqCjYzIDAgb2JqIDw8Ci9UeXBlIC9Bbm5vdAovQm9yZGVy
WzAgMCAxXS9IL0kvQ1swIDEgMV0KL1JlY3QgWzM3NC43OTQgMzEwLjQgNDE1LjU0OCAzMjIuOTVd
Ci9TdWJ0eXBlL0xpbmsvQTw8L1R5cGUvQWN0aW9uL1MvVVJJL1VSSShodHRwczovL2dpdGh1Yi5j
b20va2Vubnl0bS91dGlscy9ibG9iL21hc3Rlci90cmFpdHMuaHBwKT4+Cj4+IGVuZG9iago2NyAw
IG9iaiA8PAovRCBbNjUgMCBSIC9YWVogNzEgNzcwLjg5IG51bGxdCj4+IGVuZG9iagoyMiAwIG9i
aiA8PAovRCBbNjUgMCBSIC9YWVogNzIgNzMzLjAyOCBudWxsXQo+PiBlbmRvYmoKMjYgMCBvYmog
PDwKL0QgWzY1IDAgUiAvWFlaIDcyIDI5My4zODUgbnVsbF0KPj4gZW5kb2JqCjY0IDAgb2JqIDw8
Ci9Gb250IDw8IC9GNTAgNDcgMCBSIC9GMTcgNDQgMCBSIC9GNTIgNTYgMCBSID4+Ci9Qcm9jU2V0
IFsgL1BERiAvVGV4dCBdCj4+IGVuZG9iago2OSAwIG9iagpbNTE0LjUgNTE0LjUgNTE0LjUgNTE0
LjUgNTE0LjUgNTE0LjUgNTE0LjUgNTE0LjUgNTE0LjUgNTE0LjUgNTE0LjUgNTE0LjUgNTE0LjUg
NTE0LjUgNTE0LjUgNTE0LjUgNTE0LjUgNTE0LjUgNTE0LjUgNTE0LjUgNTE0LjUgNTE0LjUgNTE0
LjUgNTE0LjUgNTE0LjUgNTE0LjUgNTE0LjUgNTE0LjUgNTE0LjUgNTE0LjUgNTE0LjUgNTE0LjUg
NTE0LjUgNTE0LjUgNTE0LjUgNTE0LjUgNTE0LjUgNTE0LjUgNTE0LjUgNTE0LjUgNTE0LjUgNTE0
LjUgNTE0LjUgNTE0LjUgNTE0LjUgNTE0LjUgNTE0LjUgNTE0LjUgNTE0LjUgNTE0LjUgNTE0LjUg
NTE0LjUgNTE0LjUgNTE0LjUgNTE0LjUgNTE0LjUgNTE0LjUgNTE0LjUgNTE0LjUgNTE0LjUgNTE0
LjUgNTE0LjUgNTE0LjUgNTE0LjUgNTE0LjUgNTE0LjUgNTE0LjUgNTE0LjUgNTE0LjUgNTE0LjUg
NTE0LjUgNTE0LjUgNTE0LjUgNTE0LjUgNTE0LjUgNTE0LjUgNTE0LjUgNTE0LjUgNTE0LjUgNTE0
LjUgNTE0LjUgNTE0LjUgNTE0LjUgNTE0LjUgNTE0LjUgNTE0LjUgNTE0LjUgNTE0LjUgNTE0LjUg
NTE0LjUgNTE0LjUgNTE0LjVdCmVuZG9iago3MCAwIG9iagpbNTAwXQplbmRvYmoKNzEgMCBvYmoK
WzYyNC44IDYyNC44IDkzNy4zIDkzNy4zIDU2Mi40IDM0Mi41IDU2Mi40IDkzNy4zIDU2Mi40IDkz
Ny4zIDg3NC44IDMxMi40IDQzNy40IDQzNy40IDU2Mi40IDg3NC44IDMxMi40IDM3NC45IDMxMi40
IDU2Mi40IDU2Mi40IDU2Mi40IDU2Mi40IDU2Mi40IDU2Mi40IDU2Mi40IDU2Mi40IDU2Mi40IDU2
Mi40IDU2Mi40IDMxMi40IDMxMi40IDg3NC44IDg3NC44IDg3NC44IDUzMS4xIDg3NC44IDg0OS4z
IDc5OS42IDgxMi4zIDg2Mi4xIDczOC4yIDcwNyA4ODQgODc5LjQgNDE4LjkgNTgwLjkgODgwLjYg
Njc1LjggMTA2Ni45IDg3OS40IDg0NC43IDc2OC4zIDg0NC43IDgzOC45IDYyNC44IDc4Mi4yIDg2
NC40IDg0OS4zIDExNjEuOCA4NDkuMyA4NDkuMyA2ODcuMyAzMTIuNCA1NjIuNCAzMTIuNCA2ODcu
MyA4NzQuOCAzMTIuNCA1NDYuNyA2MjQuOCA0OTkuOSA2MjQuOCA1MTMuMiAzNDMuNyA1NjIuNCA2
MjQuOCAzMTIuNCAzNDMuNyA1OTMuNiAzMTIuNCA5MzcuMyA2MjQuOCA1NjIuNCA2MjQuOCA1OTMu
NiA0NTkuNCA0NDMuNiA0MzcuNCA2MjQuOCA1OTMuNiA4MTIuM10KZW5kb2JqCjcyIDAgb2JqCls1
OTkuNCA1OTkuNCA4OTkuMSA4OTkuMSA1MzkuNSAzMjguOCA1MzkuNSA4OTkuMSA1MzkuNSA4OTku
MSA4MzkuMiAyOTkuNyA0MTkuNiA0MTkuNiA1MzkuNSA4MzkuMiAyOTkuNyAzNTkuNiAyOTkuNyA1
MzkuNSA1MzkuNSA1MzkuNSA1MzkuNSA1MzkuNSA1MzkuNSA1MzkuNSA1MzkuNSA1MzkuNSA1Mzku
NSA1MzkuNSAyOTkuNyAyOTkuNyA4MzkuMiA4MzkuMiA4MzkuMiA1MDkuNSA4MzkuMiA4MTQuMyA3
NjYuOCA3NzkuMiA4MjYuNyA3MDcuNyA2NzcuNyA4NDcuOSA4NDMuNCAzOTQuNyA1NTcgODQ0LjIg
NjQ3LjggMTAyMy4yIDg0My40IDgxMC4xIDczNi44IDgxMC4xIDc5OS4zIDU5OS40IDc1MC4xIDgy
OC44IDgxNC4zIDExMTQgODE0LjMgODE0LjMgNjU5LjMgMjk5LjcgNTM5LjUgMjk5LjcgNjU5LjMg
ODM5LjIgMjk5LjcgNTM5LjUgNTk5LjQgNDc5LjUgNTk5LjQgNDg5LjEgMzI5LjcgNTM5LjUgNTk5
LjQgMjk5LjcgMzI5LjcgNTY5LjQgMjk5LjcgODk5LjEgNTk5LjQgNTM5LjUgNTk5LjQgNTY5LjQg
NDM1LjUgNDI1LjYgNDE5LjYgNTk5LjQgNTY5LjQgNzc5LjJdCmVuZG9iago3MyAwIG9iagpbNjg0
LjYgNjQ2LjggNjU5LjggNjk3LjYgNjIxLjQgNTk2IDcxNi44IDY4NC42IDMyOS4xIDQ2OSA3MTAg
NTcwLjYgODM3IDY4NC42IDcxMC41IDYyMS40IDcxMC41IDY3Mi4yIDUwNy40IDY1OS44IDY4NC42
IDY4NC42IDkzOC42IDY4NC42IDY4NC42IDU1OC4yIDI1My40IDQ1Ni42IDI1My40IDU1OC4yIDcx
MC41IDI1My40IDQ1Ni42IDUwNy40IDQwNS44IDUwNy40IDQwNS44IDI3OC44IDQ1Ni42IDUwNy40
IDI1My40IDI3OC44IDQ4MiAyNTMuNCA3NjEuMyA1MDcuNCA0NTYuNiA1MDcuNCA0ODIgMzU1IDM2
MC4xIDM1NV0KZW5kb2JqCjc0IDAgb2JqCls1NDMuOCA1NDMuOCA4MTUuOCA4MTUuOCA0ODkuNSAy
NzEuOSA0ODkuNSA4MTUuOCA0ODkuNSA4MTUuOCA3NjEuNCAyNzEuOSAzODAuNyAzODAuNyA0ODku
NSA3NjEuNCAyNzEuOSAzMjYuMyAyNzEuOSA0ODkuNSA0ODkuNSA0ODkuNSA0ODkuNSA0ODkuNSA0
ODkuNSA0ODkuNSA0ODkuNSA0ODkuNSA0ODkuNSA0ODkuNSAyNzEuOSAyNzEuOSA3NjEuNCA3NjEu
NCA3NjEuNCA0NjIuMyA3NjEuNCA3MzMuOCA2OTMuMiA3MDcgNzQ3LjYgNjY2IDYzOC44IDc2OC4x
IDczMy44IDM1My4yIDUwMi45IDc2MSA2MTEuNyA4OTcgNzMzLjggNzYxLjQgNjY2IDc2MS40IDcy
MC40IDU0My44IDcwNyA3MzMuOCA3MzMuOCAxMDA1LjggNzMzLjggNzMzLjggNTk4LjIgMjcxLjkg
NDg5LjUgMjcxLjkgNTk4LjIgNzYxLjQgMjcxLjkgNDg5LjUgNTQzLjggNDM1LjEgNTQzLjggNDM1
LjEgMjk5LjEgNDg5LjUgNTQzLjggMjcxLjkgMjk5LjEgNTE2LjcgMjcxLjkgODE1LjggNTQzLjgg
NDg5LjUgNTQzLjggNTE2LjcgMzgwLjcgMzg2LjEgMzgwLjcgNTQzLjggNTE2LjcgNzA3IDUxNi43
IDUxNi43XQplbmRvYmoKNzUgMCBvYmoKWzY0Ny45IDYyMS40IDc0Ny4yIDcxNCAzNDMuNCA0ODku
MSA3NDAuNCA1OTQuOSA4NzIuOCA3MTQgNzQwLjYgNjQ3LjkgNzQwLjYgNzAwLjggNTI4LjkgNjg3
LjcgNzE0IDcxNCA5NzguNiA3MTQgNzE0IDU4MS44IDI2NC4yIDQ3NS45IDI2NC4yIDU4MS44IDc0
MC42IDI2NC4yIDQ3NS45IDUyOC45IDQyMyA1MjguOSA0MjMgMjkwLjcgNDc1LjkgNTI4LjkgMjY0
LjIgMjkwLjcgNTAyLjQgMjY0LjIgNzkzLjUgNTI4LjkgNDc1LjkgNTI4LjkgNTAyLjQgMzcwLjEg
Mzc1LjRdCmVuZG9iago3NiAwIG9iagpbMzA4LjIgMjU2LjggNDYyLjYgNDYyLjYgNDYyLjYgNDYy
LjYgNDYyLjYgNDYyLjYgNDYyLjYgNDYyLjYgNDYyLjYgNDYyLjYgNDYyLjYgMjU2LjggMjU2Ljgg
NzE5LjggNzE5LjggNzE5LjggNDM2LjkgNzE5LjggNjkzLjYgNjU1LjMgNjY4LjMgNzA2LjcgNjI5
LjUgNjAzLjggNzI2LjEgNjkzLjYgMzMzLjUgNDc1LjIgNzE5LjMgNTc4LjEgODQ3LjkgNjkzLjYg
NzE5LjggNjI5LjUgNzE5LjggNjgxIDUxNCA2NjguMyA2OTMuNiA2OTMuNiA5NTAuOCA2OTMuNiA2
OTMuNiA1NjUuNSAyNTYuOCA0NjIuNiAyNTYuOCA1NjUuNSA3MTkuOCAyNTYuOCA0NjIuNiA1MTQg
NDExLjEgNTE0IDQxMS4xIDI4Mi41IDQ2Mi42IDUxNCAyNTYuOCAyODIuNSA0ODguMyAyNTYuOCA3
NzEuMiA1MTQgNDYyLjYgNTE0IDQ4OC4zIDM1OS43IDM2NC44IDM1OS43IDUxNCA0ODguMyA2Njgu
MyA0ODguMyA0ODguM10KZW5kb2JqCjc3IDAgb2JqIDw8Ci9MZW5ndGgxIDE0MDMKL0xlbmd0aDIg
NjAyOQovTGVuZ3RoMyAwCi9MZW5ndGggNjk4NyAgICAgIAovRmlsdGVyIC9GbGF0ZURlY29kZQo+
PgpzdHJlYW0KeNqNeAc0nO3WtiBa1GjRh+h1hujRe/RORBljMIwZzOhEr9F7CyE6CaL3IAiiRw+i
J0oIggjxTfLmPee85//X+r41az3z3Htfe+/72ve1n5n1cLDqGQoo2CFtoapIBFoAJAiUAihpG5qD
gAAgUEQQCBQm4uAwgqHh0L/tRBwmUHcUDImQ+g+EkjsUjMbYlMFoDFAbiQA88IADQCIAkJgUSFwK
CAQIA4GSfwOR7lIAZbAnzA6gLQh4gERAUUQcSkhXH3eYgyMaU+fvWwA3hAcAkpQU5/8dDlBwgbrD
IGAEQBuMdoS6YCpCwHCAIRICg6J9/pGC+74jGu0qJSTk5eUlCHZBCSLdHWR5+AFeMLQjwACKgrp7
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
+Rhi/totaM1rwK3t7QMgfmrJl2HLgrmxaatmQeLwZ9GceUuOIidrclQEkOlVrUdPKKIfvt7OvcXK
qLG3nVD/6qWq5t63iEdLoJCmSTokZ7DMrICvV6DIeNzSkmUHzmC1IFkl4gfJV9fum0RTOJ7RcPtI
nkeNMaVSJq/e6ZsVdiNTs88CAfemWZ5TzVPEmBxHJvC5jvu8nDXr0w3Z4qxfKywvdxMx69bUcoZe
fysvrY3U7F/siD19vmKL3xUrF9WUnzaQDl+Y2Dr03FE4VTlkGVOZFqsnjzh2smTXYBqXDic9YvI3
ZaizoBTxBZFUb9ggRhU/B7FspmlHqxaKOhiXGVa1dD/PVpunnl78LoelfXycPlavNkwrVr1pPGKQ
yvssK+wDcWlkA/qWoOl18jXhRwgRXG9Bt6bJXAbq3Ot8vM5B9T/Fs4sgCmVuZHN0cmVhbQplbmRv
YmoKNzggMCBvYmogPDwKL1R5cGUgL0ZvbnREZXNjcmlwdG9yCi9Gb250TmFtZSAvR0ZBV1JHK0NN
U1kxMAovRmxhZ3MgNAovRm9udEJCb3ggWy0yOSAtOTYwIDExMTYgNzc1XQovQXNjZW50IDc1MAov
Q2FwSGVpZ2h0IDY4MwovRGVzY2VudCAtMTk0Ci9JdGFsaWNBbmdsZSAtMTQKL1N0ZW1WIDQwCi9Y
SGVpZ2h0IDQzMQovQ2hhclNldCAoL2J1bGxldCkKL0ZvbnRGaWxlIDc3IDAgUgo+PiBlbmRvYmoK
NzkgMCBvYmogPDwKL0xlbmd0aDEgNzI3Ci9MZW5ndGgyIDE2ODI2Ci9MZW5ndGgzIDAKL0xlbmd0
aCAxNzQwNiAgICAgCi9GaWx0ZXIgL0ZsYXRlRGVjb2RlCj4+CnN0cmVhbQp42mx6Y3Qu3dJtbNt5
Ytu2bdu2bdu2bTvZsZOdZMe2kx0n9z3n3PPd8Y1xR/+pVTWra9Zc1av7R5MRiTvYu6p6OZox0THR
M3IDVMSFNZmYGRkBjPQsMGRkIs5mRq5WDvaiRq5m3AANM1OAipkjgIkZ8A+ECYYMIOLg6OVsZWHp
CqA0ofq3E6Bua2RqZWflDFB3sHVwtzKxBPC6u7sLuru40Tu78dP/k6RiZgZwtTQDmFvZmgFEFBS1
pOQlAJQS8moACTN7M2cjW4Cim7GtlQlA1srEzN7FjApg7uAMsP3PAmDiYG9q9S9OLvT/JmDvbubs
+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
lUYLWbM5xuCkYMnrj9qEXrv486mlDUe1Bz3frkczWEiWyHzQSE++SFrwhLtV/nGQACImqqlaAe+n
Jwh0h9uT5r4jj7pkp+gVBtaAlBGaTzE/EyRsj3g4/xuRqA1aoGeJorryEZXQhwxfH+nVeNfK2BsL
1iPG+5UD0CirQcLP9agQobdZnDmjymQSlotIulm4otGFg8XYTjMoOQ4MYQhJutWGT8ZXXXVI7Jj/
yPv9rhRhIDSI4zXed/iYE75YjZayVgTwkYWEQXqNwfyM5cKO58nznlzFX5BgBKAAJ9swtEJpfK5P
ilDX7NsfQCenPStnaup2Z9eKXBGNDdErsJxoX+7G8RHXXWUVIz2lbQf60j6o9mpuVUgWzqKiKAir
dkMhV6ju6BF04b8CTh070YdCf0IWfygIpGVdvc+GRHDt7lRht77Um0HweeWvg0oCIhum23G6z7iv
zQRr4GbFrZVit8ic91/rQNrJ/aOhcfpzYY8OZOsT4uOerGCvyQHkCnY4fGAzhK/Q6VyjF16uU5An
A9jxoFjgpm5RKoACas/rHgwuN5ZWI/UE7WC63V/zTVBoaVkHPeaLAYwuS+rBRA8vUEnWyH8LnwOf
8u8LklFkLSk7o70VazxE85aRnSzDh3scVPO4kjFvTtvkIz2iJrGP+3zOXXe/H2rTOFvdgB4NmDii
chUks5IywRqCjPlxD4VSnyTky5sG2Jc/qrvUKFiEvrTHGmCa4dHEVPjNuHgl1uP13c0u/eTJGiv4
0A4MVgdjgirKNMhi4AJn5V/Id/SwwNvIzo67CVXJF9XA6r3ZJ8ylrhRnGxCdBDDcYyxQB1WiU/bf
4iet15YP+cWgGgaJDVUeQvSv6W6DfIc/RwJqcotF7l5FhlUYOt928OV/UtPKMOhhkNGSal9LlIn+
9BADUewusT9Blk5E/YPfG3hxUje/uwl5DXU2asUcYE7hGeB45j7uX7tm3luprHn+/z0VXNtP7nCf
o6FgY7oLcMgKZW5kc3RyZWFtCmVuZG9iago4MCAwIG9iaiA8PAovVHlwZSAvRm9udERlc2NyaXB0
b3IKL0ZvbnROYW1lIC9CWFRQWkUrU0ZCWDEyMDAKL0ZsYWdzIDQKL0ZvbnRCQm94IFstMjIzIC0z
MTYgMTY5NCA5MjVdCi9Bc2NlbnQgNjkwCi9DYXBIZWlnaHQgNjkwCi9EZXNjZW50IC0xOTQKL0l0
YWxpY0FuZ2xlIDAKL1N0ZW1WIDUwCi9YSGVpZ2h0IDQ0NAovQ2hhclNldCAoL0EvRC9JL00vTy9T
L1QvVi9hL2MvZC9lL2ZpL2ZvdXIvZy9oL2kvay9sL20vbi9vL29uZS9wL3Ivcy90L3RocmVlL3Uv
di93KQovRm9udEZpbGUgNzkgMCBSCj4+IGVuZG9iago4MSAwIG9iaiA8PAovTGVuZ3RoMSA3MjcK
L0xlbmd0aDIgMTQ2NDYKL0xlbmd0aDMgMAovTGVuZ3RoIDE1MjM4ICAgICAKL0ZpbHRlciAvRmxh
dGVEZWNvZGUKPj4Kc3RyZWFtCnjabbZzcKZfFi2cjm3zTSfp2LZt23lju9Oxbdu2bdu2k47tfL+Z
uTO3btVXzz8ba9dee51d5zlkxGJ2ts4qv+2BjLSMdAxcAGUxIQ1GdiYOAAMdMywZmbAj0NDZws5W
xNAZyAVQB5oAlIH2AEYmABMDAyMsGUDYzv63o4WZuTOAwpjy30GAmrWhiYWNhSNAzc7aztXC2BzA
4+rqKuDq5ELn6MJH90+RMhAIcDYHAkwtrIEAYXkFTUk5cQCFuJwqQBxoC3Q0tAYouBhZWxgDZCyM
gbZOQEqAqZ0jwPo/DsDYztbE4l+cnOj+TcDWFejo/A8xU0c7G4CsqIqgmLycCkBUmF5FGGBoawKQ
kfin3NbZiesfNNDYyP1f09EAnP9nWRv+zzL6n/W/rKP7fyw6WEZGgImFsTPACGhmYQtL/y/dJG1N
7QBs/wmbuNj/N/UPIad/+AEo/tGQEmACNP0H7WJtLWdoAwRQCNvZ2Ls4Ax0BsnYmQEdbgJCdtQlA
1N0ZaGsCNPkv2tDGwvr3/y/+/yAknQ3/0UPQ1uwfBRn+E7JwErNwB5ooWDj/I7mpofU/Uv07rg78
z/n8q9F/qv9pBfjnXE3sbK1//5+G/wzz73b0qvJKojIy1P9bg3+nRW2N7UwsbM0Ays7/KGroaPK/
wL/TCoYW/9mh/1L5704BGP+vL2vo7GjhDtBmoPvXkjD86/uvpft/UUJCdu5/aJkYmQG0zIxsAEY2
RnYAJyOH1/9D19jF0RFo6/xv2f+Z5b/+v9cJCHQHGsOuLdsZcwdapjQHl3mLFsyWQ1DPThuoUi8z
/liZ6r7WRrEYNDfRP7zEvVPBzXWDJ5jxM+LdvdiRvGv6aRgDhD+emIwkDtVdxn0pIik3867eelPM
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
MiAwIG9iaiA8PAovVHlwZSAvRm9udERlc2NyaXB0b3IKL0ZvbnROYW1lIC9VT1JFTEwrU0ZCWDE3
MjgKL0ZsYWdzIDQKL0ZvbnRCQm94IFstMjEzIC0zMTYgMTYxNyA5MThdCi9Bc2NlbnQgNjkwCi9D
YXBIZWlnaHQgNjkwCi9EZXNjZW50IC0xOTQKL0l0YWxpY0FuZ2xlIDAKL1N0ZW1WIDUwCi9YSGVp
Z2h0IDQ0NAovQ2hhclNldCAoL0EvQy9EL0kvTS9PL1MvVC9WL2EvYy9kL2UvZmkvZy9oL2kvay9s
L20vbi9vL3Avci9zL3QvdS92L3cpCi9Gb250RmlsZSA4MSAwIFIKPj4gZW5kb2JqCjgzIDAgb2Jq
IDw8Ci9MZW5ndGgxIDcyMQovTGVuZ3RoMiAyMTEwNQovTGVuZ3RoMyAwCi9MZW5ndGggMjE2NjQg
ICAgIAovRmlsdGVyIC9GbGF0ZURlY29kZQo+PgpzdHJlYW0KeNpsuANwbt22LRrbdr44WbFt216x
bdvOWrFt27Zt27aT+5+97963zqtXs2pWR+s1Wm+jzxqzBhmRmJ2ts4qHvQkjLSMdAxdAWUxJlpGJ
gQHAQMcMQ0Ym7Ghi4GxhZyti4GzCBVA3MQYom9gDGJkA/0AYYcgAwnb2Ho4WZubOAEojqn8FAWrW
BsYWNhaOADU7aztXCyNzAI+rq6uAq5MLnaMLH90/RcomJgBncxOAqYW1CUBYXkFTUk4cQCkupwoQ
N7E1cTSwBii4GFpbGAFkLIxMbJ1MqACmdo4A6387ACM7W2OL/+HkRPcvArauJo7O/xAzdbSzAciK
qgiKycupAESF6VWEAQa2xgAZiX/KbZ2duP5Bmxg52vxPdzQA5/9a1gb/tQz/a/036+j+b4sOhpER
YGxh5AwwNDGzsIWh/x/dJG1N7QBs/w4bu9j/J/UPIad/+AEo/9GQCmBsYvoP2sXaWs7AxgRAKWxn
Y+/ibOIIkLUzNnG0BSjZ2RjY/gdlYGNh7fH/i/u/CElng390ELQ1+0c5hn+HLJzELNxNjBUsnP+R
2tTA+h+J/hVXN/n3vsiaGFu42Py73uQfPf7ZUWM7W2uP/7vkP238a0F6GWEhFSUl6v8OwL/SorZG
dsYWtmYAZed/tDRwNP5v4F9pBQOLf0/Pf8j8Z5oAjP/PlzVwdrRwB2gz0P3PeDD8z/MfS+f/oYSE
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
YMPQbVNtiJKxv7JJwaio1um9EOYt8dcbF3Ft/vHk7idB29GsUwX5tjwaKygrbcOOW6TDkaSHslbh
KUxqApml0aekXAxBSLTEQaaRvjzEV65gOTOr42hUn2ZisR1BLC4F6XsBsOWqo+x3SjSGI5AmZLgr
VyUipbqtM7DB4R5wblSuyBxT270si+ZJgMrJaZiRMrTCyR6Cv8EibgplbmRzdHJlYW0KZW5kb2Jq
Cjg0IDAgb2JqIDw8Ci9UeXBlIC9Gb250RGVzY3JpcHRvcgovRm9udE5hbWUgL0xDQlRSUitTRlJN
MTIwMAovRmxhZ3MgNAovRm9udEJCb3ggWy0xODUgLTMyMCAxNDIwIDk0Ml0KL0FzY2VudCA2ODkK
L0NhcEhlaWdodCA2ODkKL0Rlc2NlbnQgLTE5NAovSXRhbGljQW5nbGUgMAovU3RlbVYgNTAKL1hI
ZWlnaHQgNDMwCi9DaGFyU2V0ICgvQS9CL0MvRC9FL0YvRy9IL0kvTC9NL04vTy9QL1IvUy9UL1Uv
Vy9hL2F0L2IvYy9jb2xvbi9jb21tYS9kL2UvZXF1YWwvZi9maS9mbC9mb3VyL2cvZ3JlYXRlci9o
L2h5cGhlbi9pL2ovay9sL2xlc3MvbS9uL25pbmUvby9vbmUvcC9wYXJlbmxlZnQvcGFyZW5yaWdo
dC9wZXJpb2QvcGx1cy9xL3F1b3RlbGVmdC9xdW90ZXJpZ2h0L3Ivcy9zZW1pY29sb24vc2l4L3Ns
YXNoL3QvdGhyZWUvdHdvL3UvdW5kZXJzY29yZS92L3cveC95L3plcm8pCi9Gb250RmlsZSA4MyAw
IFIKPj4gZW5kb2JqCjg1IDAgb2JqIDw8Ci9MZW5ndGgxIDcyMQovTGVuZ3RoMiA4NDcxCi9MZW5n
dGgzIDAKL0xlbmd0aCA5MDQzICAgICAgCi9GaWx0ZXIgL0ZsYXRlRGVjb2RlCj4+CnN0cmVhbQp4
2m12VVRc7bItwV2CS4fG3SG4e3B37W6gcZdAcHdCcHcnjQTXhOCS4O7uEtxu9r/P3mfcO+5YL1Wz
Zo1v1qx6WHRUck6O7to+zhAuNi52TiGglpymChcvLyeQk50HnY5O2hVi4Q51cpSxcIcIAfUgYKAW
xBnIxQ3k5uTkQqcDSjs5+7hCrW3cgYwgpn9AoK69BRjqAHUF6jrZO3lCQTZAEU9PTwlPNw92Vw8x
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
dUt1alBiXG6CyTDfJh2k7ohvdh01UzTZgxNBXrQTmVnNi0OwMnnc3Gl7DaadDmkWi3WaRsHJdxyT
qguHcXbfjDRDP/bUl7Fdf9s1jT5Rozsc59U/5AeFgyCB6VOg3ZU/DDEaj2G44bS4hYLsDwXRZOmX
3BqIgFqI/1c/BPH3RdaaqE82+x0XcoomO5P7IS4aCAWgrzoNHVgTcFGsLo0SZdGsEzZGCwEBJ8qy
lwLCzZq9mAiWmLlQEpbABB5QCZtSExOqyu6WTdUPB04KZbhE9H5mUuePCqWNOW0COoLmglZz0QCz
Ev0ONA3/8amoBbWWr+PdvYY0o4UbAmWGvXldfGrpA4ZBp5b1bxm+8GMQAyR4Nqh3G2W3sNTs48ML
J7uSO0vwOF96PPmaQdND2qaZ9sHot7ELUSvb+L/X8oXLclev/UWci4Ldpxrw7LlLC10XZecLUhq6
9Y220jFxFi/UBzPrJZCJPFaI7JviJX5ma0djrzf1vw8g6dfxHxctry0CQEyz73yi5lldgb/oHbD6
J2DHvnNSdZezvJyCZ532qhraBZj678y0H1vziI/QH/qdRsIvuj9EV4w0U/tx7Osv35Br8BA+ANZf
1von3jHbvEAuBVlkuFZqyjpcAsxxYjYRvxqmd+vJa7Fc+Szw9k7MDi8d+e5hebqgZU3yV3/Rojx3
1RBQXV9r9P0TRqWsFYU7es1bbiqbDMiMm0Ij4Nba2Y4M7Gc20kvFvnibbKQ7mZtCQP4DZIDZrrcg
rc5Frw7EajfiTvnarBrZPn/mcV32/leCG4xRoPV20KxsnbmJHSkuIPm9MxUbfg64VWgy9ibNYIxA
rVx9d1mjDalS+dAqSvuj9uw7I2aFAZWQ69MZM8mW/wOWqpGqCmVuZHN0cmVhbQplbmRvYmoKODYg
MCBvYmogPDwKL1R5cGUgL0ZvbnREZXNjcmlwdG9yCi9Gb250TmFtZSAvWExIWFpXK1NGUk0xNDQw
Ci9GbGFncyA0Ci9Gb250QkJveCBbLTE3OCAtMzE5IDEzNzAgOTQ0XQovQXNjZW50IDY4OQovQ2Fw
SGVpZ2h0IDY4OQovRGVzY2VudCAtMTk0Ci9JdGFsaWNBbmdsZSAwCi9TdGVtViA1MAovWEhlaWdo
dCA0MzAKL0NoYXJTZXQgKC9FL00vYS9kL2UvaS9sL20vbi9zKQovRm9udEZpbGUgODUgMCBSCj4+
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
ZjpaIs4thRBcJdJCDoIELd57DYcwOeVf88pFaWvlq0Bh32FxkuEbFQUZZCTlkCeZZtbHW8NTw7Lk
TnONtvT2pyQhHh2ERRmdZXlUfV3S5OftagekN6/+7OkFoJR9v7wbxgaFIhkrc9deAaAir1ITkj6H
EympkcW+awGt2YKVyOTbQdstmXKcnERxHQlkLHkykhaQcRkr0ug6PhKCeEtuh+jlIIzxrvn5DxG4
wwjd73dzzmw6TLY0Fv6H+yD8yySp+bO+buXjb9u4gpXV368a8aOa7LW/t22jRxohK/VkAmUGuhlu
JpA/m1givQqpSc1EWu4CkYa/CggDciqyGTOKh6gdZ5MI3Pkr2TamwbeYJ9Tz/ESKn+M0E7Mbuas/
pDjrG5aXNvdRC2sFSZ8nasrnV9o1U2E3TbQrqmafF7cd08N1C/NUDVHPXsmeN525dyaFR9n7zhKz
b9yNVVYSXRCdIW0Y0p03St9i6I9LZ8FvQyLqOoV7v8XmOtwPs57/eRKgdDmKwt4sQjlnlZR77Sa4
JsVuqiMnPsYkL7QNIdTa4yT0GxUufWc3ILty8CYpSaSQEK8y4NVXFsW6z6Wpz3nUbu2GxfcmJ0s9
X0WusVZ/e/puVjpWizmacDMD0rcLZdN0Z2Ic6RH3Uir+CUJQeH5B0eYD/yA0iPC3HnyrF9PI5HwP
oY8K+DPgnr3fVv2HdnyyCGvowcWl+of0S63D6Yw9hpUqTDDqoajJqxqOp8txuZ20HQaqhj1MRq3W
be/6drKNfllxaFSqdCGE/w/HrTbvCmVuZHN0cmVhbQplbmRvYmoKODggMCBvYmogPDwKL1R5cGUg
L0ZvbnREZXNjcmlwdG9yCi9Gb250TmFtZSAvRFVNT1FLK1NGUk0yMDc0Ci9GbGFncyA0Ci9Gb250
QkJveCBbLTE3MCAtMzE4IDEzMjIgOTUyXQovQXNjZW50IDY4OQovQ2FwSGVpZ2h0IDY4OQovRGVz
Y2VudCAtMTk0Ci9JdGFsaWNBbmdsZSAwCi9TdGVtViA1MAovWEhlaWdodCA0MzAKL0NoYXJTZXQg
KC9EL2VxdWFsL2h5cGhlbi9uL3kpCi9Gb250RmlsZSA4NyAwIFIKPj4gZW5kb2JqCjg5IDAgb2Jq
IDw8Ci9MZW5ndGgxIDcyMQovTGVuZ3RoMiAxMDY2NwovTGVuZ3RoMyAwCi9MZW5ndGggMTEyNTEg
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
uZmwYDQ+y1XioTzl4lexqhWlefnO1BuzuMBOB1sBjw0sWeeB5ZG2JCt6FBQ3xOHH8ynoyXPzoSvW
9ofDJKKrotJfbw/pz7TFWGZo1vi0eqcC4bdlcFnQ3UfIiFLWOPv7StXXCkI69jxdZtQ83H9gCdY2
BLQdECrd47u5kSLnpIvE/WHCckj+CvEYF3VDm+Es+eY6nQZpEJp97Dq5OkFE5MB6m5v9pLGiNGhQ
cO+2Y/C3KkMC7gN6GlHwXZlbgl2gpzwnJ8HYooOCzZEUQdNRTdGyIlsA6gFpNRU3IZXwc1+dcJkB
cCAqxXqRj5LR48z2qh8e/8txWuBIXk+lLQQpJSvNjinPNpVm1Tj8qaYdplqdZk8qdxvutzv1bdJt
wjSNh/JJgEqYh3mXzQ6MZthKWm88vZsEivgI5Tcad0L/yLahyRImvvCfWagH9/SaOO88Y/8P7tKM
5wplbmRzdHJlYW0KZW5kb2JqCjkwIDAgb2JqIDw8Ci9UeXBlIC9Gb250RGVzY3JpcHRvcgovRm9u
dE5hbWUgL05FSlFUUitTRlJNMjQ4OAovRmxhZ3MgNAovRm9udEJCb3ggWy0xNjcgLTMxNyAxMjk4
IDk1NF0KL0FzY2VudCA2ODkKL0NhcEhlaWdodCA2ODkKL0Rlc2NlbnQgLTE5NAovSXRhbGljQW5n
bGUgMAovU3RlbVYgNTAKL1hIZWlnaHQgNDMwCi9DaGFyU2V0ICgvQS9ML1AvUy9UL2EvYi9kL2Uv
aC9pL2wvbS9vL3Avci9zL3QpCi9Gb250RmlsZSA4OSAwIFIKPj4gZW5kb2JqCjkxIDAgb2JqIDw8
Ci9MZW5ndGgxIDcyNQovTGVuZ3RoMiAzMjg2MwovTGVuZ3RoMyAwCi9MZW5ndGggMzM0MjYgICAg
IAovRmlsdGVyIC9GbGF0ZURlY29kZQo+PgpzdHJlYW0KeNpse2NwZt3WbWzbeWJ0bNt2OuYT23Y6
ttmxbatj27bTsZP7nnPu+W59Vbf2n4kxa4051qzae62qTUEiYW/noubpAGSmZ2Zg4gGoSqipMbMw
MQGYGFjhKChEnYBGLpb2dmJGLkAegCbQFKAKdAAwswD+gTDDUQBE7R08nSzNLVwA1CY0/w4CNGyM
TC1tLZ0AGvY29m6WJhYAPjc3NyE3Z1cGJ1cBhn+KVIFAgIsFEGBmaQMEiCoqaUkrSAKoJRXUAZJA
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
UEljEo/dAfytDkE3gqb4ubj7v5Q01Py1sVLPWeQFbF8ThW6c9M9H6hop5JwLYBQwxjPydNsQM05z
u0lYnKivW5sq2jbOMbRJrBLO8+HQl4qLSuvymb9Qxt932u+opLkLobtkMZTVcVIaw7B9rj0UEfQr
JhI7GkBPPJDAoBFxg/K98AfBc3ihBkEq4Xb7BTISElrir6xdNoS1OLwf3JOdLE+aFV/53wWQYoAM
tAL8OTB4OTIJaWDJmw4HRFAX0JW5OA7srli6OBY6J32fn9EetdswRgU/CwBtDaI89GhgDkqcJ/0y
HvhXqls60OPmfXq+4opS4z8idrGquU3EqalLMfrS8LFs6Ia3gZVLeE90cjPz73W+b7KFFMxuS2UA
qxE4tAtGXyNR/LXdc+10Wy1FVoSL44mDi5ERM4olULKXoFuypinuLA3eqOXsLYLwmLTv/CjQ/Ugh
KVSA/GrjARNWaxHbrNAShgkvoxPc0F76a2pncbRhK+b+Xv8LYjmIe9QNz8UqI5zlgayKs+tTNtgc
CmVuZHN0cmVhbQplbmRvYmoKOTIgMCBvYmogPDwKL1R5cGUgL0ZvbnREZXNjcmlwdG9yCi9Gb250
TmFtZSAvV0JJWUFZK1NGVFQxMjAwCi9GbGFncyA0Ci9Gb250QkJveCBbLTIwMiAtMzYwIDEzNDEg
ODI5XQovQXNjZW50IDYxMQovQ2FwSGVpZ2h0IDYxMQovRGVzY2VudCAtMjIyCi9JdGFsaWNBbmds
ZSAwCi9TdGVtViA1MAovWEhlaWdodCA0MzAKL0NoYXJTZXQgKC9BL0IvQy9FL0YvTC9SL1MvVC9h
L2FtcGVyc2FuZC9hc3Rlcmlzay9iL2JyYWNlbGVmdC9icmFjZXJpZ2h0L2JyYWNrZXRsZWZ0L2Jy
YWNrZXRyaWdodC9jL2NvbG9uL2NvbW1hL2QvZS9lcXVhbC9mL2cvZ3JlYXRlci9oL2h5cGhlbi9p
L2svbC9sZXNzL20vbi9vL29uZS9wL3BhcmVubGVmdC9wYXJlbnJpZ2h0L3BlcmlvZC9xL3F1b3Rl
ZGJsL3F1b3RlcmlnaHQvci9zL3NlbWljb2xvbi9zbGFzaC90L3UvdW5kZXJzY29yZS92L3cveS96
L3plcm8pCi9Gb250RmlsZSA5MSAwIFIKPj4gZW5kb2JqCjY4IDAgb2JqIDw8Ci9UeXBlIC9FbmNv
ZGluZwovRGlmZmVyZW5jZXMgWzI4L2ZpL2ZsIDM0L3F1b3RlZGJsIDM4L2FtcGVyc2FuZC9xdW90
ZXJpZ2h0L3BhcmVubGVmdC9wYXJlbnJpZ2h0L2FzdGVyaXNrL3BsdXMvY29tbWEvaHlwaGVuL3Bl
cmlvZC9zbGFzaC96ZXJvL29uZS90d28vdGhyZWUvZm91ciA1NC9zaXggNTcvbmluZS9jb2xvbi9z
ZW1pY29sb24vbGVzcy9lcXVhbC9ncmVhdGVyIDY0L2F0L0EvQi9DL0QvRS9GL0cvSC9JIDc2L0wv
TS9OL08vUCA4Mi9SL1MvVC9VL1YvVyA5MS9icmFja2V0bGVmdCA5My9icmFja2V0cmlnaHQgOTUv
dW5kZXJzY29yZS9xdW90ZWxlZnQvYS9iL2MvZC9lL2YvZy9oL2kvai9rL2wvbS9uL28vcC9xL3Iv
cy90L3Uvdi93L3gveS96L2JyYWNlbGVmdCAxMjUvYnJhY2VyaWdodF0KPj4gZW5kb2JqCjU1IDAg
b2JqIDw8Ci9UeXBlIC9Gb250Ci9TdWJ0eXBlIC9UeXBlMQovQmFzZUZvbnQgL0dGQVdSRytDTVNZ
MTAKL0ZvbnREZXNjcmlwdG9yIDc4IDAgUgovRmlyc3RDaGFyIDE1Ci9MYXN0Q2hhciAxNQovV2lk
dGhzIDcwIDAgUgo+PiBlbmRvYmoKNDggMCBvYmogPDwKL1R5cGUgL0ZvbnQKL1N1YnR5cGUgL1R5
cGUxCi9CYXNlRm9udCAvQlhUUFpFK1NGQlgxMjAwCi9Gb250RGVzY3JpcHRvciA4MCAwIFIKL0Zp
cnN0Q2hhciAyOAovTGFzdENoYXIgMTE5Ci9XaWR0aHMgNzEgMCBSCi9FbmNvZGluZyA2OCAwIFIK
Pj4gZW5kb2JqCjQ3IDAgb2JqIDw8Ci9UeXBlIC9Gb250Ci9TdWJ0eXBlIC9UeXBlMQovQmFzZUZv
bnQgL1VPUkVMTCtTRkJYMTcyOAovRm9udERlc2NyaXB0b3IgODIgMCBSCi9GaXJzdENoYXIgMjgK
L0xhc3RDaGFyIDExOQovV2lkdGhzIDcyIDAgUgovRW5jb2RpbmcgNjggMCBSCj4+IGVuZG9iago0
NCAwIG9iaiA8PAovVHlwZSAvRm9udAovU3VidHlwZSAvVHlwZTEKL0Jhc2VGb250IC9MQ0JUUlIr
U0ZSTTEyMDAKL0ZvbnREZXNjcmlwdG9yIDg0IDAgUgovRmlyc3RDaGFyIDI4Ci9MYXN0Q2hhciAx
MjEKL1dpZHRocyA3NCAwIFIKL0VuY29kaW5nIDY4IDAgUgo+PiBlbmRvYmoKNDMgMCBvYmogPDwK
L1R5cGUgL0ZvbnQKL1N1YnR5cGUgL1R5cGUxCi9CYXNlRm9udCAvWExIWFpXK1NGUk0xNDQwCi9G
b250RGVzY3JpcHRvciA4NiAwIFIKL0ZpcnN0Q2hhciA2OQovTGFzdENoYXIgMTE1Ci9XaWR0aHMg
NzUgMCBSCi9FbmNvZGluZyA2OCAwIFIKPj4gZW5kb2JqCjQyIDAgb2JqIDw8Ci9UeXBlIC9Gb250
Ci9TdWJ0eXBlIC9UeXBlMQovQmFzZUZvbnQgL0RVTU9RSytTRlJNMjA3NAovRm9udERlc2NyaXB0
b3IgODggMCBSCi9GaXJzdENoYXIgNDUKL0xhc3RDaGFyIDEyMQovV2lkdGhzIDc2IDAgUgovRW5j
b2RpbmcgNjggMCBSCj4+IGVuZG9iago0NSAwIG9iaiA8PAovVHlwZSAvRm9udAovU3VidHlwZSAv
VHlwZTEKL0Jhc2VGb250IC9ORUpRVFIrU0ZSTTI0ODgKL0ZvbnREZXNjcmlwdG9yIDkwIDAgUgov
Rmlyc3RDaGFyIDY1Ci9MYXN0Q2hhciAxMTYKL1dpZHRocyA3MyAwIFIKL0VuY29kaW5nIDY4IDAg
Ugo+PiBlbmRvYmoKNTYgMCBvYmogPDwKL1R5cGUgL0ZvbnQKL1N1YnR5cGUgL1R5cGUxCi9CYXNl
Rm9udCAvV0JJWUFZK1NGVFQxMjAwCi9Gb250RGVzY3JpcHRvciA5MiAwIFIKL0ZpcnN0Q2hhciAz
NAovTGFzdENoYXIgMTI1Ci9XaWR0aHMgNjkgMCBSCi9FbmNvZGluZyA2OCAwIFIKPj4gZW5kb2Jq
CjQ5IDAgb2JqIDw8Ci9UeXBlIC9QYWdlcwovQ291bnQgNAovS2lkcyBbMzAgMCBSIDUyIDAgUiA2
MCAwIFIgNjUgMCBSXQo+PiBlbmRvYmoKOTMgMCBvYmogPDwKL1R5cGUgL091dGxpbmVzCi9GaXJz
dCAzIDAgUgovTGFzdCAyNyAwIFIKL0NvdW50IDcKPj4gZW5kb2JqCjI3IDAgb2JqIDw8Ci9UaXRs
ZSAyOCAwIFIKL0EgMjUgMCBSCi9QYXJlbnQgOTMgMCBSCi9QcmV2IDIzIDAgUgo+PiBlbmRvYmoK
MjMgMCBvYmogPDwKL1RpdGxlIDI0IDAgUgovQSAyMSAwIFIKL1BhcmVudCA5MyAwIFIKL1ByZXYg
MTkgMCBSCi9OZXh0IDI3IDAgUgo+PiBlbmRvYmoKMTkgMCBvYmogPDwKL1RpdGxlIDIwIDAgUgov
QSAxNyAwIFIKL1BhcmVudCA5MyAwIFIKL1ByZXYgMTUgMCBSCi9OZXh0IDIzIDAgUgo+PiBlbmRv
YmoKMTUgMCBvYmogPDwKL1RpdGxlIDE2IDAgUgovQSAxMyAwIFIKL1BhcmVudCA5MyAwIFIKL1By
ZXYgMTEgMCBSCi9OZXh0IDE5IDAgUgo+PiBlbmRvYmoKMTEgMCBvYmogPDwKL1RpdGxlIDEyIDAg
UgovQSA5IDAgUgovUGFyZW50IDkzIDAgUgovUHJldiA3IDAgUgovTmV4dCAxNSAwIFIKPj4gZW5k
b2JqCjcgMCBvYmogPDwKL1RpdGxlIDggMCBSCi9BIDUgMCBSCi9QYXJlbnQgOTMgMCBSCi9QcmV2
IDMgMCBSCi9OZXh0IDExIDAgUgo+PiBlbmRvYmoKMyAwIG9iaiA8PAovVGl0bGUgNCAwIFIKL0Eg
MSAwIFIKL1BhcmVudCA5MyAwIFIKL05leHQgNyAwIFIKPj4gZW5kb2JqCjk0IDAgb2JqIDw8Ci9O
YW1lcyBbKERvYy1TdGFydCkgNDEgMCBSIChwYWdlLjEpIDQwIDAgUiAocGFnZS4yKSA1NCAwIFIg
KHBhZ2UuMykgNjIgMCBSIChwYWdlLjQpIDY3IDAgUiAoc2VjdGlvbiouMSkgNDYgMCBSXQovTGlt
aXRzIFsoRG9jLVN0YXJ0KSAoc2VjdGlvbiouMSldCj4+IGVuZG9iago5NSAwIG9iaiA8PAovTmFt
ZXMgWyhzZWN0aW9uLjEpIDIgMCBSIChzZWN0aW9uLjIpIDYgMCBSIChzZWN0aW9uLjMpIDEwIDAg
UiAoc2VjdGlvbi40KSAxNCAwIFIgKHNlY3Rpb24uNSkgMTggMCBSIChzZWN0aW9uLjYpIDIyIDAg
Ul0KL0xpbWl0cyBbKHNlY3Rpb24uMSkgKHNlY3Rpb24uNildCj4+IGVuZG9iago5NiAwIG9iaiA8
PAovTmFtZXMgWyhzZWN0aW9uLjcpIDI2IDAgUl0KL0xpbWl0cyBbKHNlY3Rpb24uNykgKHNlY3Rp
b24uNyldCj4+IGVuZG9iago5NyAwIG9iaiA8PAovS2lkcyBbOTQgMCBSIDk1IDAgUiA5NiAwIFJd
Ci9MaW1pdHMgWyhEb2MtU3RhcnQpIChzZWN0aW9uLjcpXQo+PiBlbmRvYmoKOTggMCBvYmogPDwK
L0Rlc3RzIDk3IDAgUgo+PiBlbmRvYmoKOTkgMCBvYmogPDwKL1R5cGUgL0NhdGFsb2cKL1BhZ2Vz
IDQ5IDAgUgovT3V0bGluZXMgOTMgMCBSCi9OYW1lcyA5OCAwIFIKL1BhZ2VNb2RlL1VzZU91dGxp
bmVzCi9PcGVuQWN0aW9uIDI5IDAgUgo+PiBlbmRvYmoKMTAwIDAgb2JqIDw8Ci9BdXRob3IoKS9U
aXRsZSgpL1N1YmplY3QoKS9DcmVhdG9yKExhVGVYIHdpdGggaHlwZXJyZWYgcGFja2FnZSkvUHJv
ZHVjZXIocGRmVGVYLTEuNDAuMTApL0tleXdvcmRzKCkKL0NyZWF0aW9uRGF0ZSAoRDoyMDEzMTEw
NjE5MzIyMiswMScwMCcpCi9Nb2REYXRlIChEOjIwMTMxMTA2MTkzMjIyKzAxJzAwJykKL1RyYXBw
ZWQgL0ZhbHNlCi9QVEVYLkZ1bGxiYW5uZXIgKFRoaXMgaXMgcGRmVGVYLCBWZXJzaW9uIDMuMTQx
NTkyNi0xLjQwLjEwLTIuMiAoV2ViMkMgMjAwOSkga3BhdGhzZWEgdmVyc2lvbiA1LjAuMCkKPj4g
ZW5kb2JqCnhyZWYKMCAxMDEKMDAwMDAwMDAwMCA2NTUzNSBmIAowMDAwMDAwMDE1IDAwMDAwIG4g
CjAwMDAwMDI5ODMgMDAwMDAgbiAKMDAwMDE0MDkzNCAwMDAwMCBuIAowMDAwMDAwMDYwIDAwMDAw
IG4gCjAwMDAwMDAwOTAgMDAwMDAgbiAKMDAwMDAwNTI3OSAwMDAwMCBuIAowMDAwMTQwODUxIDAw
MDAwIG4gCjAwMDAwMDAxMzUgMDAwMDAgbiAKMDAwMDAwMDE2MyAwMDAwMCBuIAowMDAwMDA3ODcz
IDAwMDAwIG4gCjAwMDAxNDA3NjYgMDAwMDAgbiAKMDAwMDAwMDIwOCAwMDAwMCBuIAowMDAwMDAw
MjMyIDAwMDAwIG4gCjAwMDAwMDc5MjggMDAwMDAgbiAKMDAwMDE0MDY3OSAwMDAwMCBuIAowMDAw
MDAwMjc4IDAwMDAwIG4gCjAwMDAwMDAzMTkgMDAwMDAgbiAKMDAwMDAwNzk4MyAwMDAwMCBuIAow
MDAwMTQwNTkyIDAwMDAwIG4gCjAwMDAwMDAzNjUgMDAwMDAgbiAKMDAwMDAwMDQwMCAwMDAwMCBu
IAowMDAwMDA5NzQwIDAwMDAwIG4gCjAwMDAxNDA1MDUgMDAwMDAgbiAKMDAwMDAwMDQ0NiAwMDAw
MCBuIAowMDAwMDAwNDg5IDAwMDAwIG4gCjAwMDAwMDk3OTUgMDAwMDAgbiAKMDAwMDE0MDQzMSAw
MDAwMCBuIAowMDAwMDAwNTM1IDAwMDAwIG4gCjAwMDAwMDA1NzAgMDAwMDAgbiAKMDAwMDAwMTU5
OCAwMDAwMCBuIAowMDAwMDAxNzc0IDAwMDAwIG4gCjAwMDAwMDE5MjQgMDAwMDAgbiAKMDAwMDAw
MjA3NCAwMDAwMCBuIAowMDAwMDAyMjI0IDAwMDAwIG4gCjAwMDAwMDIzNzIgMDAwMDAgbiAKMDAw
MDAwMjUyMCAwMDAwMCBuIAowMDAwMDAyNjcwIDAwMDAwIG4gCjAwMDAwMDMwMzYgMDAwMDAgbiAK
MDAwMDAwMDYyMCAwMDAwMCBuIAowMDAwMDAyODIwIDAwMDAwIG4gCjAwMDAwMDI4NzQgMDAwMDAg
biAKMDAwMDEzOTc5OCAwMDAwMCBuIAowMDAwMTM5NjM4IDAwMDAwIG4gCjAwMDAxMzk0NzggMDAw
MDAgbiAKMDAwMDEzOTk1OCAwMDAwMCBuIAowMDAwMDAyOTI5IDAwMDAwIG4gCjAwMDAxMzkzMTgg
MDAwMDAgbiAKMDAwMDEzOTE1OCAwMDAwMCBuIAowMDAwMTQwMjc4IDAwMDAwIG4gCjAwMDAwMDcz
OTQgMDAwMDAgbiAKMDAwMDAwNTMzMyAwMDAwMCBuIAowMDAwMDA1MTEwIDAwMDAwIG4gCjAwMDAw
MDMxNjYgMDAwMDAgbiAKMDAwMDAwNTIyNSAwMDAwMCBuIAowMDAwMTM5MDE4IDAwMDAwIG4gCjAw
MDAxNDAxMTggMDAwMDAgbiAKMDAwMDAwNzYwNyAwMDAwMCBuIAowMDAwMDA5MjIyIDAwMDAwIG4g
CjAwMDAwMDgwMzggMDAwMDAgbiAKMDAwMDAwNzI1MyAwMDAwMCBuIAowMDAwMDA1NDM5IDAwMDAw
IG4gCjAwMDAwMDc4MTkgMDAwMDAgbiAKMDAwMDAwOTQ4NyAwMDAwMCBuIAowMDAwMDA5ODUwIDAw
MDAwIG4gCjAwMDAwMDkwODEgMDAwMDAgbiAKMDAwMDAwODEzMiAwMDAwMCBuIAowMDAwMDA5Njg2
IDAwMDAwIG4gCjAwMDAxMzg2MDEgMDAwMDAgbiAKMDAwMDAwOTk0NCAwMDAwMCBuIAowMDAwMDEw
NTE0IDAwMDAwIG4gCjAwMDAwMTA1MzYgMDAwMDAgbiAKMDAwMDAxMTEwNCAwMDAwMCBuIAowMDAw
MDExNjcyIDAwMDAwIG4gCjAwMDAwMTE5ODYgMDAwMDAgbiAKMDAwMDAxMjU1NSAwMDAwMCBuIAow
MDAwMDEyODM5IDAwMDAwIG4gCjAwMDAwMTMzMDMgMDAwMDAgbiAKMDAwMDAyMDQwOSAwMDAwMCBu
IAowMDAwMDIwNjM0IDAwMDAwIG4gCjAwMDAwMzgxNTkgMDAwMDAgbiAKMDAwMDAzODQ1MCAwMDAw
MCBuIAowMDAwMDUzODA3IDAwMDAwIG4gCjAwMDAwNTQwODUgMDAwMDAgbiAKMDAwMDA3NTg2OCAw
MDAwMCBuIAowMDAwMDc2MzM2IDAwMDAwIG4gCjAwMDAwODU0OTcgMDAwMDAgbiAKMDAwMDA4NTcz
NiAwMDAwMCBuIAowMDAwMDkyNzIxIDAwMDAwIG4gCjAwMDAwOTI5NTkgMDAwMDAgbiAKMDAwMDEw
NDMyOSAwMDAwMCBuIAowMDAwMTA0NTg0IDAwMDAwIG4gCjAwMDAxMzgxMjkgMDAwMDAgbiAKMDAw
MDE0MDM1OCAwMDAwMCBuIAowMDAwMTQxMDA0IDAwMDAwIG4gCjAwMDAxNDExNzMgMDAwMDAgbiAK
MDAwMDE0MTM1MCAwMDAwMCBuIAowMDAwMTQxNDM0IDAwMDAwIG4gCjAwMDAxNDE1MTkgMDAwMDAg
biAKMDAwMDE0MTU1NSAwMDAwMCBuIAowMDAwMTQxNjc4IDAwMDAwIG4gCnRyYWlsZXIKPDwgL1Np
emUgMTAxCi9Sb290IDk5IDAgUgovSW5mbyAxMDAgMCBSCi9JRCBbPEQyM0QyNkNGQjFFMTY3NTQz
NDk3RDQ0RUU1REJFNDk1PiA8RDIzRDI2Q0ZCMUUxNjc1NDM0OTdENDRFRTVEQkU0OTU+XSA+Pgpz
dGFydHhyZWYKMTQxOTk0CiUlRU9GCg==
------=_Part_484_31164119.1383762918599--
.
Author: Nevin Liber <nevin@eviloverlord.com>
Date: Wed, 6 Nov 2013 12:44:26 -0600
Raw View
--001a11c33fd0471cbb04ea868c18
Content-Type: text/plain; charset=ISO-8859-1
On 6 November 2013 12:35, Emil Madsen <sovende@gmail.com> wrote:
I just finished writing the first draft of my first proposal ever.
> And before submitting it, I'd like to discuss the matter at hand, and the
> proposal at this forum.
>
> The proposal is about adding traits, to determine a lambdas return and
> argument type(s) at compile time, to the standard library.
>
How does this work with C++14's polymorphic lambdas?
--
Nevin ":-)" Liber <mailto:nevin@eviloverlord.com> (847) 691-1404
--
---
You received this message because you are subscribed to the Google Groups "ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an email to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
Visit this group at http://groups.google.com/a/isocpp.org/group/std-proposals/.
--001a11c33fd0471cbb04ea868c18
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr">On 6 November 2013 12:35, Emil Madsen <span dir=3D"ltr">&l=
t;<a href=3D"mailto:sovende@gmail.com" target=3D"_blank">sovende@gmail.com<=
/a>></span> wrote:<br><div class=3D"gmail_extra"><div class=3D"gmail_quo=
te"><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">I just finished writing the first draft of my first propos=
al ever.<br>And before submitting it, I'd like to discuss the matter at=
hand, and the proposal at this forum.<br><br>The proposal is about adding =
traits, to determine a lambdas return and argument type(s) at compile time,=
to the standard library.<br clear=3D"all">
</div></blockquote><div><br></div><div>How does this work with C++14's =
polymorphic lambdas? <br></div></div>-- <br>=A0Nevin ":-)" Liber=
=A0 <mailto:<a href=3D"mailto:nevin@eviloverlord.com" target=3D"_blank">=
nevin@eviloverlord.com</a>>=A0 (847) 691-1404
</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 std-proposals+unsubscribe@isocpp.org.<br />
To post to this group, send email to std-proposals@isocpp.org.<br />
Visit this group at <a href=3D"http://groups.google.com/a/isocpp.org/group/=
std-proposals/">http://groups.google.com/a/isocpp.org/group/std-proposals/<=
/a>.<br />
--001a11c33fd0471cbb04ea868c18--
.
Author: Emil Madsen <sovende@gmail.com>
Date: Wed, 6 Nov 2013 10:59:00 -0800 (PST)
Raw View
------=_Part_517_5894222.1383764340714
Content-Type: text/plain; charset=windows-1252
Content-Transfer-Encoding: quoted-printable
On Wednesday, 6 November 2013 19:44:26 UTC+1, Nevin ":-)" Liber wrote:
>
> On 6 November 2013 12:35, Emil Madsen <sov...@gmail.com <javascript:>>wro=
te:
>
> I just finished writing the first draft of my first proposal ever.
>> And before submitting it, I'd like to discuss the matter at hand, and th=
e=20
>> proposal at this forum.
>>
>> The proposal is about adding traits, to determine a lambdas return and=
=20
>> argument type(s) at compile time, to the standard library.
>>
>
> How does this work with C++14's polymorphic lambdas?=20
> --=20
> Nevin ":-)" Liber <mailto:ne...@eviloverlord.com <javascript:>> (847)=
=20
> 691-1404=20
>
My best guess would be, that it has to behave as with overloaded functions,=
=20
that is;
<code>
long overloaded_function(int i);
long overloaded_function(double d);
using traits =3D function_traits<decltype(overloaded_function)>;
</code>
Which yields;
<code>
main.cpp: In function =91int main()=92:
main.cpp:95:56: error: decltype cannot resolve address of overloaded functi=
on
using traits2 =3D function_traits<decltype(functionty)>
^
main.cpp:95:57: error: template argument 1 is invalid
using traits2 =3D function_traits<decltype(functionty)>
</code>
On g++ 4.8, and;
<code>
main.cpp:95:46: error: reference to overloaded function could not be resolv=
ed; did you mean to call it?
using traits2 =3D function_traits<decltype(functionty)>
^~~~~~~~~~
</code>
On clang 3.4.
--=20
---=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
Visit this group at http://groups.google.com/a/isocpp.org/group/std-proposa=
ls/.
------=_Part_517_5894222.1383764340714
Content-Type: text/html; charset=windows-1252
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr">On Wednesday, 6 November 2013 19:44:26 UTC+1, Nevin ":-)" =
Liber wrote:<blockquote class=3D"gmail_quote" style=3D"margin: 0;margin-le=
ft: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"ltr">=
On 6 November 2013 12:35, Emil Madsen <span dir=3D"ltr"><<a href=3D"java=
script:" target=3D"_blank" gdf-obfuscated-mailto=3D"CWwxoTMrVe0J">sov...@gm=
ail.com</a>></span> wrote:<br><div><div class=3D"gmail_quote"><br><block=
quote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc=
solid;padding-left:1ex">
<div dir=3D"ltr">I just finished writing the first draft of my first propos=
al ever.<br>And before submitting it, I'd like to discuss the matter at han=
d, and the proposal at this forum.<br><br>The proposal is about adding trai=
ts, to determine a lambdas return and argument type(s) at compile time, to =
the standard library.<br clear=3D"all">
</div></blockquote><div><br></div><div>How does this work with C++14's poly=
morphic lambdas? <br></div></div>-- <br> Nevin ":-)" Liber <m=
ailto:<a href=3D"javascript:" target=3D"_blank" gdf-obfuscated-mailto=3D"CW=
wxoTMrVe0J">ne...@eviloverlord.com</a><wbr>> (847) 691-1404
</div></div></blockquote><div><br>My best guess would be, that it has to be=
have as with overloaded functions, that is;<br><code><br>long overloa=
ded_function(int i);<br>long overloaded_function(double d);<br><br>using tr=
aits =3D function_traits<decltype(overloaded_function)>;<br></code=
><br>Which yields;<br><code><br><pre class=3D"f0" style=3D"display=
: block; padding: 0; margin: 0;">main.cpp: In function =91int main()=92:</p=
re><pre class=3D"f0" style=3D"display: block; padding: 0px; margin: 0px; cu=
rsor: auto;">main.cpp:95:56: error: decltype cannot resolve address of over=
loaded function</pre><pre class=3D"f0" style=3D"display: block; padding: 0;=
margin: 0;"> using traits2 =3D function_traits<decltype(functionty)=
></pre><pre class=3D"f0" style=3D"display: block; padding: 0; margin: 0;=
"> ^</pre><pre class=
=3D"f0" style=3D"display: block; padding: 0px; margin: 0px; cursor: auto;">=
main.cpp:95:57: error: template argument 1 is invalid</pre><pre class=3D"f0=
" style=3D"display: block; padding: 0; margin: 0;"> using traits2 =3D f=
unction_traits<decltype(functionty)><br></code><br>On g++ 4.8, =
and;<br><code><br>main.cpp:95:46: error: reference to overloaded func=
tion could not be resolved; did you mean to call it?<br>using traits2 =3D f=
unction_traits<decltype(functionty)><br> =
^~~~~~~~~~<br></code><br>On clang 3.4.<br></pre></div></d=
iv>
<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 std-proposals+unsubscribe@isocpp.org.<br />
To post to this group, send email to std-proposals@isocpp.org.<br />
Visit this group at <a href=3D"http://groups.google.com/a/isocpp.org/group/=
std-proposals/">http://groups.google.com/a/isocpp.org/group/std-proposals/<=
/a>.<br />
------=_Part_517_5894222.1383764340714--
.
Author: Emil Madsen <sovende@gmail.com>
Date: Wed, 6 Nov 2013 11:03:22 -0800 (PST)
Raw View
------=_Part_4356_4839583.1383764602771
Content-Type: text/plain; charset=ISO-8859-1
On Wednesday, 6 November 2013 19:44:26 UTC+1, Nevin ":-)" Liber wrote:
>
> On 6 November 2013 12:35, Emil Madsen <sov...@gmail.com <javascript:>>wrote:
>
> I just finished writing the first draft of my first proposal ever.
>> And before submitting it, I'd like to discuss the matter at hand, and the
>> proposal at this forum.
>>
>> The proposal is about adding traits, to determine a lambdas return and
>> argument type(s) at compile time, to the standard library.
>>
>
> How does this work with C++14's polymorphic lambdas?
> --
> Nevin ":-)" Liber <mailto:ne...@eviloverlord.com <javascript:>> (847)
> 691-1404
>
That is, in this case you'll have to specifying exactly which version you
want, by explicitly passing the required templates.
I believe this is a part of the reason why std::function requires you, to
specify return type and parameter type(s) in the template parameter, as
overloaded functions are otherwise ambiguous.
--
---
You received this message because you are subscribed to the Google Groups "ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an email to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
Visit this group at http://groups.google.com/a/isocpp.org/group/std-proposals/.
------=_Part_4356_4839583.1383764602771
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><br>On Wednesday, 6 November 2013 19:44:26 UTC+1, Nevin ":=
-)" Liber wrote:<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">On 6 November 2013 12:35, Emil Madsen <span dir=3D"ltr"><<a href=3D"=
javascript:" target=3D"_blank" gdf-obfuscated-mailto=3D"CWwxoTMrVe0J">sov..=
..@gmail.com</a>></span> wrote:<br><div><div class=3D"gmail_quote"><br><b=
lockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px =
#ccc solid;padding-left:1ex">
<div dir=3D"ltr">I just finished writing the first draft of my first propos=
al ever.<br>And before submitting it, I'd like to discuss the matter at han=
d, and the proposal at this forum.<br><br>The proposal is about adding trai=
ts, to determine a lambdas return and argument type(s) at compile time, to =
the standard library.<br clear=3D"all">
</div></blockquote><div><br></div><div>How does this work with C++14's poly=
morphic lambdas? <br></div></div>-- <br> Nevin ":-)" Liber <m=
ailto:<a href=3D"javascript:" target=3D"_blank" gdf-obfuscated-mailto=3D"CW=
wxoTMrVe0J">ne...@eviloverlord.com</a><wbr>> (847) 691-1404
</div></div></blockquote><div>That is, in this case you'll have to specifyi=
ng exactly which version you want, by explicitly passing the required templ=
ates.<br>I believe this is a part of the reason why std::function requires =
you, to specify return type and parameter type(s) in the template parameter=
, as overloaded functions are otherwise ambiguous.<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 std-proposals+unsubscribe@isocpp.org.<br />
To post to this group, send email to std-proposals@isocpp.org.<br />
Visit this group at <a href=3D"http://groups.google.com/a/isocpp.org/group/=
std-proposals/">http://groups.google.com/a/isocpp.org/group/std-proposals/<=
/a>.<br />
------=_Part_4356_4839583.1383764602771--
.
Author: Nevin Liber <nevin@eviloverlord.com>
Date: Wed, 6 Nov 2013 13:32:56 -0600
Raw View
--047d7b5d64f2b2562104ea87395a
Content-Type: text/plain; charset=ISO-8859-1
On 6 November 2013 13:03, Emil Madsen <sovende@gmail.com> wrote:
> On Wednesday, 6 November 2013 19:44:26 UTC+1, Nevin ":-)" Liber wrote:
>
>>
>> How does this work with C++14's polymorphic lambdas?
>>
>> That is, in this case you'll have to specifying exactly which version you
> want, by explicitly passing the required templates.
>
Unless I'm reading it wrong, function_traits only takes one template
parameter (the lambda), so how exactly do you do that? Could you show us
working code with the following type:
struct PolyStruct
{
template<typename T>
T operator()(T t) { return t; }
};
and I want to call it with an int.
> I believe this is a part of the reason why std::function requires you, to
> specify return type and parameter type(s) in the template parameter, as
> overloaded functions are otherwise ambiguous.
>
In C++14, I fully expect that 90+% of the non-legacy lambdas that are
called with at least one parameter will be declared polymorphically. It
needs to be useable with this (predicted) common case.
--
Nevin ":-)" Liber <mailto:nevin@eviloverlord.com> (847) 691-1404
--
---
You received this message because you are subscribed to the Google Groups "ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an email to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
Visit this group at http://groups.google.com/a/isocpp.org/group/std-proposals/.
--047d7b5d64f2b2562104ea87395a
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr">On 6 November 2013 13:03, Emil Madsen <span dir=3D"ltr">&l=
t;<a href=3D"mailto:sovende@gmail.com" target=3D"_blank">sovende@gmail.com<=
/a>></span> wrote:<br><div class=3D"gmail_extra"><div class=3D"gmail_quo=
te"><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;bor=
der-left:1px solid rgb(204,204,204);padding-left:1ex">
<div dir=3D"ltr"><div class=3D"im">On Wednesday, 6 November 2013 19:44:26 U=
TC+1, Nevin ":-)" Liber wrote:</div><blockquote class=3D"gmail_q=
uote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,2=
04);padding-left:1ex">
<div dir=3D"ltr"><br><div><div class=3D"im"><div class=3D"gmail_quote"><div=
>How does this work with C++14's polymorphic lambdas? <br></div></div><=
br></div></div></div></blockquote><div>That is, in this case you'll hav=
e to specifying exactly which version you want, by explicitly passing the r=
equired templates.<br>
</div></div></blockquote><div><br></div><div>Unless I'm reading it wron=
g, function_traits only takes one template parameter (the lambda), so how e=
xactly do you do that?=A0 Could you show us working code with the following=
type:<br>
<br>struct PolyStruct<br>{<br>=A0=A0=A0 template<typename T><br>=A0=
=A0=A0 T operator()(T t) { return t; }<br>};<br><br></div><div>and I want t=
o call it with an int.<br>=A0</div><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 dir=3D"ltr"><div>I believe this is a part of the reason why std::funct=
ion requires you, to specify return type and parameter type(s) in the templ=
ate parameter, as overloaded functions are otherwise ambiguous.<br></div>
</div></blockquote><div><br></div><div>In C++14, I fully expect that 90+% o=
f the non-legacy lambdas that are called with at least one parameter will b=
e declared polymorphically.=A0 It needs to be useable with this (predicted)=
common case.<br>
</div></div>-- <br>=A0Nevin ":-)" Liber=A0 <mailto:<a href=3D"=
mailto:nevin@eviloverlord.com" target=3D"_blank">nevin@eviloverlord.com</a>=
>=A0 (847) 691-1404
</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 std-proposals+unsubscribe@isocpp.org.<br />
To post to this group, send email to std-proposals@isocpp.org.<br />
Visit this group at <a href=3D"http://groups.google.com/a/isocpp.org/group/=
std-proposals/">http://groups.google.com/a/isocpp.org/group/std-proposals/<=
/a>.<br />
--047d7b5d64f2b2562104ea87395a--
.
Author: mcypark@gmail.com
Date: Wed, 6 Nov 2013 12:37:18 -0800 (PST)
Raw View
------=_Part_3419_20896183.1383770238321
Content-Type: text/plain; charset=ISO-8859-1
I can present a solution that I came up with which is no more than a
sketch, but the general approach is to use SFINAE and specify the known
template arguments in order to force a specialization in the case where the
function is a template.
/* forward declaration */
template <typename Signature>
struct function_traits;
/* Member function. */
template <typename R, typename Class, typename... Args>
struct function_traits<R (Class::*)(Args...)> : public
std::integral_constant<size_t, sizeof...(Args)> {
using return_type = R;
using type = R (Args...);
};
/* Const member function. */
template <typename R, typename Class, typename... Args>
struct function_traits<R (Class::*)(Args...) const> : public
std::integral_constant<size_t, sizeof...(Args)> {
using return_type = R;
using type = R (Args...);
};
/* Takes a callable and a list of 0 or more template parameters to
specialize the template with. */
template <typename Callable, typename... TemplateArgs>
struct callable_traits;
/* Non-templated operator(). */
template <typename Callable>
struct callable_traits<Callable> : public
function_traits<decltype(&Callable::operator())> {};
/* Templated operator(). */
template <typename Callable, typename... TemplateArgs>
struct callable_traits : public
function_traits<decltype(&Callable::template operator()<TemplateArgs...>)>
{};
/* Nevin's PolyStruct class. */
struct PolyStruct {
template <typename T>
T operator()(T t) { return t; }
}; // PolyStruct
/* Convenience type alias for callable_traits<>. */
template <typename Class, typename... TemplateArgs>
using callable_traits_t = typename callable_traits<Class,
TemplateArgs...>::type;
/* Test. */
static_assert(std::is_same<callable_traits_t<PolyStruct, int>, int
(int)>::value, "");
int main() {}
Tested with g++4.7.3 and clang++3.3
On Wednesday, November 6, 2013 11:32:56 AM UTC-8, Nevin ":-)" Liber wrote:
>
> On 6 November 2013 13:03, Emil Madsen <sov...@gmail.com <javascript:>>wrote:
>
>> On Wednesday, 6 November 2013 19:44:26 UTC+1, Nevin ":-)" Liber wrote:
>>
>>>
>>> How does this work with C++14's polymorphic lambdas?
>>>
>>> That is, in this case you'll have to specifying exactly which version
>> you want, by explicitly passing the required templates.
>>
>
> Unless I'm reading it wrong, function_traits only takes one template
> parameter (the lambda), so how exactly do you do that? Could you show us
> working code with the following type:
>
> struct PolyStruct
> {
> template<typename T>
> T operator()(T t) { return t; }
> };
>
> and I want to call it with an int.
>
>
>> I believe this is a part of the reason why std::function requires you, to
>> specify return type and parameter type(s) in the template parameter, as
>> overloaded functions are otherwise ambiguous.
>>
>
> In C++14, I fully expect that 90+% of the non-legacy lambdas that are
> called with at least one parameter will be declared polymorphically. It
> needs to be useable with this (predicted) common case.
> --
> Nevin ":-)" Liber <mailto:ne...@eviloverlord.com <javascript:>> (847)
> 691-1404
>
--
---
You received this message because you are subscribed to the Google Groups "ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an email to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
Visit this group at http://groups.google.com/a/isocpp.org/group/std-proposals/.
------=_Part_3419_20896183.1383770238321
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr">I can present a solution that I came up with which is no m=
ore than a sketch, but the general approach is to use SFINAE and specify th=
e known template arguments in order to force a specialization in the case w=
here the function is a template.<div><br></div><div>/* forward declaration =
*/</div><div>template <typename Signature></div><div>struct function_=
traits;</div><div><br></div><div>/* Member function. */</div><div><div>temp=
late <typename R, typename Class, typename... Args></div><div>struct =
function_traits<R (Class::*)(Args...)> : public std::integral_constan=
t<size_t, sizeof...(Args)> {</div><div><br></div><div> using re=
turn_type =3D R;</div><div><br></div><div> using type =3D R (Args...)=
;</div><div>};</div><div><br></div><div>/* Const member function. */</div><=
div>template <typename R, typename Class, typename... Args></div><div=
>struct function_traits<R (Class::*)(Args...) const> : public std::in=
tegral_constant<size_t, sizeof...(Args)> {</div><div><br></div><div>&=
nbsp; using return_type =3D R;</div><div><br></div><div> using type =
=3D R (Args...);</div><div>};</div><div><br></div><div>/* Takes a callable =
and a list of 0 or more template parameters to specialize the template with=
.. */</div><div>template <typename Callable, typename... TemplateArgs>=
</div><div>struct callable_traits;</div><div><br></div><div>/* Non-template=
d operator(). */</div><div>template <typename Callable></div><div>str=
uct callable_traits<Callable> : public function_traits<decltype(&a=
mp;Callable::operator())> {};</div><div><br></div><div>/* Templated oper=
ator(). */</div><div>template <typename Callable, typename... TemplateAr=
gs></div><div>struct callable_traits : public function_traits<decltyp=
e(&Callable::template operator()<TemplateArgs...>)> {};</div><=
div><br></div><div>/* Nevin's PolyStruct class. */</div><div>struct PolyStr=
uct {</div><div> </div><div> template <typename T></=
div><div> T operator()(T t) { return t; }</div><div><br></div><div>};=
// PolyStruct</div><div><br></div><div>/* Convenience type alias for=
callable_traits<>. */</div><div>template <typename Class, typenam=
e... TemplateArgs></div><div>using callable_traits_t =3D typename callab=
le_traits<Class, TemplateArgs...>::type;</div><div><br></div><div>/* =
Test. */</div><div>static_assert(std::is_same<callable_traits_t<PolyS=
truct, int>, int (int)>::value, "");</div><div><br></div><div>int mai=
n() {}</div><div><br></div><div>Tested with g++4.7.3 and clang++3.3</div><b=
r>On Wednesday, November 6, 2013 11:32:56 AM UTC-8, Nevin ":-)" Liber wrote=
:<blockquote class=3D"gmail_quote" style=3D"margin: 0;margin-left: 0.8ex;bo=
rder-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"ltr">On 6 Novembe=
r 2013 13:03, Emil Madsen <span dir=3D"ltr"><<a href=3D"javascript:" tar=
get=3D"_blank" gdf-obfuscated-mailto=3D"neve3KL6Je0J">sov...@gmail.com</a>&=
gt;</span> wrote:<br><div><div class=3D"gmail_quote"><blockquote class=3D"g=
mail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204=
,204,204);padding-left:1ex">
<div dir=3D"ltr"><div>On Wednesday, 6 November 2013 19:44:26 UTC+1, Nevin "=
:-)" Liber wrote:</div><blockquote class=3D"gmail_quote" style=3D"margin:0=
px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div dir=3D"ltr"><br><div><div><div class=3D"gmail_quote"><div>How does thi=
s work with C++14's polymorphic lambdas? <br></div></div><br></div></div></=
div></blockquote><div>That is, in this case you'll have to specifying exact=
ly which version you want, by explicitly passing the required templates.<br=
>
</div></div></blockquote><div><br></div><div>Unless I'm reading it wrong, f=
unction_traits only takes one template parameter (the lambda), so how exact=
ly do you do that? Could you show us working code with the following =
type:<br>
<br>struct PolyStruct<br>{<br> template<typename T>=
<br> T operator()(T t) { return t; }<br>};<br><br></div><=
div>and I want to call it with an int.<br> </div><blockquote class=3D"=
gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(20=
4,204,204);padding-left:1ex">
<div dir=3D"ltr"><div>I believe this is a part of the reason why std::funct=
ion requires you, to specify return type and parameter type(s) in the templ=
ate parameter, as overloaded functions are otherwise ambiguous.<br></div>
</div></blockquote><div><br></div><div>In C++14, I fully expect that 90+% o=
f the non-legacy lambdas that are called with at least one parameter will b=
e declared polymorphically. It needs to be useable with this (predict=
ed) common case.<br>
</div></div>-- <br> Nevin ":-)" Liber <mailto:<a href=3D"java=
script:" target=3D"_blank" gdf-obfuscated-mailto=3D"neve3KL6Je0J">ne...@evi=
loverlord.com</a><wbr>> (847) 691-1404
</div></div>
</blockquote></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 std-proposals+unsubscribe@isocpp.org.<br />
To post to this group, send email to std-proposals@isocpp.org.<br />
Visit this group at <a href=3D"http://groups.google.com/a/isocpp.org/group/=
std-proposals/">http://groups.google.com/a/isocpp.org/group/std-proposals/<=
/a>.<br />
------=_Part_3419_20896183.1383770238321--
.
Author: Emil Madsen <sovende@gmail.com>
Date: Wed, 6 Nov 2013 12:57:59 -0800 (PST)
Raw View
------=_Part_113_12577767.1383771479247
Content-Type: text/plain; charset=ISO-8859-1
On Wednesday, 6 November 2013 20:32:56 UTC+1, Nevin ":-)" Liber wrote:
>
> On 6 November 2013 13:03, Emil Madsen <sov...@gmail.com <javascript:>>wrote:
>
>> On Wednesday, 6 November 2013 19:44:26 UTC+1, Nevin ":-)" Liber wrote:
>>
>>>
>>> How does this work with C++14's polymorphic lambdas?
>>>
>>> That is, in this case you'll have to specifying exactly which version
>> you want, by explicitly passing the required templates.
>>
>
> Unless I'm reading it wrong, function_traits only takes one template
> parameter (the lambda), so how exactly do you do that? Could you show us
> working code with the following type:
>
> struct PolyStruct
> {
> template<typename T>
> T operator()(T t) { return t; }
> };
>
> and I want to call it with an int.
>
In order to retrieve the function_traits for the int version, of the
PolyStruct;
<code>
using traits = function_traits<decltype(&PolyStruct::operator()<int>)>;
</code>
This will however not be functional with the currently suggested solution,
however it seems 'mcypark' has found an application-able solution.
>
>> I believe this is a part of the reason why std::function requires you, to
>> specify return type and parameter type(s) in the template parameter, as
>> overloaded functions are otherwise ambiguous.
>>
>
> In C++14, I fully expect that 90+% of the non-legacy lambdas that are
> called with at least one parameter will be declared polymorphically. It
> needs to be useable with this (predicted) common case.
>
I fully agree with this!
> --
> Nevin ":-)" Liber <mailto:ne...@eviloverlord.com <javascript:>> (847)
> 691-1404
>
--
---
You received this message because you are subscribed to the Google Groups "ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an email to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
Visit this group at http://groups.google.com/a/isocpp.org/group/std-proposals/.
------=_Part_113_12577767.1383771479247
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr">On Wednesday, 6 November 2013 20:32:56 UTC+1, Nevin ":-)" =
Liber wrote:<blockquote class=3D"gmail_quote" style=3D"margin: 0;margin-le=
ft: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"ltr">=
On 6 November 2013 13:03, Emil Madsen <span dir=3D"ltr"><<a href=3D"java=
script:" target=3D"_blank" gdf-obfuscated-mailto=3D"neve3KL6Je0J">sov...@gm=
ail.com</a>></span> wrote:<br><div><div class=3D"gmail_quote"><blockquot=
e class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px s=
olid rgb(204,204,204);padding-left:1ex">
<div dir=3D"ltr"><div>On Wednesday, 6 November 2013 19:44:26 UTC+1, Nevin "=
:-)" Liber wrote:</div><blockquote class=3D"gmail_quote" style=3D"margin:0=
px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div dir=3D"ltr"><br><div><div><div class=3D"gmail_quote"><div>How does thi=
s work with C++14's polymorphic lambdas? <br></div></div><br></div></div></=
div></blockquote><div>That is, in this case you'll have to specifying exact=
ly which version you want, by explicitly passing the required templates.<br=
>
</div></div></blockquote><div><br></div><div>Unless I'm reading it wrong, f=
unction_traits only takes one template parameter (the lambda), so how exact=
ly do you do that? Could you show us working code with the following =
type:<br>
<br>struct PolyStruct<br>{<br> template<typename T>=
<br> T operator()(T t) { return t; }<br>};<br><br></div><=
div>and I want to call it with an int.<br></div></div></div></div></blockqu=
ote><div>In order to retrieve the function_traits for the int version, of t=
he PolyStruct;<br><code><br></div><div>using traits =3D function_trai=
ts<decltype(&PolyStruct::operator()<int>)>;<br> </c=
ode><br>This will however not be functional with the currently suggested=
solution, however it seems <span name=3D"mcypark@gmail.com" class=3D"gD">'=
mcypark' has found an application-able solution.</span><br><br></div><block=
quote class=3D"gmail_quote" style=3D"margin: 0;margin-left: 0.8ex;border-le=
ft: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"ltr"><div><div class=3D"=
gmail_quote"><div> </div><blockquote class=3D"gmail_quote" style=3D"ma=
rgin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:=
1ex">
<div dir=3D"ltr"><div>I believe this is a part of the reason why std::funct=
ion requires you, to specify return type and parameter type(s) in the templ=
ate parameter, as overloaded functions are otherwise ambiguous.<br></div>
</div></blockquote><div><br></div><div>In C++14, I fully expect that 90+% o=
f the non-legacy lambdas that are called with at least one parameter will b=
e declared polymorphically. It needs to be useable with this (predict=
ed) common case.<br></div></div></div></div></blockquote><div>I fully agree=
with this!<br> <br></div><blockquote class=3D"gmail_quote" style=3D"m=
argin: 0;margin-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"=
><div dir=3D"ltr"><div><div class=3D"gmail_quote"><div>
</div></div>-- <br> Nevin ":-)" Liber <mailto:<a href=3D"java=
script:" target=3D"_blank" gdf-obfuscated-mailto=3D"neve3KL6Je0J">ne...@evi=
loverlord.com</a><wbr>> (847) 691-1404
</div></div>
</blockquote></div>
<p></p>
-- <br />
<br />
--- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" group.<br />
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.<br />
To post to this group, send email to std-proposals@isocpp.org.<br />
Visit this group at <a href=3D"http://groups.google.com/a/isocpp.org/group/=
std-proposals/">http://groups.google.com/a/isocpp.org/group/std-proposals/<=
/a>.<br />
------=_Part_113_12577767.1383771479247--
.
Author: mcypark@gmail.com
Date: Wed, 6 Nov 2013 13:16:50 -0800 (PST)
Raw View
------=_Part_3564_32703339.1383772610735
Content-Type: text/plain; charset=ISO-8859-1
Emil: That would work, however the reason why I didn't suggest it is
because I think Nevin was hinting that PolyStruct is actually the
underlying implementation of the polymorphic lambda.
using traits = function_traits<decltype(&PolyStruct::operator()<int>)>;
Makes it so that we have to get at the operator() ourselves.
If we look at the symmetric case for the non-templated version,
Given, auto lambda = [](int) { return 42; };
We were able to say: function_traits<decltype(lambda)>
As opposed to, function_traits<decltype(&decltype(lambda)::operator())>
I think given a polymorphic lambda like so: auto lambda = [](x) { return x;
}
We should be able to say: function_traits<decltype(lambda), int>
Rather than: function_traits<decltype(&decltype(lambda)::operator()<int>)>
Now, a few other things I considered in introducing the callable_traits<>
is because:
I wanted function_traits<> to take 1 template parameter, Signature, given
function-pointer, pointer-to-member-function, etc.
and callable_traits<> to take a callable and N (N >= 0) template parameters
to pass an operator() to function_traits.
It's a simple sketch and a few considerations that I hope will help your
proposal.
On Wednesday, November 6, 2013 12:57:59 PM UTC-8, Emil Madsen wrote:
>
> On Wednesday, 6 November 2013 20:32:56 UTC+1, Nevin ":-)" Liber wrote:
>>
>> On 6 November 2013 13:03, Emil Madsen <sov...@gmail.com> wrote:
>>
>>> On Wednesday, 6 November 2013 19:44:26 UTC+1, Nevin ":-)" Liber wrote:
>>>
>>>>
>>>> How does this work with C++14's polymorphic lambdas?
>>>>
>>>> That is, in this case you'll have to specifying exactly which version
>>> you want, by explicitly passing the required templates.
>>>
>>
>> Unless I'm reading it wrong, function_traits only takes one template
>> parameter (the lambda), so how exactly do you do that? Could you show us
>> working code with the following type:
>>
>> struct PolyStruct
>> {
>> template<typename T>
>> T operator()(T t) { return t; }
>> };
>>
>> and I want to call it with an int.
>>
> In order to retrieve the function_traits for the int version, of the
> PolyStruct;
> <code>
> using traits = function_traits<decltype(&PolyStruct::operator()<int>)>;
> </code>
> This will however not be functional with the currently suggested solution,
> however it seems 'mcypark' has found an application-able solution.
>
>
>>
>>> I believe this is a part of the reason why std::function requires you,
>>> to specify return type and parameter type(s) in the template parameter, as
>>> overloaded functions are otherwise ambiguous.
>>>
>>
>> In C++14, I fully expect that 90+% of the non-legacy lambdas that are
>> called with at least one parameter will be declared polymorphically. It
>> needs to be useable with this (predicted) common case.
>>
> I fully agree with this!
>
>
>> --
>> Nevin ":-)" Liber <mailto:ne...@eviloverlord.com> (847) 691-1404
>>
>
--
---
You received this message because you are subscribed to the Google Groups "ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an email to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
Visit this group at http://groups.google.com/a/isocpp.org/group/std-proposals/.
------=_Part_3564_32703339.1383772610735
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr">Emil: That would work, however the reason why I didn't sug=
gest it is because I think Nevin was hinting that PolyStruct is actually th=
e underlying implementation of the polymorphic lambda.<div><br></div><div>u=
sing traits =3D function_traits<decltype(&PolyStruct::operator()<=
int>)>;</div><div><br></div><div>Makes it so that we have to get at t=
he operator() ourselves.</div><div>If we look at the symmetric case for the=
non-templated version,</div><div><br></div><div>Given, auto lambda =3D [](=
int) { return 42; };</div><div>We were able to say: function_traits<decl=
type(lambda)></div><div>As opposed to, function_traits<decltype(&=
decltype(lambda)::operator())></div><div><br></div><div>I think given a =
polymorphic lambda like so: auto lambda =3D [](x) { return x; }</div><div>W=
e should be able to say: function_traits<decltype(lambda), int></div>=
<div>Rather than: function_traits<decltype(&decltype(lambda)::operat=
or()<int>)></div><div><br></div><div>Now, a few other things I con=
sidered in introducing the callable_traits<> is because:</div><div><b=
r></div><div>I wanted function_traits<> to take 1 template parameter,=
Signature, given function-pointer, pointer-to-member-function, etc.</div><=
div>and callable_traits<> to take a callable and N (N >=3D 0) temp=
late parameters to pass an operator() to function_traits.</div><div><br></d=
iv><div>It's a simple sketch and a few considerations that I hope will help=
your proposal.</div><div><br>On Wednesday, November 6, 2013 12:57:59 PM UT=
C-8, Emil Madsen wrote:<blockquote class=3D"gmail_quote" style=3D"margin: 0=
;margin-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div di=
r=3D"ltr">On Wednesday, 6 November 2013 20:32:56 UTC+1, Nevin ":-)" Liber =
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 6 Novembe=
r 2013 13:03, Emil Madsen <span dir=3D"ltr"><<a>sov...@gmail.com</a>>=
</span> wrote:<br><div><div class=3D"gmail_quote"><blockquote class=3D"gmai=
l_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,20=
4,204);padding-left:1ex">
<div dir=3D"ltr"><div>On Wednesday, 6 November 2013 19:44:26 UTC+1, Nevin "=
:-)" Liber wrote:</div><blockquote class=3D"gmail_quote" style=3D"margin:0=
px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div dir=3D"ltr"><br><div><div><div class=3D"gmail_quote"><div>How does thi=
s work with C++14's polymorphic lambdas? <br></div></div><br></div></div></=
div></blockquote><div>That is, in this case you'll have to specifying exact=
ly which version you want, by explicitly passing the required templates.<br=
>
</div></div></blockquote><div><br></div><div>Unless I'm reading it wrong, f=
unction_traits only takes one template parameter (the lambda), so how exact=
ly do you do that? Could you show us working code with the following =
type:<br>
<br>struct PolyStruct<br>{<br> template<typename T>=
<br> T operator()(T t) { return t; }<br>};<br><br></div><=
div>and I want to call it with an int.<br></div></div></div></div></blockqu=
ote><div>In order to retrieve the function_traits for the int version, of t=
he PolyStruct;<br><code><br></div><div>using traits =3D function_trai=
ts<decltype(&<wbr>PolyStruct::operator()<int>)>;<br> &=
lt;/code><br>This will however not be functional with the currently sugg=
ested solution, however it seems <span name=3D"mcypark@gmail.com">'mcypark'=
has found an application-able solution.</span><br><br></div><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"><div><div class=3D"gmail_quote">=
<div> </div><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 dir=3D"ltr"><div>I believe this is a part of the reason why std::funct=
ion requires you, to specify return type and parameter type(s) in the templ=
ate parameter, as overloaded functions are otherwise ambiguous.<br></div>
</div></blockquote><div><br></div><div>In C++14, I fully expect that 90+% o=
f the non-legacy lambdas that are called with at least one parameter will b=
e declared polymorphically. It needs to be useable with this (predict=
ed) common case.<br></div></div></div></div></blockquote><div>I fully agree=
with this!<br> <br></div><blockquote class=3D"gmail_quote" style=3D"m=
argin:0;margin-left:0.8ex;border-left:1px #ccc solid;padding-left:1ex"><div=
dir=3D"ltr"><div><div class=3D"gmail_quote"><div>
</div></div>-- <br> Nevin ":-)" Liber <mailto:<a>ne...@evilov=
erlord.com</a><wbr>> (847) 691-1404
</div></div>
</blockquote></div></blockquote></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 std-proposals+unsubscribe@isocpp.org.<br />
To post to this group, send email to std-proposals@isocpp.org.<br />
Visit this group at <a href=3D"http://groups.google.com/a/isocpp.org/group/=
std-proposals/">http://groups.google.com/a/isocpp.org/group/std-proposals/<=
/a>.<br />
------=_Part_3564_32703339.1383772610735--
.
Author: Emil 'Skeen' Madsen <sovende@gmail.com>
Date: Wed, 6 Nov 2013 13:29:48 -0800 (PST)
Raw View
------=_Part_322_13625256.1383773388144
Content-Type: text/plain; charset=ISO-8859-1
On Wednesday, 6 November 2013 22:16:50 UTC+1, mcy...@gmail.com wrote:
>
> Emil: That would work, however the reason why I didn't suggest it is
> because I think Nevin was hinting that PolyStruct is actually the
> underlying implementation of the polymorphic lambda.
>
> using traits = function_traits<decltype(&PolyStruct::operator()<int>)>;
>
> Makes it so that we have to get at the operator() ourselves.
> If we look at the symmetric case for the non-templated version,
>
> Given, auto lambda = [](int) { return 42; };
> We were able to say: function_traits<decltype(lambda)>
> As opposed to, function_traits<decltype(&decltype(lambda)::operator())>
>
>
I think given a polymorphic lambda like so: auto lambda = [](x) { return x;
> }
> We should be able to say: function_traits<decltype(lambda), int>
> Rather than: function_traits<decltype(&decltype(lambda)::operator()<int>)>
>
I agree with this, and I honestly really like your solution better, than
the one I suggested myself.
> Now, a few other things I considered in introducing the callable_traits<>
> is because:
>
> I wanted function_traits<> to take 1 template parameter, Signature, given
> function-pointer, pointer-to-member-function, etc.
> and callable_traits<> to take a callable and N (N >= 0) template
> parameters to pass an operator() to function_traits.
>
> It's a simple sketch and a few considerations that I hope will help your
> proposal.
>
However I came to think about it, maybe what we actually want, is something
more in the style of traits, I'm thinking in the lines of;
<code>
// Yields the Callable's arity
function_arity<Callable>::value
// Test functions for specific arity
template<typename Callable>
struct is_function_unary : std::integral_constant<bool,
function_arity<Callable>::value == 1> {};
template<typename Callable>
struct is_function_binary : std::integral_constant<bool,
function_arity<Callable>::value == 2> {};
template<typename Callable>
struct is_function_ternary : std::integral_constant<bool,
function_arity<Callable>::value == 3> {};
// Check for 'n' arity
template<typename Callable, size_t arity>
struct is_function_nary : std::integral_constant<bool,
function_arity<Callable>::value == arity> {};
// Get types of arguments
function_return<Callable>::type // Yield the Callable's return type
function_arg<N, Callable>::type // Yield the Callable's n'th argument type
</code>
Which may then likely be implemented using the suggested 'callable_traits'
approach, but I honestly believe this would be more in the style of the
current traits.
--
---
You received this message because you are subscribed to the Google Groups "ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an email to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
Visit this group at http://groups.google.com/a/isocpp.org/group/std-proposals/.
------=_Part_322_13625256.1383773388144
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr">On Wednesday, 6 November 2013 22:16:50 UTC+1, mcy...@gmail=
..com wrote:<blockquote class=3D"gmail_quote" style=3D"margin: 0;margin-lef=
t: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"ltr">E=
mil: That would work, however the reason why I didn't suggest it is because=
I think Nevin was hinting that PolyStruct is actually the underlying imple=
mentation of the polymorphic lambda.<div><br></div><div>using traits =3D fu=
nction_traits<decltype(&<wbr>PolyStruct::operator()<int>)>;=
</div><div><br></div><div>Makes it so that we have to get at the operator()=
ourselves.</div><div>If we look at the symmetric case for the non-template=
d version,</div><div><br></div><div>Given, auto lambda =3D [](int) { return=
42; };</div><div>We were able to say: function_traits<decltype(<wbr>lam=
bda)></div><div>As opposed to, function_traits<decltype(&<wbr>dec=
ltype(lambda)::operator())></div><div> </div></div></blockquote><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><div>=
I think given a polymorphic lambda like so: auto lambda =3D [](x) { return =
x; }</div><div>We should be able to say: function_traits<decltype(<wbr>l=
ambda), int></div><div>Rather than: function_traits<decltype(&<wb=
r>decltype(lambda)::operator()<<wbr>int>)></div></div></blockquote=
><div>I agree with this, and I honestly really like your solution better, t=
han the one I suggested myself.<br> </div><blockquote class=3D"gmail_q=
uote" style=3D"margin: 0;margin-left: 0.8ex;border-left: 1px #ccc solid;pad=
ding-left: 1ex;"><div dir=3D"ltr"><div></div><div>Now, a few other things I=
considered in introducing the callable_traits<> is because:</div><di=
v><br></div><div>I wanted function_traits<> to take 1 template parame=
ter, Signature, given function-pointer, pointer-to-member-function, etc.</d=
iv><div>and callable_traits<> to take a callable and N (N >=3D 0) =
template parameters to pass an operator() to function_traits.</div><div><br=
></div><div>It's a simple sketch and a few considerations that I hope will =
help your proposal.</div></div></blockquote><div> <br>However I came t=
o think about it, maybe what we actually want, is something more in the sty=
le of traits, I'm thinking in the lines of;<br><code><br> // Yields t=
he Callable's arity<br>function_arity<Callable>::value<br>// Test fun=
ctions for specific arity<br>template<typename Callable><br>struct is=
_function_unary : std::integral_constant<bool, function_arity<Callabl=
e>::value =3D=3D 1> {};<br>template<typename Callable><br>struc=
t is_function_binary : std::integral_constant<bool, function_arity<Ca=
llable>::value =3D=3D 2> {};<br>template<typename Callable><br>=
struct is_function_ternary : std::integral_constant<bool, function_arity=
<Callable>::value =3D=3D 3> {};<br>// Check for 'n' arity<br>templ=
ate<typename Callable, size_t arity><br>struct is_function_nary : std=
::integral_constant<bool, function_arity<Callable>::value =3D=3D a=
rity> {};<br>// Get types of arguments<br>function_return<Callable>=
;::type // Yield the Callable's return type<br>function_arg<N, Callable&=
gt;::type // Yield the Callable's n'th argument type<br></code><br>Wh=
ich may then likely be implemented using the suggested 'callable_traits' ap=
proach, but I honestly believe this would be more in the style of the curre=
nt traits.<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 std-proposals+unsubscribe@isocpp.org.<br />
To post to this group, send email to std-proposals@isocpp.org.<br />
Visit this group at <a href=3D"http://groups.google.com/a/isocpp.org/group/=
std-proposals/">http://groups.google.com/a/isocpp.org/group/std-proposals/<=
/a>.<br />
------=_Part_322_13625256.1383773388144--
.
Author: Nevin Liber <nevin@eviloverlord.com>
Date: Wed, 6 Nov 2013 15:53:40 -0600
Raw View
--001a1134d2da03c23404ea89315b
Content-Type: text/plain; charset=ISO-8859-1
On 6 November 2013 15:29, Emil 'Skeen' Madsen <sovende@gmail.com> wrote:
>
>
> However I came to think about it, maybe what we actually want, is
> something more in the style of traits, I'm thinking in the lines of;
> <code>
> // Yields the Callable's arity
> function_arity<Callable>::value
>
In general, this is hard:
int foo(int, int = 0);
Is the arity 1 or 2?
Moving to a function object case:
struct PolyStruct2
{
template<typename... Ts>
void operator()(Ts&&... ts) { /* ... */ }
};
Use of such a type trait would be very fragile. If you have something with
exactly one signature, all it takes is adding another signature and the
code breaks.
--
Nevin ":-)" Liber <mailto:nevin@eviloverlord.com> (847) 691-1404
--
---
You received this message because you are subscribed to the Google Groups "ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an email to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
Visit this group at http://groups.google.com/a/isocpp.org/group/std-proposals/.
--001a1134d2da03c23404ea89315b
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr">On 6 November 2013 15:29, Emil 'Skeen' Madsen <spa=
n dir=3D"ltr"><<a href=3D"mailto:sovende@gmail.com" target=3D"_blank">so=
vende@gmail.com</a>></span> wrote:<br><div class=3D"gmail_extra"><div cl=
ass=3D"gmail_quote">
<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
x #ccc solid;padding-left:1ex"><div dir=3D"ltr"><br><div>=A0<br>However I c=
ame to think about it, maybe what we actually want, is something more in th=
e style of traits, I'm thinking in the lines of;<br>
<code><br> // Yields the Callable's arity<br>function_arity<Ca=
llable>::value<br></div></div></blockquote><div><br></div><div>In genera=
l, this is hard:<br><br></div><div>int foo(int, int =3D 0);<br><br></div>
<div>Is the arity 1 or 2?<br><br>Moving to a function object case:<br></div=
><div><br>struct PolyStruct2<br>{<br></div><div>=A0=A0=A0 template<typen=
ame... Ts><br></div><div>=A0=A0=A0 void operator()(Ts&&... ts) {=
/* ... */ }<br>
</div><div>};<br><br></div><div>Use of such a type trait would be very frag=
ile.=A0 If you have something with exactly one signature, all it takes is a=
dding another signature and the code breaks.<br></div></div>-- <br>=A0Nevin=
":-)" Liber=A0 <mailto:<a href=3D"mailto:nevin@eviloverlord.c=
om" target=3D"_blank">nevin@eviloverlord.com</a>>=A0 (847) 691-1404
</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 std-proposals+unsubscribe@isocpp.org.<br />
To post to this group, send email to std-proposals@isocpp.org.<br />
Visit this group at <a href=3D"http://groups.google.com/a/isocpp.org/group/=
std-proposals/">http://groups.google.com/a/isocpp.org/group/std-proposals/<=
/a>.<br />
--001a1134d2da03c23404ea89315b--
.
Author: Emil 'Skeen' Madsen <sovende@gmail.com>
Date: Wed, 6 Nov 2013 14:07:18 -0800 (PST)
Raw View
------=_Part_2681_941071.1383775638087
Content-Type: text/plain; charset=ISO-8859-1
On Wednesday, 6 November 2013 22:53:40 UTC+1, Nevin ":-)" Liber wrote:
>
> On 6 November 2013 15:29, Emil 'Skeen' Madsen <sov...@gmail.com<javascript:>
> > wrote:
>
>>
>> However I came to think about it, maybe what we actually want, is
>> something more in the style of traits, I'm thinking in the lines of;
>> <code>
>> // Yields the Callable's arity
>> function_arity<Callable>::value
>>
>
> In general, this is hard:
>
> int foo(int, int = 0);
>
> Is the arity 1 or 2?
>
'foo' has arity 2,
atleast when dealing with std::function;
<code>
std::function<int(int)> function = foo;
</code>
Yields;
<code>
main.cpp:10:29: error: no viable conversion from 'int (int, int)' to 'std::function<int (int)>'
std::function<int(int)> function = func;
^ ~~~~
</code>
While 'std::function<int(int, int)>' seems to compile.
> Moving to a function object case:
>
> struct PolyStruct2
> {
> template<typename... Ts>
> void operator()(Ts&&... ts) { /* ... */ }
> };
>
> Use of such a type trait would be very fragile. If you have something
> with exactly one signature, all it takes is adding another signature and
> the code breaks.
>
Obviously this trait, should be defined as 'mcypark' did in his snippet,
that is <Callable, Args...> such that one can specify the exact function
they want to get the arity of.
--
---
You received this message because you are subscribed to the Google Groups "ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an email to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
Visit this group at http://groups.google.com/a/isocpp.org/group/std-proposals/.
------=_Part_2681_941071.1383775638087
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr">On Wednesday, 6 November 2013 22:53:40 UTC+1, Nevin ":-)" =
Liber wrote:<blockquote class=3D"gmail_quote" style=3D"margin: 0;margin-le=
ft: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"ltr">=
On 6 November 2013 15:29, Emil 'Skeen' Madsen <span dir=3D"ltr"><<a href=
=3D"javascript:" target=3D"_blank" gdf-obfuscated-mailto=3D"B4BQfO2ppzYJ">s=
ov...@gmail.com</a>></span> wrote:<br><div><div class=3D"gmail_quote">
<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
x #ccc solid;padding-left:1ex"><div dir=3D"ltr"> <br><div>However I ca=
me to think about it, maybe what we actually want, is something more in the=
style of traits, I'm thinking in the lines of;<br>
<code><br> // Yields the Callable's arity<br>function_arity<Callab=
le>::<wbr>value<br></div></div></blockquote><div><br></div><div>In gener=
al, this is hard:<br><br></div><div>int foo(int, int =3D 0);<br><br></div>
<div>Is the arity 1 or 2?<br></div></div></div></div></blockquote><br><div>=
'foo' has arity 2, </div>atleast when dealing with std::function;<br><co=
de><br>std::function<int(int)> function =3D foo;<br></code><=
br>Yields;<br><code><br><pre class=3D"f0" style=3D"display: block; pa=
dding: 0px; margin: 0px; cursor: auto;">main.cpp:10:29: error: no viable co=
nversion from 'int (int, int)' to 'std::function<int (int)>'</pre><pr=
e class=3D"f0" style=3D"display: block; padding: 0; margin: 0;"> std::fu=
nction<int(int)> function =3D func;</pre><pre class=3D"f0" style=3D"d=
isplay: block; padding: 0; margin: 0;"> ^ =
~~~~</pre></code><br>While 'std::function<int(int, int)>' se=
ems to compile.<br><br><blockquote class=3D"gmail_quote" style=3D"margin: 0=
;margin-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div di=
r=3D"ltr"><div><div class=3D"gmail_quote"><div><br>Moving to a function obj=
ect case:<br></div><div><br>struct PolyStruct2<br>{<br></div><div> &nb=
sp; template<typename... Ts><br></div><div> v=
oid operator()(Ts&&... ts) { /* ... */ }<br>
</div><div>};<br><br></div><div>Use of such a type trait would be very frag=
ile. If you have something with exactly one signature, all it takes i=
s adding another signature and the code breaks.<br></div></div></div></div>=
</blockquote><div>Obviously this trait, should be defined as <span class=3D=
"gI"><span class=3D"go">'mcypark' did in his snippet, that is <Callable,=
Args...> such that one can specify the exact </span></span>function the=
y want to get the arity of.<br><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 std-proposals+unsubscribe@isocpp.org.<br />
To post to this group, send email to std-proposals@isocpp.org.<br />
Visit this group at <a href=3D"http://groups.google.com/a/isocpp.org/group/=
std-proposals/">http://groups.google.com/a/isocpp.org/group/std-proposals/<=
/a>.<br />
------=_Part_2681_941071.1383775638087--
.
Author: Nevin Liber <nevin@eviloverlord.com>
Date: Wed, 6 Nov 2013 16:29:07 -0600
Raw View
--001a1134d2dae0ab0f04ea89afce
Content-Type: text/plain; charset=ISO-8859-1
On 6 November 2013 16:07, Emil 'Skeen' Madsen <sovende@gmail.com> wrote:
> On Wednesday, 6 November 2013 22:53:40 UTC+1, Nevin ":-)" Liber wrote:
>
>> On 6 November 2013 15:29, Emil 'Skeen' Madsen <sov...@gmail.com> wrote:
>>
>>>
>>> However I came to think about it, maybe what we actually want, is
>>> something more in the style of traits, I'm thinking in the lines of;
>>> <code>
>>> // Yields the Callable's arity
>>> function_arity<Callable>::value
>>>
>>
>> In general, this is hard:
>>
>> int foo(int, int = 0);
>>
>> Is the arity 1 or 2?
>>
>
> 'foo' has arity 2,
> atleast when dealing with std::function;
> <code>
> std::function<int(int)> function = foo;
> </code>
> Yields;
> <code>
>
> main.cpp:10:29: error: no viable conversion from 'int (int, int)' to 'std::function<int (int)>'
>
>
> std::function<int(int)> function = func;
>
> ^ ~~~~
>
> </code>
> While 'std::function<int(int, int)>' seems to compile.
>
>
>
>> Moving to a function object case:
>>
>> struct PolyStruct2
>> {
>> template<typename... Ts>
>> void operator()(Ts&&... ts) { /* ... */ }
>> };
>>
>> Use of such a type trait would be very fragile. If you have something
>> with exactly one signature, all it takes is adding another signature and
>> the code breaks.
>>
> Obviously this trait, should be defined as 'mcypark' did in his snippet,
> that is <Callable, Args...> such that one can specify the exact function
> they want to get the arity of.
>
If I knew the exact function, I don't need the trait to calculate the
arity!
For many function objects and function, the concept of arity, parameter
type and return type doesn't have a single answer, as those things are
based on how it is being used, not how it has been defined.
I don't want to run into the case where:
struct Unordered
{
// compare
bool operator()(A const&, A const&) const;
};
// and somewhere else in the code
auto arity = function_arity<Unordered>::value;
// Now we go in and add to Unordered:
struct Unordered
{
// compare
bool operator()(A const&, A const&) const;
// compare with other types
template<typename B>
bool operator()(A const&, B const&) const;
template<typename B>
bool operator()(B const&, A const&) const;
// hash
size_t operator()(A const&) const;
};
and now everything which already used the type traits is broken.
This "ambiguity" made things like boost::bind hard to use; I don't want to
exasperate the problem.
--
Nevin ":-)" Liber <mailto:nevin@eviloverlord.com> (847) 691-1404
--
---
You received this message because you are subscribed to the Google Groups "ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an email to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
Visit this group at http://groups.google.com/a/isocpp.org/group/std-proposals/.
--001a1134d2dae0ab0f04ea89afce
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr">On 6 November 2013 16:07, Emil 'Skeen' Madsen <spa=
n dir=3D"ltr"><<a href=3D"mailto:sovende@gmail.com" target=3D"_blank">so=
vende@gmail.com</a>></span> wrote:<br><div class=3D"gmail_extra"><div cl=
ass=3D"gmail_quote">
<blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-=
left:1px solid rgb(204,204,204);padding-left:1ex"><div dir=3D"ltr">On Wedne=
sday, 6 November 2013 22:53:40 UTC+1, Nevin ":-)" Liber wrote:<d=
iv class=3D"im">
<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 dir=3D"ltr">On 6 Nov=
ember 2013 15:29, Emil 'Skeen' Madsen <span dir=3D"ltr"><<a>sov.=
...@gmail.com</a>></span> wrote:<br>
<div><div class=3D"gmail_quote">
<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 dir=3D"ltr">=A0<br><=
div>However I came to think about it, maybe what we actually want, is somet=
hing more in the style of traits, I'm thinking in the lines of;<br>
<code><br> // Yields the Callable's arity<br>function_arity<Ca=
llable>::<u></u>value<br></div></div></blockquote><div><br></div><div>In=
general, this is hard:<br><br></div><div>int foo(int, int =3D 0);<br><br>
</div>
<div>Is the arity 1 or 2?<br></div></div></div></div></blockquote><br></div=
><div>'foo' has arity 2, </div>atleast when dealing with std::funct=
ion;<br><code><br>std::function<int(int)> function =3D foo;<br>
</code><br>Yields;<br><code><br><pre style=3D"display:block;pad=
ding:0px;margin:0px">main.cpp:10:29: error: no viable conversion from '=
int (int, int)' to 'std::function<int (int)>'</pre><pre s=
tyle=3D"display:block;padding:0px;margin:0px">
std::function<int(int)> function =3D func;</pre><pre style=3D"dis=
play:block;padding:0px;margin:0px"> ^ ~=
~~~</pre></code><br>While 'std::function<int(int, int)>'=
; seems to compile.<div class=3D"im">
<br><br><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 dir=3D"ltr">=
<div><div class=3D"gmail_quote"><div><br>Moving to a function object case:<=
br>
</div>
<div><br>struct PolyStruct2<br>{<br></div><div>=A0=A0=A0 template<typena=
me... Ts><br></div><div>=A0=A0=A0 void operator()(Ts&&... ts) { =
/* ... */ }<br>
</div><div>};<br><br></div><div>Use of such a type trait would be very frag=
ile.=A0 If you have something with exactly one signature, all it takes is a=
dding another signature and the code breaks.<br></div></div></div></div>
</blockquote></div><div>Obviously this trait, should be defined as <span><s=
pan>'mcypark' did in his snippet, that is <Callable, Args...>=
such that one can specify the exact </span></span>function they want to ge=
t the arity of.<br>
</div></div></blockquote><div><br></div><div>If I knew the exact function, =
I don't need the trait to calculate the arity! <br></div><div><br></div=
><div>For many function objects and function, the concept of arity, paramet=
er type and return type doesn't have a single answer, as those things a=
re based on how it is being used, not how it has been defined.<br>
<br></div><div>I don't want to run into the case where:<br><br></div><d=
iv>struct Unordered<br>{<br></div><div>=A0=A0=A0 // compare<br></div><div>=
=A0=A0=A0 bool operator()(A const&, A const&) const;<br></div><div>=
};<br><br>
</div><div>// and somewhere else in the code<br></div><div>auto arity =3D f=
unction_arity<Unordered>::value;<br><br></div><div>// Now we go in an=
d add to Unordered:<br><br></div><div>struct Unordered<br>{<br><div>=A0=A0=
=A0 // compare<br>
</div>=A0=A0=A0 bool operator()(A const&, A const&) const;<br><br><=
/div><div>=A0=A0=A0 // compare with other types<br></div><div>=A0=A0=A0 tem=
plate<typename B><br></div><div>=A0=A0=A0 bool operator()(A const&=
;, B const&) const;<br>
<br></div><div>=A0=A0=A0 template<typename B><br></div><div>=A0=A0=A0=
bool operator()(B const&, A const&) const;<br><br></div><div>=A0=
=A0=A0 // hash<br></div><div>=A0=A0=A0 size_t operator()(A const&) cons=
t;<br></div><div>};<br>
<br></div><div>and now everything which already used the type traits is bro=
ken.<br><br><br></div><div>This "ambiguity" made things like boos=
t::bind hard to use; I don't want to exasperate the problem.<br></div>
</div>-- <br>=A0Nevin ":-)" Liber=A0 <mailto:<a href=3D"mailto=
:nevin@eviloverlord.com" target=3D"_blank">nevin@eviloverlord.com</a>>=
=A0 (847) 691-1404
</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 std-proposals+unsubscribe@isocpp.org.<br />
To post to this group, send email to std-proposals@isocpp.org.<br />
Visit this group at <a href=3D"http://groups.google.com/a/isocpp.org/group/=
std-proposals/">http://groups.google.com/a/isocpp.org/group/std-proposals/<=
/a>.<br />
--001a1134d2dae0ab0f04ea89afce--
.
Author: Emil 'Skeen' Madsen <sovende@gmail.com>
Date: Wed, 6 Nov 2013 15:19:05 -0800 (PST)
Raw View
------=_Part_4612_29928938.1383779945723
Content-Type: text/plain; charset=windows-1252
Content-Transfer-Encoding: quoted-printable
On Wednesday, 6 November 2013 23:29:07 UTC+1, Nevin ":-)" Liber wrote:
>
> On 6 November 2013 16:07, Emil 'Skeen' Madsen <sov...@gmail.com<javascrip=
t:>
> > wrote:
>
>> On Wednesday, 6 November 2013 22:53:40 UTC+1, Nevin ":-)" Liber wrote:
>>
>>> On 6 November 2013 15:29, Emil 'Skeen' Madsen <sov...@gmail.com> wrote:
>>> =20
>>>> =20
>>>> However I came to think about it, maybe what we actually want, is=20
>>>> something more in the style of traits, I'm thinking in the lines of;
>>>> <code>
>>>> // Yields the Callable's arity
>>>> function_arity<Callable>::**value
>>>>
>>>
>>> In general, this is hard:
>>>
>>> int foo(int, int =3D 0);
>>>
>>> Is the arity 1 or 2?
>>>
>>
>> 'foo' has arity 2,=20
>> atleast when dealing with std::function;
>> <code>
>> std::function<int(int)> function =3D foo;
>> </code>
>> Yields;
>> <code>
>>
>> main.cpp:10:29: error: no viable conversion from 'int (int, int)' to 'st=
d::function<int (int)>'
>>
>> std::function<int(int)> function =3D func;
>>
>> ^ ~~~~
>>
>> </code>
>> While 'std::function<int(int, int)>' seems to compile.
>>
>>
>>
>>> Moving to a function object case:
>>> =20
>>> struct PolyStruct2
>>> {
>>> template<typename... Ts>
>>> void operator()(Ts&&... ts) { /* ... */ }
>>> };
>>>
>>> Use of such a type trait would be very fragile. If you have something=
=20
>>> with exactly one signature, all it takes is adding another signature an=
d=20
>>> the code breaks.
>>>
>> Obviously this trait, should be defined as 'mcypark' did in his snippet,=
=20
>> that is <Callable, Args...> such that one can specify the exact function=
=20
>> they want to get the arity of.
>>
>
> If I knew the exact function, I don't need the trait to calculate the=20
> arity!=20
>
I'm considering the case, where you pass a specific function/lambda to a=20
templated function, which may accept it unrestricted and then need to dig=
=20
out that information again.
=20
> For many function objects and function, the concept of arity, parameter=
=20
> type and return type doesn't have a single answer, as those things are=20
> based on how it is being used, not how it has been defined.
>
> I don't want to run into the case where:
>
> struct Unordered
> {
> // compare
> bool operator()(A const&, A const&) const;
> };
>
> // and somewhere else in the code
> auto arity =3D function_arity<Unordered>::value;
>
> // Now we go in and add to Unordered:
>
> struct Unordered
> {
> // compare
> bool operator()(A const&, A const&) const;
>
> // compare with other types
> template<typename B>
> bool operator()(A const&, B const&) const;
>
> template<typename B>
> bool operator()(B const&, A const&) const;
>
> // hash
> size_t operator()(A const&) const;
> };
>
> and now everything which already used the type traits is broken.
>
I'm going to make a semi bold statement, which is this;
Given the following struct;
<code>
struct magic_functions
{
static void func(double d)
{
std::cout << "double";
}
}
</code>
And call code which does simply invokes "func(2)". Then adding a function;
<code>
static void func(int d)
{
std::cout << "int";
}
</code>
To the struct, may break the callee's code, likely not in this case, but=20
assuming 'func' did something.
My point being, that whenever you overload something, then you possibly=20
change the semantics and behavior for the callee.
I know that there's a huge difference between a subtle change in semantics=
=20
and a compiler error.
Also what you code does is reasonable, and would be something to support.
>
> This "ambiguity" made things like boost::bind hard to use; I don't want t=
o=20
> exasperate the problem.
>
Also, I believe the way that std::bind avoids this ambiguity, is to allow=
=20
you to specify the exact function you want.
<code>
int my_divide(int, int);
int my_divide(double, double);
int main()
{
// error: no matching function for call to =91bind(<unresolved overload=
ed=20
function type>, int, int)=92
auto callable =3D std::bind(my_divide,10,2);
}
</code>
Where the solution, is to call bind with template arguments to specify=20
which version you want.
This is the exact solution that I'm suggesting for the exact same problem,=
=20
in lambda_traits.
Also when using bind, without the explicit template specification adding an=
=20
overload may indeed incur a compiler error at callee.
--=20
---=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
Visit this group at http://groups.google.com/a/isocpp.org/group/std-proposa=
ls/.
------=_Part_4612_29928938.1383779945723
Content-Type: text/html; charset=windows-1252
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr">On Wednesday, 6 November 2013 23:29:07 UTC+1, Nevin ":-)" =
Liber wrote:<blockquote class=3D"gmail_quote" style=3D"margin: 0;margin-le=
ft: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"ltr">=
On 6 November 2013 16:07, Emil 'Skeen' Madsen <span dir=3D"ltr"><<a href=
=3D"javascript:" target=3D"_blank" gdf-obfuscated-mailto=3D"AgyVO_3KtvMJ">s=
ov...@gmail.com</a>></span> wrote:<br><div><div class=3D"gmail_quote">
<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 dir=3D"ltr">On Wedne=
sday, 6 November 2013 22:53:40 UTC+1, Nevin ":-)" Liber wrote:<div>
<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 dir=3D"ltr">On 6 Nov=
ember 2013 15:29, Emil 'Skeen' Madsen <span dir=3D"ltr"><<a>sov...@gmail=
..com</a>></span> wrote:<br>
<div><div class=3D"gmail_quote">
<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 dir=3D"ltr"> <b=
r><div>However I came to think about it, maybe what we actually want, is so=
mething more in the style of traits, I'm thinking in the lines of;<br>
<code><br> // Yields the Callable's arity<br>function_arity<Callab=
le>::<u></u>valu<wbr>e<br></div></div></blockquote><div><br></div><div>I=
n general, this is hard:<br><br></div><div>int foo(int, int =3D 0);<br><br>
</div>
<div>Is the arity 1 or 2?<br></div></div></div></div></blockquote><br></div=
><div>'foo' has arity 2, </div>atleast when dealing with std::function;<br>=
<code><br>std::function<int(int)> function =3D foo;<br>
</code><br>Yields;<br><code><br><pre style=3D"display:block;pad=
ding:0px;margin:0px">main.cpp:10:29: error: no viable conversion from 'int =
(int, int)' to 'std::function<int (int)>'</pre><pre style=3D"display:=
block;padding:0px;margin:0px"> std::function<int(int)> function =
=3D func;</pre><pre style=3D"display:block;padding:0px;margin:0px"> =
^ ~~~~</pre></code><br>While 'std::funct=
ion<int(int, int)>' seems to compile.<div>
<br><br><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 dir=3D"ltr">=
<div><div class=3D"gmail_quote"><div><br>Moving to a function object case:<=
br>
</div>
<div><br>struct PolyStruct2<br>{<br></div><div> template&=
lt;typename... Ts><br></div><div> void operator()(Ts&a=
mp;&... ts) { /* ... */ }<br>
</div><div>};<br><br></div><div>Use of such a type trait would be very frag=
ile. If you have something with exactly one signature, all it takes i=
s adding another signature and the code breaks.<br></div></div></div></div>
</blockquote></div><div>Obviously this trait, should be defined as <span><s=
pan>'mcypark' did in his snippet, that is <Callable, Args...> such th=
at one can specify the exact </span></span>function they want to get the ar=
ity of.<br>
</div></div></blockquote><div><br></div><div>If I knew the exact function, =
I don't need the trait to calculate the arity! <br></div></div></div></div>=
</blockquote><div>I'm considering the case, where you pass a specific funct=
ion/lambda to a templated function, which may accept it unrestricted and th=
en need to dig out that information again.<br> </div><blockquote class=
=3D"gmail_quote" style=3D"margin: 0;margin-left: 0.8ex;border-left: 1px #cc=
c solid;padding-left: 1ex;"><div dir=3D"ltr"><div><div class=3D"gmail_quote=
"><div></div><div>For many function objects and function, the concept of ar=
ity, parameter type and return type doesn't have a single answer, as those =
things are based on how it is being used, not how it has been defined.<br>
<br></div><div>I don't want to run into the case where:<br><br></div><div>s=
truct Unordered<br>{<br></div><div> // compare<br></div><=
div> bool operator()(A const&, A const&) const;<b=
r></div><div>};<br><br>
</div><div>// and somewhere else in the code<br></div><div>auto arity =3D f=
unction_arity<Unordered>::<wbr>value;<br><br></div><div>// Now we go =
in and add to Unordered:<br><br></div><div>struct Unordered<br>{<br><div>&n=
bsp; // compare<br>
</div> bool operator()(A const&, A const&) const;=
<br><br></div><div> // compare with other types<br></div>=
<div> template<typename B><br></div><div> &nbs=
p; bool operator()(A const&, B const&) const;<br>
<br></div><div> template<typename B><br></div><div>=
bool operator()(B const&, A const&) const;<br><b=
r></div><div> // hash<br></div><div> si=
ze_t operator()(A const&) const;<br></div><div>};<br>
<br></div><div>and now everything which already used the type traits is bro=
ken.<br></div></div></div></div></blockquote><div>I'm going to make a semi =
bold statement, which is this;<br>Given the following struct;<br><code&g=
t;<br>struct magic_functions<br>{<br> static void func(do=
uble d)<br> {<br> &nbs=
p; std::cout << "double";<br> }<br>}<br></code&g=
t;<br>And call code which does simply invokes "func(2)". Then adding a func=
tion;<br><code><br>static void func(int d)<br>{<br> =
std::cout << "int";<br>}<br></code><br>To the struct, may brea=
k the callee's code, likely not in this case, but assuming 'func' did somet=
hing.<br><br>My point being, that whenever you overload something, then you=
possibly change the semantics and behavior for the callee.<br>I know that =
there's a huge difference between a subtle change in semantics and a compil=
er error.<br>Also what you code does is reasonable, and would be something =
to support.<br></div><blockquote class=3D"gmail_quote" style=3D"margin: 0;m=
argin-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=
=3D"ltr"><div><div class=3D"gmail_quote"><div><br></div><div>This "ambiguit=
y" made things like boost::bind hard to use; I don't want to exasperate the=
problem.<br></div></div></div></div></blockquote><div>Also, I believe the =
way that std::bind avoids this ambiguity, is to allow you to specify the ex=
act function you want.<br><code><br>int my_divide(int, int);<br>int m=
y_divide(double, double);<br><br>int main()<br>{<br> // e=
rror: no matching function for call to =91bind(<unresolved overloaded fu=
nction type>, int, int)=92<br> auto callable =3D std::=
bind(my_divide,10,2);<br>}<br></code><br>Where the solution, is to ca=
ll bind with template arguments to specify which version you want.<br>This =
is the exact solution that I'm suggesting for the exact same problem, in la=
mbda_traits.<br>Also when using bind, without the explicit template specifi=
cation adding an overload may indeed incur a compiler error at callee.<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 std-proposals+unsubscribe@isocpp.org.<br />
To post to this group, send email to std-proposals@isocpp.org.<br />
Visit this group at <a href=3D"http://groups.google.com/a/isocpp.org/group/=
std-proposals/">http://groups.google.com/a/isocpp.org/group/std-proposals/<=
/a>.<br />
------=_Part_4612_29928938.1383779945723--
.
Author: Nevin Liber <nevin@eviloverlord.com>
Date: Wed, 6 Nov 2013 17:35:34 -0600
Raw View
--001a1134d2da6c908604ea8a9d26
Content-Type: text/plain; charset=windows-1252
Content-Transfer-Encoding: quoted-printable
On 6 November 2013 17:19, Emil 'Skeen' Madsen <sovende@gmail.com> wrote:
>
>
>> and now everything which already used the type traits is broken.
>>
> I'm going to make a semi bold statement, which is this;
> Given the following struct;
> <code>
> struct magic_functions
> {
> static void func(double d)
> {
> std::cout << "double";
> }
> }
> </code>
> And call code which does simply invokes "func(2)". Then adding a function=
;
> <code>
> static void func(int d)
> {
> std::cout << "int";
> }
> </code>
> To the struct, may break the callee's code, likely not in this case, but
> assuming 'func' did something.
>
Implicit conversions are a problem, and we tend to try and find ways to not
exasperate it. IIRC, that was one of the motivations behind nullptr_t.
> My point being, that whenever you overload something, then you possibly
> change the semantics and behavior for the callee.
>
I really don't want a type trait where passing a type with overloaded
functions is bad. It isn't terribly useful in generic constructs (one of
your motivating cases).
>
> int my_divide(int, int);
> int my_divide(double, double);
>
> int main()
> {
> // error: no matching function for call to =91bind(<unresolved
> overloaded function type>, int, int)=92
> auto callable =3D std::bind(my_divide,10,2);
> }
> </code>
> Where the solution, is to call bind with template arguments to specify
> which version you want.
>
Why don't you show that code? Hint: it's a pretty horrible cast that I
wouldn't want to inflict on anyone. It's one of the prime motivating cases
for using lambdas over std::bind. Syntax matters.
--=20
Nevin ":-)" Liber <mailto:nevin@eviloverlord.com> (847) 691-1404
--=20
---=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
Visit this group at http://groups.google.com/a/isocpp.org/group/std-proposa=
ls/.
--001a1134d2da6c908604ea8a9d26
Content-Type: text/html; charset=windows-1252
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr">On 6 November 2013 17:19, Emil 'Skeen' Madsen <spa=
n dir=3D"ltr"><<a href=3D"mailto:sovende@gmail.com" target=3D"_blank">so=
vende@gmail.com</a>></span> wrote:<br><div class=3D"gmail_extra"><div cl=
ass=3D"gmail_quote">
<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
x #ccc solid;padding-left:1ex"><div dir=3D"ltr"><br><div class=3D"im"><bloc=
kquote class=3D"gmail_quote" style=3D"margin:0;margin-left:0.8ex;border-lef=
t:1px #ccc solid;padding-left:1ex">
<div dir=3D"ltr"><div><div class=3D"gmail_quote"><div></div><br><div>and no=
w everything which already used the type traits is broken.<br></div></div><=
/div></div></blockquote></div><div>I'm going to make a semi bold statem=
ent, which is this;<br>
Given the following struct;<br><code><br>struct magic_functions<br>{<=
br>=A0=A0=A0 static void func(double d)<br>=A0=A0=A0 {<br>=A0=A0=A0=A0=A0=
=A0=A0 std::cout << "double";<br>=A0=A0=A0 }<br>}<br></c=
ode><br>And call code which does simply invokes "func(2)". The=
n adding a function;<br>
<code><br>static void func(int d)<br>{<br>=A0=A0=A0 std::cout <<=
; "int";<br>}<br></code><br>To the struct, may break the ca=
llee's code, likely not in this case, but assuming 'func' did s=
omething.<br>
</div></div></blockquote><div><br></div><div>Implicit conversions are a pro=
blem, and we tend to try and find ways to not exasperate it.=A0 IIRC, that =
was one of the motivations behind nullptr_t.<br></div><div>=A0</div><blockq=
uote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc =
solid;padding-left:1ex">
<div dir=3D"ltr"><div>My point being, that whenever you overload something,=
then you possibly change the semantics and behavior for the callee.<br></d=
iv></div></blockquote><div><br></div><div>I really don't want a type tr=
ait where passing a type with overloaded functions is bad.=A0 It isn't =
terribly useful in generic constructs (one of your motivating cases).<br>
</div><div>=A0</div><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><di=
v>int my_divide(int, int);<br>int my_divide(double, double);<br><br>int mai=
n()<br>
{<br>=A0=A0=A0 // error: no matching function for call to =91bind(<unres=
olved overloaded function type>, int, int)=92<br>=A0=A0=A0 auto callable=
=3D std::bind(my_divide,10,2);<br>}<br></code><br>Where the solution=
, is to call bind with template arguments to specify which version you want=
..<br>
</div></div></blockquote><div><br></div><div>Why don't you show that co=
de?=A0 Hint:=A0 it's a pretty horrible cast that I wouldn't want to=
inflict on anyone.=A0 It's one of the prime motivating cases for using=
lambdas over std::bind.=A0 Syntax matters.<br>
</div></div>-- <br>=A0Nevin ":-)" Liber=A0 <mailto:<a href=3D"=
mailto:nevin@eviloverlord.com" target=3D"_blank">nevin@eviloverlord.com</a>=
>=A0 (847) 691-1404
</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 std-proposals+unsubscribe@isocpp.org.<br />
To post to this group, send email to std-proposals@isocpp.org.<br />
Visit this group at <a href=3D"http://groups.google.com/a/isocpp.org/group/=
std-proposals/">http://groups.google.com/a/isocpp.org/group/std-proposals/<=
/a>.<br />
--001a1134d2da6c908604ea8a9d26--
.
Author: Jeffrey Yasskin <jyasskin@google.com>
Date: Wed, 6 Nov 2013 17:38:16 -0800
Raw View
Have you seen http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3729.html?
On Wed, Nov 6, 2013 at 10:35 AM, Emil Madsen <sovende@gmail.com> wrote:
> I just finished writing the first draft of my first proposal ever.
> And before submitting it, I'd like to discuss the matter at hand, and the
> proposal at this forum.
>
> The proposal is about adding traits, to determine a lambdas return and
> argument type(s) at compile time, to the standard library.
>
> Have a look,
> I'm open to all kinds of criticism and feedback :)
>
> // Emil 'Skeen' Madsen.
>
> --
>
> ---
> You received this message because you are subscribed to the Google Groups
> "ISO C++ Standard - Future Proposals" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to std-proposals+unsubscribe@isocpp.org.
> To post to this group, send email to std-proposals@isocpp.org.
> Visit this group at
> http://groups.google.com/a/isocpp.org/group/std-proposals/.
--
---
You received this message because you are subscribed to the Google Groups "ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an email to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
Visit this group at http://groups.google.com/a/isocpp.org/group/std-proposals/.
.
Author: Emil 'Skeen' Madsen <sovende@gmail.com>
Date: Mon, 11 Nov 2013 05:32:23 -0800 (PST)
Raw View
------=_Part_722_10762768.1384176743135
Content-Type: text/plain; charset=windows-1252
Content-Transfer-Encoding: quoted-printable
On Thursday, 7 November 2013 00:35:34 UTC+1, Nevin ":-)" Liber wrote:
>
> On 6 November 2013 17:19, Emil 'Skeen' Madsen <sov...@gmail.com<javascrip=
t:>
> > wrote:
>
>>
>>
>>> and now everything which already used the type traits is broken.
>>>
>> I'm going to make a semi bold statement, which is this;
>> Given the following struct;
>> <code>
>> struct magic_functions
>> {
>> static void func(double d)
>> {
>> std::cout << "double";
>> }
>> }
>> </code>
>> And call code which does simply invokes "func(2)". Then adding a functio=
n;
>> <code>
>> static void func(int d)
>> {
>> std::cout << "int";
>> }
>> </code>
>> To the struct, may break the callee's code, likely not in this case, but=
=20
>> assuming 'func' did something.
>>
>
> Implicit conversions are a problem, and we tend to try and find ways to=
=20
> not exasperate it. IIRC, that was one of the motivations behind nullptr_=
t.
> =20
>
>> My point being, that whenever you overload something, then you possibly=
=20
>> change the semantics and behavior for the callee.
>>
>
> I really don't want a type trait where passing a type with overloaded=20
> functions is bad. It isn't terribly useful in generic constructs (one of=
=20
> your motivating cases).
>
I wouldn't say that it's bad, just that you'll have to specify which=20
overload you like, because honestly if you don't, how am I as a programmer=
=20
supposed to know which overload you meant to get the arity, ect. off? - And=
=20
how is the compiler supposed to know?
As for the usefulness in generic constructs, I do believe it's useful,=20
you'll just have to pass the explicit template parameters to the generic=20
function, which makes use of the lambda traits, that is, you bump up the=20
responsibility to make it work, also this is only needed when you use=20
overloaded functions. Also without it, how am I as the maintainer supposed=
=20
to know which overload you're referring to?
Also I'd rather have lambda/function traits with the need for specifying=20
which function you meant, whenever you're dealing with overloading, than=20
not having them at all.
=20
> =20
>
>>
>> int my_divide(int, int);
>> int my_divide(double, double);
>>
>> int main()
>> {
>> // error: no matching function for call to =91bind(<unresolved=20
>> overloaded function type>, int, int)=92
>> auto callable =3D std::bind(my_divide,10,2);
>> }
>> </code>
>> Where the solution, is to call bind with template arguments to specify=
=20
>> which version you want.
>>
>
> Why don't you show that code? Hint: it's a pretty horrible cast that I=
=20
> wouldn't want to inflict on anyone. It's one of the prime motivating cas=
es=20
> for using lambdas over std::bind. Syntax matters.
>
I can show you that code, and it does not require a horrible cast, all it=
=20
requires is an explicit template specification;
<code>
int main()
{
auto callable =3D std::bind<int(int,int)>(my_divide,10,2);
}
</code>
And I honestly don't mind requiring the programmer to tell the maintainer=
=20
(and the compiler), which version we're referring to. Also I do truly agree=
=20
that syntax matters a lot, but I'd rather have lousy syntax and be able to=
=20
solve my issue, than not being able to solve it at all.
--=20
---=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
Visit this group at http://groups.google.com/a/isocpp.org/group/std-proposa=
ls/.
------=_Part_722_10762768.1384176743135
Content-Type: text/html; charset=windows-1252
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr">On Thursday, 7 November 2013 00:35:34 UTC+1, Nevin ":-)" L=
iber wrote:<blockquote class=3D"gmail_quote" style=3D"margin: 0;margin-lef=
t: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"ltr">O=
n 6 November 2013 17:19, Emil 'Skeen' Madsen <span dir=3D"ltr"><<a href=
=3D"javascript:" target=3D"_blank" gdf-obfuscated-mailto=3D"wxnp-oQlc7sJ">s=
ov...@gmail.com</a>></span> wrote:<br><div><div class=3D"gmail_quote">
<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
x #ccc solid;padding-left:1ex"><div dir=3D"ltr"><br><div><blockquote class=
=3D"gmail_quote" style=3D"margin:0;margin-left:0.8ex;border-left:1px #ccc s=
olid;padding-left:1ex">
<div dir=3D"ltr"><div><div class=3D"gmail_quote"><div></div><br><div>and no=
w everything which already used the type traits is broken.<br></div></div><=
/div></div></blockquote></div><div>I'm going to make a semi bold statement,=
which is this;<br>
Given the following struct;<br><code><br>struct magic_functions<br>{<=
br> static void func(double d)<br> {<br=
> std::cout << "double";<br=
> }<br>}<br></code><br>And call code which does sim=
ply invokes "func(2)". Then adding a function;<br>
<code><br>static void func(int d)<br>{<br> std::cou=
t << "int";<br>}<br></code><br>To the struct, may break the cal=
lee's code, likely not in this case, but assuming 'func' did something.<br>
</div></div></blockquote><div><br></div><div>Implicit conversions are a pro=
blem, and we tend to try and find ways to not exasperate it. IIRC, th=
at was one of the motivations behind nullptr_t.<br></div><div> </div><=
blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px=
#ccc solid;padding-left:1ex">
<div dir=3D"ltr"><div>My point being, that whenever you overload something,=
then you possibly change the semantics and behavior for the callee.<br></d=
iv></div></blockquote><div><br></div><div>I really don't want a type trait =
where passing a type with overloaded functions is bad. It isn't terri=
bly useful in generic constructs (one of your motivating cases).<br></div><=
/div></div></div></blockquote><div><br>I wouldn't say that it's bad, just t=
hat you'll have to specify which overload you like, because honestly if you=
don't, how am I as a programmer supposed to know which overload you meant =
to get the arity, ect. off? - And how is the compiler supposed to know?<br>=
<br>As for the usefulness in generic constructs, I do believe it's useful, =
you'll just have to pass the explicit template parameters to the generic fu=
nction, which makes use of the lambda traits, that is, you bump up the resp=
onsibility to make it work, also this is only needed when you use overloade=
d functions. Also without it, how am I as the maintainer supposed to know w=
hich overload you're referring to?<br><br>Also I'd rather have lambda/funct=
ion traits with the need for specifying which function you meant, whenever =
you're dealing with overloading, than not having them at all.<br> </di=
v><blockquote class=3D"gmail_quote" style=3D"margin: 0;margin-left: 0.8ex;b=
order-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"ltr"><div><div c=
lass=3D"gmail_quote"><div>
</div><div> </div><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>int my_divide(int, int);<br>int my_divide(double, double);<br><br>int =
main()<br>
{<br> // error: no matching function for call to =91bind(=
<unresolved overloaded function type>, int, int)=92<br> &n=
bsp; auto callable =3D std::bind(my_divide,10,2);<br>}<br></code><br>=
Where the solution, is to call bind with template arguments to specify whic=
h version you want.<br>
</div></div></blockquote><div><br></div><div>Why don't you show that code?&=
nbsp; Hint: it's a pretty horrible cast that I wouldn't want to infli=
ct on anyone. It's one of the prime motivating cases for using lambda=
s over std::bind. Syntax matters.<br>
</div></div></div></div></blockquote><div> I can show you that code, a=
nd it does not require a horrible cast, all it requires is an explicit temp=
late specification;<br><code><br>int main()<br>{<br>  =
; auto callable =3D std::bind<int(int,int)>(my_divide,10,2);<br>}<br>=
</code><br>And I honestly don't mind requiring the programmer to tell=
the maintainer (and the compiler), which version we're referring to. Also =
I do truly agree that syntax matters a lot, but I'd rather have lousy synta=
x and be able to solve my issue, than not being able to solve it at all.<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 std-proposals+unsubscribe@isocpp.org.<br />
To post to this group, send email to std-proposals@isocpp.org.<br />
Visit this group at <a href=3D"http://groups.google.com/a/isocpp.org/group/=
std-proposals/">http://groups.google.com/a/isocpp.org/group/std-proposals/<=
/a>.<br />
------=_Part_722_10762768.1384176743135--
.
Author: Emil 'Skeen' Madsen <sovende@gmail.com>
Date: Mon, 11 Nov 2013 05:39:53 -0800 (PST)
Raw View
------=_Part_1037_33302349.1384177193981
Content-Type: text/plain; charset=ISO-8859-1
I haven't seen this proposal before, but even though there's a common goal,
there's a difference in implementation; compiler-supported / library-only.
On Thursday, 7 November 2013 02:38:16 UTC+1, Jeffrey Yasskin wrote:
>
> Have you seen
> http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3729.html?
>
> On Wed, Nov 6, 2013 at 10:35 AM, Emil Madsen <sov...@gmail.com<javascript:>>
> wrote:
> > I just finished writing the first draft of my first proposal ever.
> > And before submitting it, I'd like to discuss the matter at hand, and
> the
> > proposal at this forum.
> >
> > The proposal is about adding traits, to determine a lambdas return and
> > argument type(s) at compile time, to the standard library.
> >
> > Have a look,
> > I'm open to all kinds of criticism and feedback :)
> >
> > // Emil 'Skeen' Madsen.
> >
> > --
> >
> > ---
> > You received this message because you are subscribed to the Google
> Groups
> > "ISO C++ Standard - Future Proposals" group.
> > To unsubscribe from this group and stop receiving emails from it, send
> an
> > email to std-proposal...@isocpp.org <javascript:>.
> > To post to this group, send email to std-pr...@isocpp.org <javascript:>.
>
> > Visit this group at
> > http://groups.google.com/a/isocpp.org/group/std-proposals/.
>
--
---
You received this message because you are subscribed to the Google Groups "ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an email to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
Visit this group at http://groups.google.com/a/isocpp.org/group/std-proposals/.
------=_Part_1037_33302349.1384177193981
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr">I haven't seen this proposal before, but even though there=
's a common goal, there's a difference in implementation; compiler-supporte=
d / library-only.<br><br>On Thursday, 7 November 2013 02:38:16 UTC+1, Jeffr=
ey Yasskin wrote:<blockquote class=3D"gmail_quote" style=3D"margin: 0;marg=
in-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;">Have you see=
n <a href=3D"http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3729.=
html" target=3D"_blank">http://www.open-std.org/jtc1/<wbr>sc22/wg21/docs/pa=
pers/2013/<wbr>n3729.html</a>?
<br>
<br>On Wed, Nov 6, 2013 at 10:35 AM, Emil Madsen <<a href=3D"javascript:=
" target=3D"_blank" gdf-obfuscated-mailto=3D"xITP4wTkSjcJ">sov...@gmail.com=
</a>> wrote:
<br>> I just finished writing the first draft of my first proposal ever.
<br>> And before submitting it, I'd like to discuss the matter at hand, =
and the
<br>> proposal at this forum.
<br>>
<br>> The proposal is about adding traits, to determine a lambdas return=
and
<br>> argument type(s) at compile time, to the standard library.
<br>>
<br>> Have a look,
<br>> I'm open to all kinds of criticism and feedback :)
<br>>
<br>> // Emil 'Skeen' Madsen.
<br>>
<br>> --
<br>>
<br>> ---
<br>> You received this message because you are subscribed to the Google=
Groups
<br>> "ISO C++ Standard - Future Proposals" group.
<br>> To unsubscribe from this group and stop receiving emails from it, =
send an
<br>> email to <a href=3D"javascript:" target=3D"_blank" gdf-obfuscated-=
mailto=3D"xITP4wTkSjcJ">std-proposal...@<wbr>isocpp.org</a>.
<br>> To post to this group, send email to <a href=3D"javascript:" targe=
t=3D"_blank" gdf-obfuscated-mailto=3D"xITP4wTkSjcJ">std-pr...@isocpp.org</a=
>.
<br>> Visit this group at
<br>> <a href=3D"http://groups.google.com/a/isocpp.org/group/std-proposa=
ls/" target=3D"_blank">http://groups.google.com/a/<wbr>isocpp.org/group/std=
-<wbr>proposals/</a>.
<br></blockquote></div>
<p></p>
-- <br />
<br />
--- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" group.<br />
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.<br />
To post to this group, send email to std-proposals@isocpp.org.<br />
Visit this group at <a href=3D"http://groups.google.com/a/isocpp.org/group/=
std-proposals/">http://groups.google.com/a/isocpp.org/group/std-proposals/<=
/a>.<br />
------=_Part_1037_33302349.1384177193981--
.
Author: morwenn29@gmail.com
Date: Wed, 13 Nov 2013 13:09:35 -0800 (PST)
Raw View
------=_Part_540_16488554.1384376976034
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable
Something that came up today on StackOverflow:=20
http://stackoverflow.com/questions/19961873/test-if-a-lambda-is-stateless
You might want to add such a trait to your proposal to check whether a=20
lambda is stateless :)
Le mercredi 6 novembre 2013 19:35:18 UTC+1, Emil 'Skeen' Madsen a =E9crit :
>
> I just finished writing the first draft of my first proposal ever.
> And before submitting it, I'd like to discuss the matter at hand, and the=
=20
> proposal at this forum.
>
> The proposal is about adding traits, to determine a lambdas return and=20
> argument type(s) at compile time, to the standard library.
>
> Have a look,
> I'm open to all kinds of criticism and feedback :)
>
> // Emil 'Skeen' Madsen.
>
--=20
---=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
Visit this group at http://groups.google.com/a/isocpp.org/group/std-proposa=
ls/.
------=_Part_540_16488554.1384376976034
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr">Something that came up today on StackOverflow: http://stac=
koverflow.com/questions/19961873/test-if-a-lambda-is-stateless<br><br>You m=
ight want to add such a trait to your proposal to check whether a lambda is=
stateless :)<br><br>Le mercredi 6 novembre 2013 19:35:18 UTC+1, Emil 'Skee=
n' Madsen a =E9crit :<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">I just finished writing the first draft of my first proposal e=
ver.<br>And before submitting it, I'd like to discuss the matter at hand, a=
nd the proposal at this forum.<br><br>The proposal is about adding traits, =
to determine a lambdas return and argument type(s) at compile time, to the =
standard library.<br><br>Have a look,<br>I'm open to all kinds of criticism=
and feedback :)<br><br>// Emil 'Skeen' Madsen.<br></div></blockquote></div=
>
<p></p>
-- <br />
<br />
--- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" group.<br />
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.<br />
To post to this group, send email to std-proposals@isocpp.org.<br />
Visit this group at <a href=3D"http://groups.google.com/a/isocpp.org/group/=
std-proposals/">http://groups.google.com/a/isocpp.org/group/std-proposals/<=
/a>.<br />
------=_Part_540_16488554.1384376976034--
.
Author: morwenn29@gmail.com
Date: Wed, 13 Nov 2013 15:32:55 -0800 (PST)
Raw View
------=_Part_4011_3237534.1384385575691
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable
Yet another note:
* arity could be made static constexpr instead of static const.
* args could be an alias template instead of a struct. Therefore, only=20
arg<...>::type can be simplified to arg<...> everywhere. We have alias=20
templates now, let's use them! :)
Le mercredi 6 novembre 2013 19:35:18 UTC+1, Emil 'Skeen' Madsen a =E9crit :
>
> I just finished writing the first draft of my first proposal ever.
> And before submitting it, I'd like to discuss the matter at hand, and the=
=20
> proposal at this forum.
>
> The proposal is about adding traits, to determine a lambdas return and=20
> argument type(s) at compile time, to the standard library.
>
> Have a look,
> I'm open to all kinds of criticism and feedback :)
>
> // Emil 'Skeen' Madsen.
>
--=20
---=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
Visit this group at http://groups.google.com/a/isocpp.org/group/std-proposa=
ls/.
------=_Part_4011_3237534.1384385575691
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr">Yet another note:<br><br>* arity could be made static cons=
texpr instead of static const.<br>* args could be an alias template instead=
of a struct. Therefore, only arg<...>::type can be simplified to arg=
<...> everywhere. We have alias templates now, let's use them! :)<br>=
<br>Le mercredi 6 novembre 2013 19:35:18 UTC+1, Emil 'Skeen' Madsen a =E9cr=
it :<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">I ju=
st finished writing the first draft of my first proposal ever.<br>And befor=
e submitting it, I'd like to discuss the matter at hand, and the proposal a=
t this forum.<br><br>The proposal is about adding traits, to determine a la=
mbdas return and argument type(s) at compile time, to the standard library.=
<br><br>Have a look,<br>I'm open to all kinds of criticism and feedback :)<=
br><br>// Emil 'Skeen' Madsen.<br></div></blockquote></div>
<p></p>
-- <br />
<br />
--- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" group.<br />
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.<br />
To post to this group, send email to std-proposals@isocpp.org.<br />
Visit this group at <a href=3D"http://groups.google.com/a/isocpp.org/group/=
std-proposals/">http://groups.google.com/a/isocpp.org/group/std-proposals/<=
/a>.<br />
------=_Part_4011_3237534.1384385575691--
.
Author: morwenn29@gmail.com
Date: Wed, 27 Nov 2013 11:14:45 -0800 (PST)
Raw View
------=_Part_898_20351276.1385579685402
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable
Another function-related trait that could be useful would be a trait to=20
check whether a given function is a predicate or not.
Le mercredi 6 novembre 2013 19:35:18 UTC+1, Emil 'Skeen' Madsen a =E9crit :
>
> I just finished writing the first draft of my first proposal ever.
> And before submitting it, I'd like to discuss the matter at hand, and the=
=20
> proposal at this forum.
>
> The proposal is about adding traits, to determine a lambdas return and=20
> argument type(s) at compile time, to the standard library.
>
> Have a look,
> I'm open to all kinds of criticism and feedback :)
>
> // Emil 'Skeen' Madsen.
>
--=20
---=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
Visit this group at http://groups.google.com/a/isocpp.org/group/std-proposa=
ls/.
------=_Part_898_20351276.1385579685402
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr">Another function-related trait that could be useful would =
be a trait to check whether a given function is a predicate or not.<br><br>=
Le mercredi 6 novembre 2013 19:35:18 UTC+1, Emil 'Skeen' Madsen a =E9crit&n=
bsp;:<blockquote class=3D"gmail_quote" style=3D"margin: 0;margin-left: 0.8e=
x;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"ltr">I just f=
inished writing the first draft of my first proposal ever.<br>And before su=
bmitting it, I'd like to discuss the matter at hand, and the proposal at th=
is forum.<br><br>The proposal is about adding traits, to determine a lambda=
s return and argument type(s) at compile time, to the standard library.<br>=
<br>Have a look,<br>I'm open to all kinds of criticism and feedback :)<br><=
br>// Emil 'Skeen' Madsen.<br></div></blockquote></div>
<p></p>
-- <br />
<br />
--- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" group.<br />
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.<br />
To post to this group, send email to std-proposals@isocpp.org.<br />
Visit this group at <a href=3D"http://groups.google.com/a/isocpp.org/group/=
std-proposals/">http://groups.google.com/a/isocpp.org/group/std-proposals/<=
/a>.<br />
------=_Part_898_20351276.1385579685402--
.
Author: morwenn29@gmail.com
Date: Wed, 27 Nov 2013 13:18:33 -0800 (PST)
Raw View
------=_Part_783_32104067.1385587113570
Content-Type: text/plain; charset=ISO-8859-1
I mean by predicate what I often saw as the definition of a predicate in
C++: a function which takes one value (by value or const reference) and
which returns an instance of a class that is convertible to bool. It's a
little bit more boilerplate than just returning a bool.
--
---
You received this message because you are subscribed to the Google Groups "ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an email to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
Visit this group at http://groups.google.com/a/isocpp.org/group/std-proposals/.
------=_Part_783_32104067.1385587113570
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr">I mean by predicate what I often saw as the definition of =
a predicate in C++: a function which takes one value (by value or const ref=
erence) and which returns an instance of a class that is convertible to boo=
l. It's a little bit more boilerplate than just returning a bool.<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 std-proposals+unsubscribe@isocpp.org.<br />
To post to this group, send email to std-proposals@isocpp.org.<br />
Visit this group at <a href=3D"http://groups.google.com/a/isocpp.org/group/=
std-proposals/">http://groups.google.com/a/isocpp.org/group/std-proposals/<=
/a>.<br />
------=_Part_783_32104067.1385587113570--
.
Author: Andrew Tomazos <andrewtomazos@gmail.com>
Date: Wed, 27 Nov 2013 21:04:27 -0800 (PST)
Raw View
------=_Part_1163_7647828.1385615067110
Content-Type: text/plain; charset=ISO-8859-1
Hi Emil,
Here are a few ideas:
First, I think your proposed traits can be created without compiler support
as handful of pure library code using type deduction.
Secondly, I think if it turns out being worth adding, the interface would
be more consistent with existing traits being separate:
For F where std::is_function<F> is true:
- std::return_type<F>
- std::arity<F>
- std::parameter_type<F,I>
namespace std
{
template<typename F>
struct return_type
{
static_assert(std::is_function<F>);
using type = __return_type(F);
};
template<typename F>
struct parameter_list_size : integer_constant<size_t, __arity(F)>
{
static_assert(std::is_function<F>);
};
template<typename P, size_t I>
struct parameter_type
{
static_assert(std::is_function<F>);
static_assert(I >= 0 && I < std::arity<F>);
using type = __parameter_type(P, I);
}
};
Combined with the std::invocation_type transformation to produce a function
type from any callable such as a function object or lambda, this should
give you most of the information you might want.
Thirdly, what about function types with varying number of arguments? ie a
function type with an ellipse like R(A, B, C, ...), like printf. What
shall std::arity<F> and std::parameter_type<F,I> return for those function
types?
Forthly, what about the implicit object parameter of non-static member
functions (the ref-qualifier, and the cv-qualifier-seq)? Note that:
> The return type, the parameter-type-list, the ref-qualifier, and the
cv-qualifier-seq, but not the default arguments (8.3.6) or the exception
specification (15.4), are part of the function type.
What shall std::arity and std::parameter_type return for them?
Perhaps there need to be additional traits to inspect:
- the presence of an ellipse in the parameter-list
(std::has_varying_arguments<F>)
- whether it is a non-static member function type
- and if so the ref-qualifier and cv of the implicit object parameter.
Perhaps std::is_member_function<F> (only true for non-static member
functions), and std::implicit_object_type<F> gives a class ::type member
with appropriate cv/ref qualification that match ref-qualfier and
cv-qualifier-seq.
Anyway, just some ideas.
On Wednesday, November 6, 2013 7:35:18 PM UTC+1, Emil 'Skeen' Madsen wrote:
>
> I just finished writing the first draft of my first proposal ever.
> And before submitting it, I'd like to discuss the matter at hand, and the
> proposal at this forum.
>
> The proposal is about adding traits, to determine a lambdas return and
> argument type(s) at compile time, to the standard library.
>
> Have a look,
> I'm open to all kinds of criticism and feedback :)
>
> // Emil 'Skeen' Madsen.
>
--
---
You received this message because you are subscribed to the Google Groups "ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an email to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
Visit this group at http://groups.google.com/a/isocpp.org/group/std-proposals/.
------=_Part_1163_7647828.1385615067110
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><div>Hi Emil,</div><div><br></div><div>Here are a few idea=
s:</div><div><br></div><div>First, I think your proposed traits can be crea=
ted without compiler support as handful of pure library code using type ded=
uction.</div><div><br></div><div>Secondly, I think if it turns out being wo=
rth adding, the interface would be more consistent with existing traits bei=
ng separate:</div><div><br></div><div>For F where std::is_function<F>=
is true:</div><div><br></div><div>- std::return_type<F></div><div>- =
std::arity<F></div><div>- std::parameter_type<F,I></div><div><b=
r></div><div>namespace std</div><div>{</div><div> templa=
te<typename F></div><div> struct return_type<br></=
div><div> {</div><div> =
static_assert(std::is_function<F>);</div><div><br></div><div> =
using type =3D __return_type(F);</div><div>&nbs=
p; };</div><div><br></div><div> template<typen=
ame F></div><div> struct parameter_list_size : integer_cons=
tant<size_t, __arity(F)></div><div> {</div><div> &=
nbsp; static_assert(std::is_function<F>);</div><d=
iv> };</div><div><br></div><div> template<type=
name P, size_t I></div><div> struct parameter_type</div><di=
v> {</div><div><div> static_a=
ssert(std::is_function<F>);</div></div><div><div> =
static_assert(I >=3D 0 && I < std::arity<F&g=
t;);</div></div><div><br></div><div> using=
type =3D __parameter_type(P, I);</div><div> }</div><div>};</d=
iv><div><br></div><div>Combined with the std::invocation_type transformatio=
n to produce a function type from any callable such as a function object or=
lambda, this should give you most of the information you might want.</div>=
<div><br></div><div>Thirdly, what about function types with varying number =
of arguments? ie a function type with an ellipse like R(A, B, C, ...)=
, like printf. What shall std::arity<F> and std::parameter_type=
<F,I> return for those function types?</div><div><br></div><div>Forth=
ly, what about the implicit object parameter of non-static member functions=
(the ref-qualifier, and the cv-qualifier-seq)? Note that:</div><div>=
<br></div><div>> The return type, the parameter-type-list, the ref-quali=
fier, and the cv-qualifier-seq, but not the default arguments (8.3.6) or th=
e exception specification (15.4), are part of the function type.</div><div>=
<br></div><div>What shall std::arity and std::parameter_type return for the=
m?</div><div><br></div><div>Perhaps there need to be additional traits to i=
nspect:</div><div>- the presence of an ellipse in the parameter-list (std::=
has_varying_arguments<F>)</div><div>- whether it is a non-static memb=
er function type</div><div>- and if so the ref-qualifier and cv of the impl=
icit object parameter.</div><div><br></div><div>Perhaps std::is_member_func=
tion<F> (only true for non-static member functions), and std::implici=
t_object_type<F> gives a class ::type member with appropriate cv/ref =
qualification that match ref-qualfier and cv-qualifier-seq.</div><div><br><=
/div><div>Anyway, just some ideas.</div><div><br></div><div><br></div>On We=
dnesday, November 6, 2013 7:35:18 PM UTC+1, Emil 'Skeen' Madsen wrote:<bloc=
kquote 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">I just finished wr=
iting the first draft of my first proposal ever.<br>And before submitting i=
t, I'd like to discuss the matter at hand, and the proposal at this forum.<=
br><br>The proposal is about adding traits, to determine a lambdas return a=
nd argument type(s) at compile time, to the standard library.<br><br>Have a=
look,<br>I'm open to all kinds of criticism and feedback :)<br><br>// Emil=
'Skeen' Madsen.<br></div></blockquote></div>
<p></p>
-- <br />
<br />
--- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" group.<br />
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.<br />
To post to this group, send email to std-proposals@isocpp.org.<br />
Visit this group at <a href=3D"http://groups.google.com/a/isocpp.org/group/=
std-proposals/">http://groups.google.com/a/isocpp.org/group/std-proposals/<=
/a>.<br />
------=_Part_1163_7647828.1385615067110--
.
Author: Andrew Tomazos <andrewtomazos@gmail.com>
Date: Wed, 27 Nov 2013 21:07:52 -0800 (PST)
Raw View
------=_Part_1157_10901915.1385615272898
Content-Type: text/plain; charset=ISO-8859-1
On Wednesday, November 6, 2013 10:53:40 PM UTC+1, Nevin ":-)" Liber wrote:
>
> On 6 November 2013 15:29, Emil 'Skeen' Madsen <sov...@gmail.com<javascript:>
> > wrote:
>
>>
>>
>> However I came to think about it, maybe what we actually want, is
>> something more in the style of traits, I'm thinking in the lines of;
>> <code>
>> // Yields the Callable's arity
>> function_arity<Callable>::value
>>
>
> In general, this is hard:
>
> int foo(int, int = 0);
>
> Is the arity 1 or 2?
>
>
2. Default arguments are not part of a function type.
--
---
You received this message because you are subscribed to the Google Groups "ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an email to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
Visit this group at http://groups.google.com/a/isocpp.org/group/std-proposals/.
------=_Part_1157_10901915.1385615272898
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><br><br>On Wednesday, November 6, 2013 10:53:40 PM UTC+1, =
Nevin ":-)" Liber wrote:<blockquote class=3D"gmail_quote" style=3D"margin: =
0;margin-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div d=
ir=3D"ltr">On 6 November 2013 15:29, Emil 'Skeen' Madsen <span dir=3D"ltr">=
<<a href=3D"javascript:" target=3D"_blank" gdf-obfuscated-mailto=3D"B4BQ=
fO2ppzYJ" onmousedown=3D"this.href=3D'javascript:';return true;" onclick=3D=
"this.href=3D'javascript:';return true;">sov...@gmail.com</a>></span> wr=
ote:<br><div><div class=3D"gmail_quote">
<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
x #ccc solid;padding-left:1ex"><div dir=3D"ltr"><br><div> <br>However =
I came to think about it, maybe what we actually want, is something more in=
the style of traits, I'm thinking in the lines of;<br>
<code><br> // Yields the Callable's arity<br>function_arity<Callab=
le>::<wbr>value<br></div></div></blockquote><div><br></div><div>In gener=
al, this is hard:<br><br></div><div>int foo(int, int =3D 0);<br><br></div>
<div>Is the arity 1 or 2?<br></div></div><br></div></div></blockquote><div>=
<br></div><div>2. Default arguments are not part of a function type.<=
/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 std-proposals+unsubscribe@isocpp.org.<br />
To post to this group, send email to std-proposals@isocpp.org.<br />
Visit this group at <a href=3D"http://groups.google.com/a/isocpp.org/group/=
std-proposals/">http://groups.google.com/a/isocpp.org/group/std-proposals/<=
/a>.<br />
------=_Part_1157_10901915.1385615272898--
.
Author: Emil 'Skeen' Madsen <sovende@gmail.com>
Date: Thu, 28 Nov 2013 09:54:41 -0800 (PST)
Raw View
------=_Part_1_24049665.1385661281049
Content-Type: text/plain; charset=ISO-8859-1
On Thursday, 28 November 2013 06:04:27 UTC+1, Andrew Tomazos wrote:
>
> Hi Emil,
>
> Here are a few ideas:
>
> First, I think your proposed traits can be created without compiler
> support as handful of pure library code using type deduction.
>
I was aiming to do it without compiler support, in contrast to n3729 by
Mike Spertus. My proposal is a library extension only.
>
> Secondly, I think if it turns out being worth adding, the interface would
> be more consistent with existing traits being separate:
>
I agree with this, and when I get time to finish up the second revision, of
the proposal I'll be proposing an interface which is alike what you suggest.
I expect to have the next revision up for discussion some time next week.
> For F where std::is_function<F> is true:
>
> - std::return_type<F>
> - std::arity<F>
> - std::parameter_type<F,I>
>
> namespace std
> {
> template<typename F>
> struct return_type
> {
> static_assert(std::is_function<F>);
>
> using type = __return_type(F);
> };
>
> template<typename F>
> struct parameter_list_size : integer_constant<size_t, __arity(F)>
> {
> static_assert(std::is_function<F>);
> };
>
> template<typename P, size_t I>
> struct parameter_type
> {
> static_assert(std::is_function<F>);
> static_assert(I >= 0 && I < std::arity<F>);
>
> using type = __parameter_type(P, I);
> }
> };
>
> Combined with the std::invocation_type transformation to produce a
> function type from any callable such as a function object or lambda, this
> should give you most of the information you might want.
>
> Thirdly, what about function types with varying number of arguments? ie a
> function type with an ellipse like R(A, B, C, ...), like printf. What
> shall std::arity<F> and std::parameter_type<F,I> return for those function
> types?
>
The code I've currently got running, will return 3 as arity for 'R(A, B, C,
....)', while also returning true for what you suggest as
'std::has_varying_arguments<F>'. Parameter types will only be defined for
[0, ..., arity].
>
> Forthly, what about the implicit object parameter of non-static member
> functions (the ref-qualifier, and the cv-qualifier-seq)? Note that:
>
> > The return type, the parameter-type-list, the ref-qualifier, and the
> cv-qualifier-seq, but not the default arguments (8.3.6) or the exception
> specification (15.4), are part of the function type.
>
> What shall std::arity and std::parameter_type return for them?
>
I do believe that std::parameter_type should retain qualifiers. If we don't
want them, then we're able to get rid of them using "std::remove_const" and
friends.
As for the implicit object parameter; My initial opinion would be, that
this should actually also be a part of the arity, and parameter_type, as we
can again simply get rid of it, if we want to, but I'm open to discussion!
> Perhaps there need to be additional traits to inspect:
> - the presence of an ellipse in the parameter-list
> (std::has_varying_arguments<F>)
> - whether it is a non-static member function type
> - and if so the ref-qualifier and cv of the implicit object parameter.
>
> I can agree with all of these!
> Perhaps std::is_member_function<F> (only true for non-static member
> functions), and std::implicit_object_type<F> gives a class ::type member
> with appropriate cv/ref qualification that match ref-qualfier and
> cv-qualifier-seq.
>
> Anyway, just some ideas.
>
>
> On Wednesday, November 6, 2013 7:35:18 PM UTC+1, Emil 'Skeen' Madsen wrote:
>>
>> I just finished writing the first draft of my first proposal ever.
>> And before submitting it, I'd like to discuss the matter at hand, and the
>> proposal at this forum.
>>
>> The proposal is about adding traits, to determine a lambdas return and
>> argument type(s) at compile time, to the standard library.
>>
>> Have a look,
>> I'm open to all kinds of criticism and feedback :)
>>
>> // Emil 'Skeen' Madsen.
>>
>
--
---
You received this message because you are subscribed to the Google Groups "ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an email to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
Visit this group at http://groups.google.com/a/isocpp.org/group/std-proposals/.
------=_Part_1_24049665.1385661281049
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><br>On Thursday, 28 November 2013 06:04:27 UTC+1, Andrew T=
omazos 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"=
><div>Hi Emil,</div><div><br></div><div>Here are a few ideas:</div><div><br=
></div><div>First, I think your proposed traits can be created without comp=
iler support as handful of pure library code using type deduction.</div></d=
iv></blockquote><div><br>I was aiming to do it without compiler support, in=
contrast to n3729 by Mike Spertus. My proposal is a library extension only=
..<br> </div><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>Secondly, I think if it turns out being worth addin=
g, the interface would be more consistent with existing traits being separa=
te:</div></div></blockquote><div> </div><div>I agree with this, and wh=
en I get time to finish up the second revision, of the proposal I'll be pro=
posing an interface which is alike what you suggest.<br>I expect to have th=
e next revision up for discussion some time next week.<br> </div><bloc=
kquote 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"><div></div><div>Fo=
r F where std::is_function<F> is true:</div><div><br></div><div>- std=
::return_type<F></div><div>- std::arity<F></div><div>- std::par=
ameter_type<F,I></div><div><br></div><div>namespace std</div><div>{</=
div><div> template<typename F></div><div> &n=
bsp; struct return_type<br></div><div> {</div><div=
> static_assert(std::is_<wbr>function<=
F>);</div><div><br></div><div> using t=
ype =3D __return_type(F);</div><div> };</div><div><br></=
div><div> template<typename F></div><div> s=
truct parameter_list_size : integer_constant<size_t, __arity(F)></div=
><div> {</div><div> static_as=
sert(std::is_<wbr>function<F>);</div><div> };</div><div>=
<br></div><div> template<typename P, size_t I></div><div=
> struct parameter_type</div><div> {</div><div><d=
iv> static_assert(std::is_<wbr>function<=
;F>);</div></div><div><div> static_asse=
rt(I >=3D 0 && I < std::arity<F>);</div></div><div><br>=
</div><div> using type =3D __parameter_typ=
e(P, I);</div><div> }</div><div>};</div><div><br></div><div>Co=
mbined with the std::invocation_type transformation to produce a function t=
ype from any callable such as a function object or lambda, this should give=
you most of the information you might want.</div><div><br></div><div>Third=
ly, what about function types with varying number of arguments? ie a =
function type with an ellipse like R(A, B, C, ...), like printf. What=
shall std::arity<F> and std::parameter_type<F,I> return for th=
ose function types?</div></div></blockquote><div><br>The code I've currentl=
y got running, will return 3 as arity for 'R(A, B, C, ...)', while also ret=
urning true for what you suggest as 'std::has_varying_arguments<F>'. =
Parameter types will only be defined for [0, ..., arity].<br> </div><b=
lockquote class=3D"gmail_quote" style=3D"margin: 0;margin-left: 0.8ex;borde=
r-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"ltr"><div><br></div>=
<div>Forthly, what about the implicit object parameter of non-static member=
functions (the ref-qualifier, and the cv-qualifier-seq)? Note that:<=
/div><div><br></div><div>> The return type, the parameter-type-list, the=
ref-qualifier, and the cv-qualifier-seq, but not the default arguments (8.=
3.6) or the exception specification (15.4), are part of the function type.<=
/div><div><br></div><div>What shall std::arity and std::parameter_type retu=
rn for them?</div></div></blockquote><div><br>I do believe that std::parame=
ter_type should retain qualifiers. If we don't want them, then we're able t=
o get rid of them using "std::remove_const" and friends.<br>As for the impl=
icit object parameter; My initial opinion would be, that this should actual=
ly also be a part of the arity, and parameter_type, as we can again simply =
get rid of it, if we want to, but I'm open to discussion!<br> </div><b=
lockquote class=3D"gmail_quote" style=3D"margin: 0;margin-left: 0.8ex;borde=
r-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"ltr"><div></div><div=
>Perhaps there need to be additional traits to inspect:</div><div>- the pre=
sence of an ellipse in the parameter-list (std::has_varying_arguments<F&=
gt;<wbr>)</div><div>- whether it is a non-static member function type</div>=
<div>- and if so the ref-qualifier and cv of the implicit object parameter.=
</div><div><br></div></div></blockquote><div>I can agree with all of these!=
<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><div>Perhaps std::is_member_function<F> (only true for =
non-static member functions), and std::implicit_object_type<F> gives =
a class ::type member with appropriate cv/ref qualification that match ref-=
qualfier and cv-qualifier-seq.</div><div><br></div><div>Anyway, just some i=
deas.</div><div><br></div><div><br></div>On Wednesday, November 6, 2013 7:3=
5:18 PM UTC+1, Emil 'Skeen' Madsen 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">I just finished writing the first draft of my first =
proposal ever.<br>And before submitting it, I'd like to discuss the matter =
at hand, and the proposal at this forum.<br><br>The proposal is about addin=
g traits, to determine a lambdas return and argument type(s) at compile tim=
e, to the standard library.<br><br>Have a look,<br>I'm open to all kinds of=
criticism and feedback :)<br><br>// Emil 'Skeen' Madsen.<br></div></blockq=
uote></div></blockquote></div>
<p></p>
-- <br />
<br />
--- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" group.<br />
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.<br />
To post to this group, send email to std-proposals@isocpp.org.<br />
Visit this group at <a href=3D"http://groups.google.com/a/isocpp.org/group/=
std-proposals/">http://groups.google.com/a/isocpp.org/group/std-proposals/<=
/a>.<br />
------=_Part_1_24049665.1385661281049--
.