Function specialisation with different signature
<p>Lets say I have the following class which changes data received from some other interface.</p>

<pre><code>template &lt;class T&gt;
class Updater
{
public:
    Updater():
        _db(Database&lt;T&gt;())
    {
    }

void append(T value)
{
    std::list&lt;T&gt; l = _db.get();
    l.push_back(value);
    _db.set(l);
}

void remove(T value)
{
    std::list&lt;T&gt; l = _db.get();
    l.remove(value);
            _db.set(l);
}

private:
    Database&lt;T&gt; _db;
};
</code></pre>

<p>So I'm using this with ints and floats and the likes. I get a linked list and I manipulate it.</p>

<p>But lets say I wish to use this class to work on the following type:</p>

<pre><code>std::pair&lt;std::string, std::shared_ptr&lt;void&gt;&gt;
</code></pre>

<p>That is, a block of memory associated with a name.</p>

<p>I can use the append function above, as is, to append more memory to the linked list, before passing it back to the db. However, if I wish to remove a block based on a name (the string part of the pair), I thought I could solve this with a specialization as follows:</p>

<pre><code>template &lt;&gt;
void MultiValue&lt;std::pair&lt;std::string, std::shared_ptr&lt;Block&gt;&gt;&gt;::remove(std::string value)
{
}
</code></pre>

<p>But it wont compile, complaining that is incompatible with previous definition. </p>

<p>Any suggestions on how I might solve this?</p>
