Se alterar um objeto const é um comportamento indefinido, como os construtores e destruidores operam com acesso de gravação?

O padrão C ++ diz que modificar um objeto originalmente declaradoconst é um comportamento indefinido. Mas então como operam os construtores e destruidores?

class Class {
public:
    Class() { Change(); }
    ~Class() { Change(); }
    void Change() { data = 0; }
private:
    int data;
};

//later:
const Class object;
//object.Change(); - won't compile
const_cast<Class&>( object ).Change();// compiles, but it's undefined behavior

Quero dizer, aqui o construtor e o destruidor fazem exatamente a mesma coisa que o código de chamada, mas eles podem alterar o objeto e o chamador não é permitido - ele tem um comportamento indefinido.

Como é que ele deve funcionar em uma implementação e de acordo com o padrão?

questionAnswers(5)

yourAnswerToTheQuestion