title: Traits and passing traits as template parameters
body: <p>When is it practical to pass traits as template parameters rather than simply using some existing traits struct like </p>
  
  <p><code>typedef basic_ofstream&lt; char, char_traits&lt;char&gt; &gt;</code> </p>
  
  <p>vs. </p>
  
  <p><code>typedef basic_ofstream&lt; char &gt;</code>?</p>
  
  <p>I have some tile classes which I would like to have some common ground (traits), so I designed <code>tile_traits</code> to contain all the basic info about a tile, such as <code>int_type</code> and <code>flag_type</code>, like so:</p>
  
  <pre><code>//unspecialized
  template&lt;typename T&gt; struct tile_traits;
  //... other stuff here, declaration of a tile class
  template&lt;&gt;
  struct tile_traits&lt;tile_class&gt;
  {
     typedef tile_class::int_type  int_type;
     typedef tile_class::flag_type flag_type;
     //other possible tile info here.
  }
  </code></pre>
  
  <p>Is designing traits as such considered a <strong>traits-blob</strong>?</p>