title: How to document C++ templates and template metafunctions with doxygen?
body: <p>Are there any guidelines on how C++ templates and template meta-functions should be documented with Doxygen?</p>
  
  <p>For example:</p>
  
  <pre><code>/// @brief metafunction for generation of a map of message types to
  /// their associated callbacks.
  /// @tparam Seq the list of message types
  template&lt; class Seq &gt;
  struct generate_callback_map
  {
      typedef typename mpl::transform&lt; Seq
                                     , build_type_signature_pair&lt; mpl::_1 &gt; 
                                     &gt;::type vector_pair_type;
      typedef typename fusion::result_of::as_map&lt; vector_pair_type &gt;::type type;
  };
  </code></pre>
  
  <p>So far I have seen the following suggestions:</p>
  
  <ul>
  <li><code>@tparam</code> used to document template parameters.</li>
  <li><code>@arg</code> alternative way of documenting template parameters.</li>
  <li><code>@brief</code> used to describe the metafunction.</li>
  </ul>
  
  <p>How should the 'returned type' for the metafunction be documented? </p>
  
  <p>Does anyone have any good suggestions or personal preferences for using Doxygen with C++ templates?</p>