考虑以下代码:
MSVC9.0(Visual Studio 2008的C++编译器)会生成默认构造函数,但无法为C生成复制和赋值运算符,尽管C是A的友元。这是预期行为还是Microsoft的错误?我认为后者是正确的,如果我是正确的,是否有人可以指出一个讨论此问题或Microsoft已经对此错误做出反应的文章/论坛/...。谢谢您提前。
示例代码:
class A
{
friend class B;
friend class C;
};
class B: virtual private A
{
};
class C: private B
{
};
int main()
{
C x; //OK default constructor generated by compiler
C y = x; //compiler error: copy-constructor unavailable in C
y = x; //compiler error: assignment operator unavailable in C
}
MSVC9.0(Visual Studio 2008的C++编译器)会生成默认构造函数,但无法为C生成复制和赋值运算符,尽管C是A的友元。这是预期行为还是Microsoft的错误?我认为后者是正确的,如果我是正确的,是否有人可以指出一个讨论此问题或Microsoft已经对此错误做出反应的文章/论坛/...。谢谢您提前。
P.S.顺便说一句,如果将两个私有继承都改为受保护的,一切都可以正常工作
P.P.S.我需要证明上述代码是合法的还是非法的。我确实打算让具有虚拟私有基类的类不能派生,就我所知。但他们似乎错过了朋友的部分。所以...这是我的第一个赏金 :)