VS2015 Update 1-Fehler oder fehlerhaftes C ++: Warum kann eine Freundesklasse nicht auf den geschützten Destruktor ihres Freundes zugreifen?

Das Folgende scheint ein Muster zu sein, das von ZeroC ICE in dem Code verwendet wird, den es automatisch generiert. Dies scheint mir eine Möglichkeit zu sein, Singletons (nicht sicher warum) für viele Releases ihres Tools zu erstellen. Verschiedene Compiler haben kein Problem damit, bis ich heute festgestellt habe, dass Visual Studio 2015 Update 1 (VS Version 14.0.24720.00, VC ++ Version 19.00.23506) einen Fehler ausgibt. Vor Update 1 hatte VS2015 auch kein Problem damit. Ich bin mir nicht sicher, ob es sich um einen Fehler (Regression?) Im VS2015-C ++ - Compiler mit Update 1 oder um einen schlechten (nicht standardkonformen) C ++ - Code handelt, den andere Compiler abrutschen lasse

Hier ist ein Beispiel für das Codemuster:

class Foo {
protected:
    virtual ~Foo() {}

    friend class Foo_init;
};

class Foo_init {
public:
    Foo init;
};

static Foo_init staticFooInit;

VS2015 Update 1 gibt folgende Fehler aus:

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'

Ich habe eine gefunden (noch nicht beantwortet)ZeroC ICE Forumsbeitrag, das damit zusammenhängt, aber ansonsten habe ich bei meiner Google-Suche nichts herausgefunden, was mich davon überzeugt, ob es sich um ein Compiler-Problem oder einen schlechten Code handelt. Ich gebe zu, dass ich ZeroC ICE nicht sehr gut kenne, und ich benutze C ++ - Freundesklassen nicht genug, um ein tiefes Verständnis dafür zu haben, was Sie mit ihnen anfangen können und was nicht. Ich hoffe, dass jemand mit mehr Kenntnissen Licht ins Dunkel bringen kann.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage