title: Reasoning about boost mpl placeholders
body: <p>The <a href="http://www.boost.org/doc/libs/1_56_0/libs/mpl/doc/tutorial/implementing-division.html" rel="nofollow">Tutorial: Metafunctions and Higher-Order Metaprogramming</a> section of the Boost MPL library documentation states that <code>transform</code> can be invoked like so</p>
  
  <pre><code>typename mpl::transform&lt;D1,D2, mpl::minus&lt;_1,_2&gt; &gt;::type
  </code></pre>
  
  <p>where the placeholders <code>_1</code> and <code>_2</code> signify that when the transform's <code>BinaryOperation</code> is invoked, its first and second arguments will be passed on to minus in the positions indicated by <code>_1</code> and <code>_2</code>, respectively.</p>
  
  <p>I've been reading this over and over again for almost a month and I still don't understand it.</p>
  
  <p>What values exactly do the placeholders <code>_1</code> and <code>_2</code> have? <code>D1</code> and <code>D2</code>? If so, why not write <code>mpl::minus&lt;D1,D2&gt;</code>? Also considering that the placeholders are <a href="http://www.boost.org/doc/libs/1_56_0/libs/mpl/doc/tutorial/placeholders.html" rel="nofollow">defined as</a> <code>typedef arg&lt;1&gt; _1;</code> and <code>typedef arg&lt;2&gt; _2;</code> and consequently the original expression <em>in my mind</em> amounts to</p>
  
  <pre><code>typename mpl::transform&lt;D1,D2, mpl::minus&lt;&lt;arg&lt;1&gt;,&lt;arg&lt;2&gt; &gt; &gt;::type
  </code></pre>
  
  <p>I'm sure I'm thinking about placeholders the wrong way. I'd appreciate some guidance here.</p>