Template with boost::operators extremely verbose and repeating
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; {