¿El pirateo de miembros privados es un comportamiento definido?

Tengo la siguiente clase:

class BritneySpears
{
  public:

    int getValue() { return m_value; };

  private:

    int m_value;
};

Que es una biblioteca externa (que no puedo cambiar). Obviamente no puedo cambiar el valor dem_value, solo léelo. Incluso derivando deBritneySpears no funciona

¿Qué pasa si defino la siguiente clase:

class AshtonKutcher
{
  public:

    int getValue() { return m_value; };

  public:

    int m_value;
};

Y luego hacer:

BritneySpears b;

// Here comes the ugly hack
AshtonKutcher* a = reinterpret_cast<AshtonKutcher*>(&b);
a->m_value = 17;

// Print out the value
std::cout << b.getValue() << std::endl;

Se que esto esmalo práctica. Pero solo por curiosidad:¿Está garantizado que esto funcione? ¿Es un comportamiento definido?

Pregunta extra: ¿Alguna vez has tenido que usar un truco tan feo?

Editar: solo para asustar a menos personas: no tengo la intención de hacer esto realmente enreal código. Sólo me pregunto ;)

Respuestas a la pregunta(6)

Su respuesta a la pregunta