Wie heißen die privaten Destruktoren statischer Objekte? [Duplikat]

Mögliche Duplikate:
Kein Zugriff auf privates Mitglied im Singleton-Klassendestruktor

Ich implementiere einen Singleton wie folgt.

class A
{
public:

    static A& instance();
private:
    A(void)
    {
        cout << "In the constructor" << endl;
    }
    ~A(void)
    {
        cout << "In the destructor" << endl;
    }

};

A& A::instance()
{
    static A theMainInstance;
    return theMainInstance;
}

int main()
{
    A& a = A::instance();

    return 0;
 }

DasDestruktor ist privat. Wird dies für das Objekt theMainInstance aufgerufen, wenn das Programm beendet wird?

Ich habe dies in Visual Studio 6 versucht, es gab einen Kompilierungsfehler.

"cannot access private member declared in class..."

Im Visual Studio 2010 wurde dies kompiliert und dieDestruktor wurde aufgerufen.

Was soll die Erwartung hier laut Norm sein?

Bearbeiten: Die Verwirrung entsteht, da Visual Studio 6 Verhalten nicht so dumm ist. Es kann argumentiert werden, dass der Konstruktor von A für das statische Objekt im Kontext einer Funktion von A aufgerufen wirddestructor wird nicht im Kontext derselben Funktion aufgerufen. Dies wird aus einem globalen Kontext heraus aufgerufen.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage