title: Why does `std::string::find()` not return the end iterator on failures?
body: <p>I find the behaviour of <code>std::string::find</code> to be inconsistent with standard C++ containers.</p>
  
  <p>E.g.</p>
  
  <pre><code>std::map&lt;int, int&gt; myMap = {{1, 2}};
  auto it = myMap.find(10);  // it == myMap.end()
  </code></pre>
  
  <p>But for a string,</p>
  
  <pre><code>std::string myStr = "hello";
  auto it = myStr.find('!');  // it == std::string::npos
  </code></pre>
  
  <p>Why shouldn't the failed <code>myStr.find('!')</code> return <code>myStr.end()</code> instead of <code>std::string::npos</code>?</p>
  
  <p>Since the <code>std::string</code> is somewhat special when compared with other containers, I am wondering whether there is some real reason behind this. 
  (Surprisingly, I couldn't find anyone questioning this anywhere).</p>