<HTML>
<HEAD>
<TITLE>binary_negate</TITLE>
<LINK REL=StyleSheet HREF="../rw.css" TYPE="text/css" TITLE="Apache stdcxx Stylesheet"></HEAD>
<BODY BGCOLOR=#FFFFFF>
<A HREF="binary-function.html"><IMG SRC="images/bprev.gif" WIDTH=20 HEIGHT=21 ALT="Previous file" BORDER=O></A><A HREF="noframes.html"><IMG SRC="images/btop.gif" WIDTH=56 HEIGHT=21 ALT="Top of Document" BORDER=O></A><A HREF="booktoc.html"><IMG SRC="images/btoc.gif" WIDTH=56 HEIGHT=21 ALT="Contents" BORDER=O></A><A HREF="tindex.html"><IMG SRC="images/bindex.gif" WIDTH=56 HEIGHT=21 ALT="Index page" BORDER=O></A><A HREF="binary-search.html"><IMG SRC="images/bnext.gif" WIDTH=25 HEIGHT=21 ALT="Next file" BORDER=O></A><DIV CLASS="DOCUMENTNAME"><B>Apache C++ Standard Library Reference Guide</B></DIV>
<H2>binary_negate</H2>
<P><B>Library:</B>&nbsp;&nbsp;<A HREF="2-4.html">General utilities</A></P>

<PRE><HR><B><I>binary_negate</I></B> <IMG SRC="images/inherits.gif"> <B><I><A HREF="binary-function.html">binary_function</A></I></B><HR></PRE>

<UL>
<LI><A HREF="#sec1">Local Index</A></LI>
<LI><A HREF="#sec2">Summary</A></LI>
<LI><A HREF="#sec3">Synopsis</A></LI>
<LI><A HREF="#sec4">Description</A></LI>
<LI><A HREF="#sec5">Interface</A></LI>
<LI><A HREF="#sec6">Constructor</A></LI>
<LI><A HREF="#sec7">Operator</A></LI>
<LI><A HREF="#sec8">See Also</A></LI>
<LI><A HREF="#sec9">Standards Conformance</A></LI>
</UL>
<A NAME="sec1"><H3>Local Index</H3></A>
<H4>Members</H4>
<UL><TABLE CELLPADDING=3>
<TR><TD VALIGN=top>
<A HREF="#idx424">binary_negate()</A><BR>
</TD>
<TD VALIGN=top><A HREF="#idx425">operator()()</A><BR>
</TD>
<TD VALIGN=top></TD></TR>
</TABLE></UL>

<A NAME="sec2"><H3>Summary</H3></A>
<P>A function object that returns the complement of the result of its binary predicate</P>
<A NAME="sec3"><H3>Synopsis</H3></A>

<PRE>#include &lt;functional&gt;

namespace std {
  template&lt;class Predicate&gt;
  class binary_negate;
}
</PRE>
<A NAME="sec4"><H3>Description</H3></A>
<P><B><I>binary_negate</I></B> is the function object class that is the return type for the function adaptor <SAMP><A HREF="not2.html">not2()</A></SAMP>. <SAMP>not2()</SAMP>, known as a negator, takes a binary predicate function object as its argument and returns a binary predicate function object that is the complement of the original. </P>
<P>Note that <SAMP><A HREF="not2.html">not2()</A></SAMP> works only with function objects that are defined as subclasses of the class <B><I><A HREF="binary-function.html">binary_function</A></I></B>.</P>
<A NAME="sec5"><H3>Interface</H3></A>

<UL><PRE>namespace std {
 
  template&lt;class Predicate&gt;
  class binary_negate : public 
       binary_function&lt;typename Predicate::first_argument_type,
                       typename Predicate::second_argument_type,
                       bool&gt;
  {
  public:

    typedef typename binary_function&lt;
              typename Predicate::first_argument_type,
              typename Predicate::second_argument_type,
              bool&gt;::second_argument_type second_argument_type;

    explicit binary_negate (const Predicate&amp;);
    bool operator()
         (const typename Predicate::first_argument_type&amp;,
          const typename Predicate::second_argument_type&amp;)
         const;
  };

  // Nonmember Functions

  template &lt;class Predicate&gt;
  binary_negate&lt;Predicate&gt; not2 (const Predicate&amp; pred);
}
</PRE></UL>
<A NAME="sec6"><H3>Constructor</H3></A>

<A NAME="idx424"></A><PRE>explicit <B>binary_negate</B>(const Predicate&amp; pred);</PRE>
<UL>
<P>Constructs a <B><I>binary_negate</I></B> object from predicate <SAMP>pred</SAMP>.</P>
</UL>

<A NAME="sec7"><H3>Operator</H3></A>

<A NAME="idx425"></A><PRE>bool 
<B>operator()</B>(const first_argument_type&amp; x,
            const second_argument_type&amp; y) const;</PRE>
<UL>
<P>Returns the result of <SAMP>!pred(x,y)</SAMP>.</P>
</UL>

<A NAME="sec8"><H3>See Also</H3></A>
<P><B><I><A HREF="binary-function.html">binary_function</A></I></B>, <SAMP><A HREF="not2.html">not2()</A></SAMP>, <B><I><A HREF="unary-negate.html">unary_negate</A></I></B></P>
<A NAME="sec9"><H3>Standards Conformance</H3></A>
<P><I>ISO/IEC 14882:1998 -- International Standard for Information Systems -- Programming Language C++, Section 20.3.5</I></P>

<BR>
<HR>
<A HREF="binary-function.html"><IMG SRC="images/bprev.gif" WIDTH=20 HEIGHT=21 ALT="Previous file" BORDER=O></A><A HREF="noframes.html"><IMG SRC="images/btop.gif" WIDTH=56 HEIGHT=21 ALT="Top of Document" BORDER=O></A><A HREF="booktoc.html"><IMG SRC="images/btoc.gif" WIDTH=56 HEIGHT=21 ALT="Contents" BORDER=O></A><A HREF="tindex.html"><IMG SRC="images/bindex.gif" WIDTH=56 HEIGHT=21 ALT="Index page" BORDER=O></A><A HREF="binary-search.html"><IMG SRC="images/bnext.gif" WIDTH=20 HEIGHT=21 ALT="Next file" BORDER=O></A>

<!-- Google Analytics tracking code -->
<script src="http://www.google-analytics.com/urchin.js" type="text/javascript">
</script>
<script type="text/javascript">
    _uacct = "UA-1775151-1";
    urchinTracker();
</script>
<!-- end of Google Analytics tracking code -->

</BODY>
</HTML>
