title: Are super-SCARY iterators legal?
body: <p>I understand that the standard allows <code>std::vector&lt;int, A&gt;</code> to have the same type of iterators for different allocators <code>A</code>. This is called <a href="https://stackoverflow.com/q/14391705/734069">SCARY iterators</a>.</p>
  
  <p>Now the question is does the standard allow <code>std::vector&lt;int, A&gt;::iterator</code> be simply a typedef of <code>A::pointer</code>, thus making it just an <code>int*</code> for the default allocator? </p>
  
  <p>Or is there some (implicit) requirement for it to be a separate class type per container? If there is no such requirement then why all major implementations (including the SCARY ones) don't use this approach? It would presumably reduce compiler work even further, though now code that overloads on <code>int*</code> and <code>vector&lt;&gt;::iterator</code> will not compile.</p>