title: remove element from std::list by reference
body: <pre><code>std::list&lt;Reader&gt; readers;
  
  readers.push_back(Reader());
  
  Reader&amp; r = *(readers.begin());
  
  /* at this point, the exact place in list, where the reader was picked out, is forgotten. 
     Only 'r' shows which element of the list it is. */
  
  readers.erase(r); //&lt;---how to do this?
  </code></pre>
  
  <p>Clients get the new instances 'reader' objects from a manager/dispatcher. The manager maintains an internal list of whatever was dispatched and invalidates/frees up a cached data if "everyone interested" picked it up by observing the pool of readers dispatched.</p>
  
  <p>When the client is no longer interested in the data, it should return the reader to the manager for removal from the pool. But I don't want the client to keep an iterator - it's absolutely uninterested in guts of the manager and the pool of the readers; only needs this one own reader it got, not an iterator pointing to it. So, for deletion, it calls the manager's cleanup function, with the reference to that single reader.</p>
  
  <p>Is there a nicer way to erase that reader from the list than to iterate through the whole list in search of that one reader the reference leads to?</p>