reinterpret_cast para casi datos de pod (es suficiente compatibilidad de diseño)

Estoy tratando de aprender sobrestatic_cast yreinterpret_cast.

Si estoy en lo correcto, el estándar (9.2.18) dice quereinterpret_cast para los datos del pod es seguro:

Un puntero a un objeto POD-struct, convertido adecuadamente usando unreinterpret_cast, apunta a su miembro inicial (o si ese miembro es un campo de bits, entonces a la unidad en la que reside) y viceversa. [Nota: Por lo tanto, puede haber relleno sin nombre dentro de un objeto POD-struct, pero no al principio, según sea necesario para lograr la alineación adecuada. - nota final]

Mi pregunta es cómo interpretar esto estrictamente. ¿Es, por ejemplo, suficiente compatibilidad de diseño? ¿Y si no, Pórque no

ara mí, el siguiente ejemplo muestra un ejemplo en el que una interpretación estricta de 'solo el POD es válido' parece estar equivocada.

class complex_base  // a POD-class (I believe)
{
public:  
  double m_data[2];
};

class complex : public complex_base
{  //Not a POD-class (due to constructor and inheritance)
public:
  complex(const double real, const double imag); 
}

double* d = new double[4];
//I believe the following are valid because complex_base is POD
complex_base& cb1 = reinterpret_cast<complex_base&>(d[0]);  
complex_base& cb2 = reinterpret_cast<complex_base&>(d[2]);
//Does the following complete a valid cast to complex even though complex is NOT POD?
complex& c1 = static_cast<complex&>(cb1);
complex& c2 = static_cast<complex&>(cb2);

Además, ¿qué puede romperse sicomplex_base::m_data está protegido (lo que significa quecomplex_base no es pod) [EDITAR: y cómo me protejo / detecto tales roturas]

e parece que la compatibilidad de diseño debería ser suficiente, pero esto no parece ser lo que dice el estánda

EDIT: Gracias por las respuestas. También me ayudaron a encontrar esto,http: //www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2342.ht

Respuestas a la pregunta(2)

Su respuesta a la pregunta