¿Cómo se llaman los destructores privados de objetos estáticos? [duplicar]

Posible duplicado:
No se puede acceder al miembro privado en el destructor de clase de singleton

Estoy implementando un singleton como abajo.

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;
 }

losdestructor es privado. ¿Se llamará para el objeto theMainInstance cuando el programa esté a punto de terminar?

Intenté esto en Visual Studio 6, dio un error de compilación.

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

En Visual Studio 2010, esto se compiló y eldestructor fue llamado.

¿Cuál debería ser la expectativa aquí según el estándar?

Edit: La confusión surge ya que el comportamiento de Visual Studio 6 no es tan tonto. Se puede argumentar que el constructor de A para el objeto estático se llama en el contexto de una función de A. Pero elEl destructor no se llama en el contexto de la misma función.. Esto se llama desde un contexto global.

Respuestas a la pregunta(1)

Su respuesta a la pregunta