¿Cuál es la forma "correcta" de evitar Aliasing (por ejemplo, al agregar un elemento de un contenedor a sí mismo) en C ++?

std::vector<int> a;
a.push_back(1);
a.push_back(a[0]);

I solo aprendí que el código anterior puede ser muy peligroso.

(Si no es obvio por qué, no estás solo ... tampoco lo fue para mí).

Mis preguntas

¿Cuál es la forma "estándar" de tratarlo? Hacer una nueva variable y luego asignarla inmediatamente a algo posterior me parece un poco extraño. ¿Hay una mejor manera de lidiar con eso?

Cómo te entrenas para tener cuidado con los problemas de alias como este? ¿Qué patrón (s) buscas? No tengo idea de reconocer esta situación; Solo aprendí sobre alias cuando supe sobre elrestrict palabra clave en C, y solo ahora entiendo cuál es realmente el problema.

Editar

Me encantaría aceptar una respuesta, pero no parece que se haya respondido parte (2) de la pregunta. Me pregunto qué estrategias utilizan las personas para localizar errores de alias en el código que han escrito.

Una estrategia que se me ocurrió hasta ahora es evitar pasar el mismo valor en dos parámetros. (En este caso, un parámetro es implícito y otro explícito).

¿Hay otras cosas fáciles de notar y tener en cuenta?

Respuestas a la pregunta(5)

Su respuesta a la pregunta