<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div class=""><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div>On Tue, Aug 26, 2014 at 4:28 PM, David Blaikie <span dir="ltr"><<a href="mailto:dblaikie@gmail.com" target="_blank">dblaikie@gmail.com</a>></span> wrote:<br>


<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">
<div><div>Not quite true, unfortunately - a constexpr function (or constructor) /can/ be used in constexpr contexts but only has to have no side effects for the /particular/ codepaths that are called from constexpr contexts.<br>
</div></div><div>


<br>eg:<br><br>constexpr int func(bool b) { if (b) printf("stuff") return 3; }<br><br>constexpr int x = func(false);<br>const int y = func(true);<br><br>is valid code, as I understand it. But we might be able to check the particular caller, to see if it's constexpr - but that could have performance implications.</div>
</div></div></div></blockquote></div></div></div></div></blockquote></div></div></div></div></blockquote><div>Good point! I missed that.</div><div> </div>On Tue, Aug 26, 2014 at 7:58 PM, David Blaikie <span dir="ltr"><<a href="mailto:dblaikie@gmail.com" target="_blank">dblaikie@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">
<div class="">On Tue, Aug 26, 2014 at 4:57 PM, Richard Smith <span dir="ltr"><<a href="mailto:richard@metafoo.co.uk" target="_blank">richard@metafoo.co.uk</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"></div></div></div></blockquote></div></div></div></div></blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div class=""><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div>In some cases, we'll be checking whether the initialization is a constant expression anyway, and it seems reasonable to extend the warning to cover those cases. I'm not sure whether there'll be a noticeable performance penalty for doing this to all local variables; I suspect not, since at least CodeGen is likely to trigger the constant-evaluation of their initializers.</div>

</div></div></div></blockquote><div><br></div></div><div>Yep - I was wondering if we'd be doing the work in many cases anyway & able to leverage that. Sounds good.</div></div></div></div></blockquote><div>For the unused variable warning we don't need to check every local variable -- only the unused ones. But this does make the code change a lot more involved. How about a change that's only triggered by constexpr constructors with no arguments? My understanding is such constructors should not have side-effects (7.1.5/5).</div>
<div><br></div><div>Eugene</div></div></div></div>