¿Reinterpret_cast conduce a un comportamiento indefinido?

Tengo una plantilla de claseA que contiene un contenedor de punteros (T*):

template <typename T>
class A {
public:
   // ... 
private:
   std::vector<T*> data;
};

y un montón de funciones como:

void f(const A<const T>&);
void g(const A<const T>&);

¿Está bien llamar a estas funciones a través de un elenco desdeA<const T> aA<T>?

A<double> a;
... 
auto& ac = reinterpret_cast<const A<const double>&>(a);
f(ac);

Estoy bastante seguro de que este código tiene un comportamiento indefinido.

¿Es peligroso usar tales conversiones en la vida real?

Respuestas a la pregunta(2)

Su respuesta a la pregunta