C++ 'using': Should I use it or should I avoid it?
<p>I realize there are subtly different semantics for some of these, because of ADL.</p>

<p>In general, though: Which one should I prefer (if any), and why?<br>
(Or does it depend on the situation (e.g. inline header vs. implementation?)</p>

<p>Also: should I prefer <code>::std::</code> over <code>std::</code>?</p>

<pre><code>using namespace std;

pair&lt;string::const_iterator, string::const_iterator&gt; f(const string &amp;s)
{
    return make_pair(s.begin(), s.end());
}
</code></pre>

<p>or</p>

<pre><code>std::pair&lt;std::string::const_iterator, std::string::const_iterator&gt; f(const std::string &amp;s)
{
    return std::make_pair(s.begin(), s.end());
}
</code></pre>

<p>or</p>

<pre><code>using std::pair;
using std::string;

pair&lt;string::const_iterator, string::const_iterator&gt; f(const string &amp;s)
{
    return make_pair(s.begin(), s.end());
}
</code></pre>

<p>or</p>

<pre><code>std::pair&lt;std::string::const_iterator, std::string::const_iterator&gt; f(const std::string &amp;s)
{
    using std::make_pair;
    return make_pair(s.begin(), s.end());
}
</code></pre>

<p>or</p>

<pre><code>std::pair&lt;std::string::const_iterator, std::string::const_iterator&gt; f(const std::string &amp;s)
{
    using namespace std;
    return make_pair(s.begin(), s.end());
}
</code></pre>

<p>or something else?</p>

<p>(This is assuming I don't have C++11 and <code>auto</code>.)</p>
