Why can't operator!= do the conversion?
<p>I have following code with error:</p>

<blockquote>
  <p>(Visual Studio error:)Error   5   error C2678: binary '!=' : no operator found which takes a left-hand operand of type '` Node' (or there is no acceptable conversion)     </p>
</blockquote>

<pre><code>  template &lt;class C, class T&gt;
    C find2 ( C first , C last, T c )
    {
        //
        while ( first != last &amp;&amp; *first != c )
        {
            ++first;
        }

        return first;
    }

    struct Node
    {
        Node(int a ,Node* b):val(a),next(b){};
        int val;
        Node* next;
    };

    template &lt;class T&gt;
    struct node_wrap
    {
        T* ptr;

        node_wrap ( T* p = 0 ) : ptr ( p ) {}
        Node&amp; operator*() const {return *ptr;}
        Node* operator-&gt;() const {return ptr;}
        node_wrap&amp; operator++ () {ptr = ptr-&gt;next; return * this;}
        node_wrap operator++ ( int ) {node_wrap tmp = *this; ++*this; return tmp;}

        bool operator== ( const node_wrap&amp; i ) const {return ptr == i.ptr;}
        bool operator!= ( const node_wrap&amp; i ) const {return ptr != i.ptr;}

    };
    bool operator== ( const Node&amp; node, int n )
    {
        return node.val == n;
    }


    int main()
    {

        Node* node1=new Node(3,NULL);
        Node* node2=new Node(4,NULL);
        node1-&gt;next = node2;
        find2 ( node_wrap&lt;Node&gt;(node1), node_wrap&lt;Node&gt;(), 3) ) ;
        delete node1;
        delete node2;
        return 0;
    }
</code></pre>

<p>what's wrong with this code?</p>
