Template with boost::operators extremely verbose and repeating I got the following ugly code:

template &lt; class _Coeff,
       unsigned _nVars,
       typename _Expo=int,
       template &lt;class, class&gt; class _Map = _Map &gt;
class Polynomial
      : boost::ring_operators&lt; Polynomial&lt;_Coeff,_nVars,_Expo,_Map&gt;
      , boost::addable       &lt; Polynomial&lt;_Coeff,_nVars,_Expo,_Map&gt;, _Coeff
      , boost::addable       &lt; Polynomial&lt;_Coeff,_nVars,_Expo,_Map&gt;,
                   std::pair&lt; std::array&lt;_Expo,_nVars&gt;, _Coeff &gt;
      , boost::subtractable  &lt; Polynomial&lt;_Coeff,_nVars,_Expo,_Map&gt;, _Coeff
      , boost::subtractable  &lt; Polynomial&lt;_Coeff,_nVars,_Expo,_Map&gt;,
                   std::pair&lt; std::array&lt;_Expo,_nVars&gt;, _Coeff &gt;
      , boost::multipliable  &lt; Polynomial&lt;_Coeff,_nVars,_Expo,_Map&gt;, _Coeff
      , boost::multipliable  &lt; Polynomial&lt;_Coeff,_nVars,_Expo,_Map&gt;,
                   std::pair&lt; std::array&lt;_Expo,_nVars&gt;,_Coeff &gt;
                &gt; &gt; &gt; &gt; &gt; &gt; &gt; {


In particular, I hate to repeat Polynomial&lt;_Coeff,_nVars,_Expo,_Map&gt;. Is there a way to improve this syntax without using the preprocessor ? I can't manage to get any help from the using keyword here.

Just for the infos: I'm writing multivariate polynomials where _Coeff is the class of the coefficients and the terms X1^4x2^4 are represented as std::array&lt;_Expo,_nVars&gt;.
Easy, with default template arguments:

template &lt; class _Coeff,
       unsigned _nVars,
       typename _Expo=int,
       template &lt;class, class&gt; class _Map = _Map
       typename Poly = Polynomial&lt;_Coeff,_nVars,_Expo,_Map&gt;,
       typename Pair = std::pair&lt; std::array&lt;_Expo,_nVars&gt;, _Coeff &gt; &gt;
class Polynomial
      : boost::ring_operators&lt; Poly
      , boost::addable       &lt; Poly, _Coeff
      , boost::addable       &lt; Poly, Pair
      , boost::subtractable  &lt; Poly, _Coeff
      , boost::subtractable  &lt; Poly, Pair
      , boost::multipliable  &lt; Poly, _Coeff
      , boost::multipliable  &lt; Poly, Pair
                &gt; &gt; &gt; &gt; &gt; &gt; &gt; {