与前瞻性宣布的阶级宣布友谊是否合法?

Jon*_*ein 2 c++ g++

我在visual studio 2008中成功构建了类似于以下代码的东西:

class OpDevconfigSession;
class DevconfigSession
{
... 
private
   friend class OpDevconfigSession;
};
Run Code Online (Sandbox Code Playgroud)

再次,这与视觉工作室相得益彰.但是,如果我尝试在g ++版本4.3.2下编译代码,我会收到一条错误消息,例如:

error: friend declaration does not name a class or function
Run Code Online (Sandbox Code Playgroud)

我知道标准一致性不是微软的强项,所以我想知道我写的代码是否以某种我尚不理解的方式打破了标准.有人有想法吗?

谢谢

Ste*_*e M 7

您的代码段后面缺少冒号private.在修复之后,它以G ++(http://codepad.org/XJuyEq9z)的方式运行For Me™.

它也是标准的 - 你甚至不需要单独的前向声明.请参阅标准11.4中的此示例:

class X {
    enum { a=100 };
    friend class Y;
};

class Y {
    int v[X::a];        // OK, Y is a friend of X
};
Run Code Online (Sandbox Code Playgroud)