Why can I not use the namespace directive in c++ struct?
<blockquote>
  <p><strong>Possible Duplicate:</strong><br>
  <a href="http://stackoverflow.com/questions/4362831/scoped-using-directive-within-a-struct-class-declaration">Scoped using-directive within a struct/class declaration?</a><br>
  <a href="http://stackoverflow.com/questions/6326805/why-using-namespace-x-is-not-allowed-inside-class-struct-level">Why &ldquo;using namespace X;&rdquo; is not allowed inside class/struct level?</a>   </p>
</blockquote>



<p>I would like to introduce only std::string into structure. 
Why is the below considered illegal?</p>

<pre><code>#include &lt;iostream&gt;
#include &lt;string&gt;

struct Father
{
    using std::string;

    string sons[20];
    string daughters[20];
};
</code></pre>

<p>But oddly enough, i can do the following the in a function</p>

<pre><code>int main()
{
    using std::string;
}
</code></pre>

<p>Update: C++ uses the same keyword with different semantics. </p>

<p>c++ uses the keyword "using" to introduce a data member or function from the base class into the current class. Thus when i wrote using std::string inside a struct declaration, compiler is assuming that i am trying to introduce a member from a base class std. But std is not a base class, rather it is a namespace.
Thus </p>

<pre><code>struct A
{
     int i;
}

struct B:A
{
     using A::i; // legal
     using std::string// illegal, because ::std is not a class
}
</code></pre>

<p>the same "using" keyword is also used to access a member of a particular namespace.</p>

<p>So, i am guessing compiler decides the semantics of "using" based on where it is declared.</p>
