In:
namespace hide {
    int k;
    }

namespace {
    int i;
    namespace hide {
        int j;
        }
    }

void F(int) {}

int main() {
    F(i);
    F(hide::j);
    }

you get:

~/ootbc/members/src$ g++ foo.cc
foo.cc: In function `int main()':
foo.cc:16: error: `hide' has not been declared
foo.cc:16: error: `j' undeclared (first use this function)
foo.cc:16: error: (Each undeclared identifier is reported only once for each
function it appears in.)

i.e. the lookup for "hide" fails whereas a simple variable "i" is found.

My (probably erroneous) understanding is that the anonymous namespace has no 
impact on name scope; exports all names declared within it to filescope; and 
simply replaces the old "static" to prevent cluttering the linker namespace. 
That seems to be the case with "i". However, if that rule were applied to 
"hide" 
then the two "hide"s would be at the same level and would merge as namespaces 
do, rather than the inner one being hidden as happened. This problem arose 
because I was trying to declare a filescope name ("j") in a way that *neither* 
cluttered the compiler's space nor the linkers. 

If this is in fact an error, please change this report to a complaint about the 
diagnostic.

Ivan

-- 
           Summary: namespace name lost
           Product: gcc
           Version: 3.4.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P2
         Component: c++
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: igodard at pacbell dot net
                CC: gcc-bugs at gcc dot gnu dot org


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20293

Reply via email to