<div class="gmail_quote">On Wed, Aug 22, 2012 at 12:59 PM, Chandler Carruth <span dir="ltr"><<a href="mailto:chandlerc@google.com" target="_blank">chandlerc@google.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="gmail_extra"><div class="gmail_quote"><div class="im">On Wed, Aug 22, 2012 at 11:25 AM, Richard Trieu <span dir="ltr"><<a href="mailto:rtrieu@google.com" target="_blank">rtrieu@google.com</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="gmail_quote"><div>On Tue, Aug 21, 2012 at 7:17 PM, Chandler Carruth <span dir="ltr"><<a href="mailto:chandlerc@google.com" target="_blank">chandlerc@google.com</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="gmail_extra"><div class="gmail_quote"><div>On Tue, Aug 21, 2012 at 6:59 PM, Richard Trieu <span dir="ltr"><<a href="mailto:rtrieu@google.com" target="_blank">rtrieu@google.com</a>></span> wrote:<br>


<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Currently, template diffing does not handle cases where the templates have qualifiers.  This can lead to warnings such as:<div>



<br></div><div>... 'vector<vector<[...]>>' cannot convert to 'vector<vector<[...]>>' ...</div>

<div><br></div><div>when the message means, can't convert from vector<const vector<int>> to vector<vector<int>>.  This patch allows the internal diff tree to store the qualifiers for template types and adds new methods for finding the difference between sets of qualifiers and to print out the qualifiers.  This does not affect non-template types as they already print qualifiers.</div>



</blockquote><div><br></div></div><div>Very cool!</div><div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<div>Examples:<br></div><div>vector<const vector<int>> and vector<vector<int>></div><div>inline: vector<const vector<[...]>> vs. vector<(missing const) vector<[...]></div></blockquote>



<div><br></div></div><div>I think I would prefer: vector<const vector<[...]>> vs. vector<vector<[...]>> </div></div></div></blockquote><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">


<div class="gmail_extra"><div class="gmail_quote"><div><br></div><div>We can use the cyan highlighting to further emphasize the qualifiers on both sides (if any) when the qualifiers are different. This would make the const bright here, and in the example further down, the const bright on one side and the volatile on the other.</div>



<div><br></div><div>One reason why I prefer this format is brevity. The other is that the error might be the *presence* of const just as easily as the absence.</div></div></div></blockquote><div><br></div></div><div>The motivation behind the (missing ...) was that there's no guarantee that the types printed would be close to each other.  There may be cases of : vector<const vector<[...]>> ... long message ... vector<vector<[...]>>.  Going by your suggestion, the second type would be completely unhighlighted.</div>

</div></blockquote><div><br></div></div><div>Seems fine to me? As long as the const is highlighted in the first type, I think it's likely to draw the attention to the correct place. </div></div></div>
</blockquote></div><br><div>New patch.  This includes the changes Chandler and Richard Smith suggested: when printing types inline, don't print (missing ...) for missing qualifiers; and maintain consistence by performing qualifier highlighting on non-template types used as template arguments.</div>