depends
  on whether or not the Predicate's <tt>argument_type</tt> is a reference. If
  it is a reference, we want to declare it simply as <tt>argument_type</tt>;
  if it is a value we want to declare it as
  <tt>const&nbsp;argument_type&amp;</tt>.</p>

  <p>The Boost <a href="../utility/call_traits.htm">call_traits</a> class
  template contains a <tt>param_type</tt> typedef, which uses partial
  specialisation to make precisely this decision. If we were to declare
  <tt>operator()</tt> as</p>

  <blockquot