<div dir="ltr"><br><br><div class="gmail_quote"><div dir="ltr">On Thu, Mar 8, 2018 at 8:53 AM Csaba Raduly via cfe-dev <<a href="mailto:cfe-dev@lists.llvm.org">cfe-dev@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi all,<br>
<br>
Simon Brand's "How C++ Debuggers Work" presentation<br>
(<a href="https://www.youtube.com/watch?v=Q3Rm95Mk03c" rel="noreferrer" target="_blank">https://www.youtube.com/watch?v=Q3Rm95Mk03c</a>) had the following<br>
snippet:<br>
<br>
<br>
#include <unordered_set><br>
#include <string><br>
#include <iostream><br>
<br>
int main() {<br>
  std::unordered_set<std::string> set<br>
  {{"hello", "stop-the-"}};<br>
  for (auto x : set) {<br>
    std::cout << (x + " world") << '\n';<br>
  }<br>
}<br>
<br>
(this is a set with one string, but on Linux this fails with a<br>
std::length_error being thrown)<br>
<br>
I believe calling the std::string::string(Iterator, Iterator)<br>
constructor with string literals is always wrong, because two string<br>
literals can not define a valid range.<br>
<br>
Which tool should be able to warn about this? A compiler warning seems<br>
wrong, because the compiler can't know what the constructor does with<br>
its arguments. Perhaps a job for the static analyzer?<br></blockquote><div><br></div><div>clang-tidy seems like a good fit.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
<br>
Csaba<br>
--<br>
You can get very substantial performance improvements by not doing the<br>
right thing.<br>
   - Scott Meyers, An Effective C++11/14 Sampler<br>
So if you're looking for a completely portable, 100% standards-conformat way<br>
to get the wrong information: this is what you want. - Scott Meyers (C++TDaWYK)<br>
_______________________________________________<br>
cfe-dev mailing list<br>
<a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev</a><br>
</blockquote></div></div>