title: static_assert for ensuring design contract
body: <p>As a part of a team of developers, I wanted to ensure that a set of  functions (and operators) are implemented on the custom iterators that we publish. Using STL iterator types as base types help, however due to some reasons(outside my control) we decide not to enforce STL compatibility. The iterators are consumed by the same team and by people across the company. </p>
  
  <p><strong>I wanted to design a template class that consumes the iterator type and tests against the design contract.</strong></p>
  
  <p>For example, I would expect an iterator to implement a operator++ , operator-- and also declare the required typedefs. </p>
  
  <p>1> Is it possible to implement such a template class that enforces the design contract ? probably using static_assert ?</p>
  
  <p>2> If yes, is this a good design ?</p>
  
  <p>reference : <a href="https://stackoverflow.com/questions/3582608/how-to-correctly-implement-custom-iterators-and-const-iterators">custom iterator</a></p>