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



etherice <scottbaldwin at gmail dot com> changed:



           What    |Removed                     |Added

----------------------------------------------------------------------------

                 CC|                            |scottbaldwin at gmail dot

                   |                            |com



--- Comment #7 from etherice <scottbaldwin at gmail dot com> 2012-10-27 
08:11:45 UTC ---

As Jonathan explains in comment #5, gcc is right to reject this code and MSVC

is wrong to accept it. You will have to add a forward declaration of the

class/function in order to declare it as a friend in the namespaced class. For

example:



// on gcc 4.7.0 (linux), these forward declarations are required for the friend

declarations in ns::NamespacedClass

class GlobalClass;

void globalFunction();



namespace ns {

    struct NamespacedClass {

        friend ::GlobalClass; // same result whether '::' or 'class' is part of

declaration

        friend void ::globalFunction();

    private:

        NamespacedClass() {}

    };

}



struct GlobalClass {

    GlobalClass() { ns::NamespacedClass foo; }

};



void globalFunction() {

    ns::NamespacedClass foo;

}

Reply via email to