我在一些旧的库代码中捣乱,其基本目标是重构它.这个旧代码并不完全符合最佳实践和美观(是的 - 朋友很糟糕,并且在发现下面之后它已被删除 - 因为它是重构的疏忽).
现在准备运行一些单元测试我用clang ++,g ++和vc ++编译了代码(2005年 - 是的,我知道它已经过时了,但为了向后兼容 - 我必须这样做).
g ++和clang ++编译并运行没有错误,但Visual C++抱怨,所以在查看代码后,我发现了一些效果:
#include <iostream>
class one {
private:
struct private_impl;
private_impl* pimpl_;
public:
one();
~one();
void say_hello();
};
class two {
private:
friend class one;
void say_world();
public:
};
struct one::private_impl {
two t;
void say_world();
};
void one::private_impl::say_world() {
std::cout << " ";
t.say_world(); //This should not work should it?
}
one::one() : pimpl_(new private_impl) { }
one::~one() {
delete pimpl_;
}
void one::say_hello() …Run Code Online (Sandbox Code Playgroud)