title: Negate boost range filtered adaptor
body: <p>Is it possible/achievable to negate a boost filtered adaptor, e.g.</p>
  
  <pre><code>std::vector&lt;int&gt; v = {1, 2, 3, 4, 5};
  for(auto i : v | !filtered(is_even))
      std::cout &lt;&lt; i &lt;&lt; std::endl; // prints 1,3,5
  </code></pre>
  
  <p>instead of doing the negation inside the lambda expression?</p>
  
  <p><strong>Motivation:</strong> I work a lot with filtered and lambda functions, however when I use a filter more than once I usually refactor it into a custom filter, e.g.</p>
  
  <pre><code>for(auto i : v | even) // note: my filters are more complex than even.
      std::cout &lt;&lt; i &lt;&lt; std::endl; // prints 2,4
  </code></pre>
  
  <p>Right now when I need the negation I am building a custom filter for them, e.g. </p>
  
  <pre><code>for(auto i : v | not_even)
      std::cout &lt;&lt; i &lt;&lt; std::endl; // prints 1,2,3
  </code></pre>
  
  <p>but I would find it nicer to just be able to negate a filter, e.g.</p>
  
  <pre><code>for(auto i : v | !even)
      std::cout &lt;&lt; i &lt;&lt; std::endl; // prints 1,2,3
  </code></pre>