title: Why this code isn't compile with VS2010 and gcc 4.8.1
body: <p>Simple, please,look this code:</p>
  
  <pre><code>namespace B
  {
  
      struct A{ int i; } ;
  
      A getA(int i);
  }
  
  //        ____ if I'll delete '::' then program successfull compiled.
  //       /
  ::B::A  ::B::getA(int i){ ::B::A a = {i}; return a;}
  
  #include &lt;cstdio&gt;
  int main()
  {
  
    ::B::A a = ::B::getA(2);
  
    printf("%d\n", a.i);
  
  }
  </code></pre>
  
  <p>Error list  VS2010:</p>
  
  <pre><code>1&gt;main.cpp(94): error C3083: 'B': the symbol to the left of a '::' must be a type
  1&gt;main.cpp(94): error C2039: 'getA' : is not a member of 'B::A'
  1&gt;main.cpp(88) : see declaration of 'B::A'
  1&gt;error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
  1&gt;main.cpp(94): error C2440: 'return' : cannot convert from 'B::A' to 'int'
  1&gt;          No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
  1&gt;main.cpp(94): error C2617: 'getA' : inconsistent return statement
  1&gt;main.cpp(94) : see declaration of 'getA'
  </code></pre>
  
  <p>Gcc.4.8.1 error list ( <a href="http://ideone.com/TG4Hzr" rel="nofollow">from ideone.com</a>):</p>
  
  <pre><code>   prog.cpp:10:1: error: ‘B’ in ‘struct B::A’ does not name a type
   ::B::A  ::B::getA(int i){ ::B::A a = {i}; return a;}
   ^
  </code></pre>
  
  <p><strong>Q: It's a bug or I'm not understand something ?</strong></p>