title: stl compliant container
body: <p>I've been curious as to what entails an stl-compliant container (or boost-compliant, my understanding is that their either the same, or very similar). I've seen a few examples of what people call stl-compliant (for example, <a href="http://www.codeproject.com/KB/stl/stlcontainer.aspx" rel="noreferrer">this one over at codeproject</a>, and obviously the actual stl containers), but I'm not exactly sure what components of those containers I need to have.</p>
  
  <p>From what i could gather, I need at least these things:</p>
  
  <ol>
  <li><p>STL-compliant Iterators (the current stl only uses bi-directional or higher iterators, don't know if this is a requirement or just happens-chance, still figuring out what's necessary to be considered a "stl-compliant iterator")</p></li>
  <li><p>Mechanism for defining allocators (default to <code>std::allocator</code>), as well as using them correctly (still trying to figure out what this last part means)</p></li>
  <li><p>public typedefs for metaprogramming (pointer type, const pointer type, reference type, value type, const reference type, difference type, maybe some others?). Side question: What is a <code>difference type</code>?</p></li>
  <li><p>'generic' (i.e. uses metaprogramming/templates to make the container able to hold pretty much any type)</p></li>
  </ol>
  
  <p>Is there anything else I've missed, or worse, got wrong in the above list (perhaps things such as const-correctness, thread safety, exceptions generation/handling, etc.)? Also, is there a specifications doc somewhere detailing what is required, if such a thing even exists?</p>