<div dir="ltr"><div class="markdown-here-wrapper" style=""><p style="margin:0px 0px 1.2em!important">2017-02-17 17:13 GMT+03:00 T.J. Usiyan &lt;<a href="mailto:griotspeak@gmail.com" target="_blank">griotspeak@gmail.com</a>&gt;:</p>
<p style="margin:0px 0px 1.2em!important"></p><div class="markdown-here-exclude"><p></p><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>It is my opinion that you are describing an entirely different, and somewhat orthogonal, feature. I would like the feature that you describe. Constant expressions are powerful and open up quite a few optimizations. What constexpr addresses is not purity, at the heart of it. Pure expressions that accept compile-time-known values are, by happy accident, compile-time-computable, but pure expressions that accept dynamic values are not. Conflating the two qualities of being compile-time-known and being pure within the same keyword and overloading it in this way is not desirable to me.</div></div></blockquote><p></p></div><p style="margin:0px 0px 1.2em!important"></p>
<p style="margin:0px 0px 1.2em!important">I see now. I’d say that access to global state is not vital, and <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline">@pure</code> functions are more useful than <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline">@const</code> functions, so I’m OK with having only <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline">@const</code> functions.</p>
<p style="margin:0px 0px 1.2em!important">To control growth of compilation time, we could have both <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline">@pure</code> function annotation and <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline">@const</code> variable annotation to <em>ensure</em> that a <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline">@pure</code> expression is computed at compilation time.</p>
<p style="margin:0px 0px 1.2em!important">I’d also want to infer <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline">@pure</code> whenever possible, but is it possible with functions in different modules?</p>
<div title="MDH:PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiPjxkaXYgY2xhc3M9ImdtYWlsX3F1b3RlIj4yMDE3LTAy
LTE3IDE3OjEzIEdNVCswMzowMCBULkouIFVzaXlhbiA8c3BhbiBkaXI9Imx0ciI+Jmx0OzxhIGhy
ZWY9Im1haWx0bzpncmlvdHNwZWFrQGdtYWlsLmNvbSIgdGFyZ2V0PSJfYmxhbmsiPmdyaW90c3Bl
YWtAZ21haWwuY29tPC9hPiZndDs8L3NwYW4+Ojxicj48YmxvY2txdW90ZSBjbGFzcz0iZ21haWxf
cXVvdGUiIHN0eWxlPSJtYXJnaW46MCAwIDAgLjhleDtib3JkZXItbGVmdDoxcHggI2NjYyBzb2xp
ZDtwYWRkaW5nLWxlZnQ6MWV4Ij48ZGl2IGRpcj0ibHRyIj48ZGl2Pkl0IGlzIG15IG9waW5pb24g
dGhhdCB5b3UgYXJlIGRlc2NyaWJpbmcgYW4gZW50aXJlbHkgZGlmZmVyZW50LCBhbmQgc29tZXdo
YXQgb3J0aG9nb25hbCwgZmVhdHVyZS4mbmJzcDtJIHdvdWxkIGxpa2UgdGhlIGZlYXR1cmUgdGhh
dCB5b3UgZGVzY3JpYmUuIENvbnN0YW50IGV4cHJlc3Npb25zIGFyZSBwb3dlcmZ1bCBhbmQgb3Bl
biB1cCBxdWl0ZSBhIGZldyBvcHRpbWl6YXRpb25zLiBXaGF0IGNvbnN0ZXhwciBhZGRyZXNzZXMg
aXMgbm90IHB1cml0eSwgYXQgdGhlIGhlYXJ0IG9mIGl0LiBQdXJlIGV4cHJlc3Npb25zIHRoYXQg
YWNjZXB0IGNvbXBpbGUtdGltZS1rbm93biB2YWx1ZXMgYXJlLCBieSBoYXBweSBhY2NpZGVudCwg
Y29tcGlsZS10aW1lLWNvbXB1dGFibGUsIGJ1dCBwdXJlIGV4cHJlc3Npb25zIHRoYXQgYWNjZXB0
IGR5bmFtaWMgdmFsdWVzIGFyZSBub3QuIENvbmZsYXRpbmcgdGhlIHR3byBxdWFsaXRpZXMgb2Yg
YmVpbmcgY29tcGlsZS10aW1lLWtub3duIGFuZCBiZWluZyBwdXJlIHdpdGhpbiB0aGUgc2FtZSBr
ZXl3b3JkIGFuZCBvdmVybG9hZGluZyBpdCBpbiB0aGlzIHdheSBpcyBub3QgZGVzaXJhYmxlIHRv
IG1lLjwvZGl2PjwvZGl2PjwvYmxvY2txdW90ZT48ZGl2Pjxicj48L2Rpdj48ZGl2Pkkgc2VlIG5v
dy4gSSdkIHNheSB0aGF0IGFjY2VzcyB0byBnbG9iYWwgc3RhdGUgaXMgbm90IHZpdGFsLCBhbmQg
YEBwdXJlYCBmdW5jdGlvbnMgYXJlIG1vcmUgdXNlZnVsIHRoYW4gYEBjb25zdGAgZnVuY3Rpb25z
LCBzbyBJJ20gT0sgd2l0aCBoYXZpbmcgb25seSBgQGNvbnN0YCBmdW5jdGlvbnMuPC9kaXY+PGRp
dj48YnI+PC9kaXY+PGRpdj5UbyBjb250cm9sIGdyb3d0aCBvZiBjb21waWxhdGlvbiB0aW1lLCB3
ZSBjb3VsZCBoYXZlIGJvdGggYEBwdXJlYCBmdW5jdGlvbiBhbm5vdGF0aW9uIGFuZCBgQGNvbnN0
YCB2YXJpYWJsZSBhbm5vdGF0aW9uIHRvICplbnN1cmUqIHRoYXQgYSBgQHB1cmVgIGV4cHJlc3Np
b24gaXMgY29tcHV0ZWQgYXQgY29tcGlsYXRpb24gdGltZS48L2Rpdj48ZGl2Pjxicj48L2Rpdj48
ZGl2PkknZCBhbHNvIHdhbnQgdG8gaW5mZXIgYEBwdXJlYCB3aGVuZXZlciBwb3NzaWJsZSwgYnV0
IGlzIGl0IHBvc3NpYmxlIHdpdGggZnVuY3Rpb25zIGluIGRpZmZlcmVudCBtb2R1bGVzPzwvZGl2
PjwvZGl2PjwvZGl2Pg==" style="height:0;width:0;max-height:0;max-width:0;overflow:hidden;font-size:0em;padding:0;margin:0">​</div></div></div>