以下似乎是 ZeroC ICE 在其自动生成的代码中使用的模式,在我看来,这似乎是他们现在为他们的工具的许多版本制作单例的一种方式(不知道为什么)。各种编译器都没问题,直到今天发现Visual Studio 2015 Update 1(VS版本14.0.24720.00,VC++版本19.00.23506)报错。在Update 1之前,VS2015也没有问题。我不确定这是带有 Update 1 的 VS2015 C++ 编译器中的错误(回归?),还是其他编译器让其滑落的不良(不符合标准)C++ 代码。
以下是代码模式的示例:
class Foo {
protected:
virtual ~Foo() {}
friend class Foo_init;
};
class Foo_init {
public:
Foo init;
};
static Foo_init staticFooInit;
VS2015 Update 1 发出以下错误:
example.cpp(13): error C2248: 'Foo::~Foo': cannot access protected member declared in class 'Foo'
example.cpp(3): note: see declaration of 'Foo::~Foo'
example.cpp(1): note: see declaration of 'Foo'
我发现了一篇(尚未得到答复)ZeroC ICE 论坛帖子,似乎与此相关,但除此之外,我在 Google 搜索中没有发现任何可以说服我这是编译器问题还是错误代码的内容。我承认我不太了解 ZeroC ICE,我也没有使用 C++ 朋友类来深入了解你可以用它们做什么和不能做什么。我希望有更多知识的人可以对此有所了解。