Como os destruidores privados de objetos estáticos são chamados? [duplicado]

Duplicata Possível:
Não é possível acessar o membro particular no destrutor de classe singleton

Estou implementando um singleton como abaixo.

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

odestruidor é privado. Isso será chamado pelo objeto theMainInstance quando o programa estiver prestes a terminar?

Eu tentei isso no Visual Studio 6, deu um erro de compilação.

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

No visual studio 2010, isso foi compilado e odestruidor foi chamado.

Qual deve ser a expectativa aqui de acordo com o padrão?

Edit: A confusão surge uma vez que o comportamento do Visual Studio 6 não é tão burro. Pode-se argumentar que o construtor de A para o objeto estático é chamado no contexto de uma função de A. Mas odestruidor não é chamado no contexto da mesma função. Isso é chamado de um contexto global.

questionAnswers(1)

yourAnswerToTheQuestion