Esto fue un error que encontré en una aplicación de servidor usando Valgrind.¿Inicializar un miembro de referencia consigo mismo es legal?
struct Foo
{
Foo(const std::string& a)
: a_(a_)
{
}
const std::string& a_;
};
con gcc -Wall usted no recibe una advertencia. ¿Por qué es este código legal?
Desafortunadamente gcc nunca parece advertir acerca de la auto-inicialización en las listas de inicializador (incluso con -Wall -Wextra) - es realmente molesto si le gusta dar a los parámetros del ctor los mismos nombres que los miembros, porque un error tipográfico en el parámetro hará que la inicialización falle silenciosamente. –
-Wextra advierte sobre el parámetro no utilizado 'a', que es una buena pista, pero no detectó el problema real. –
Ni siquiera con -Winit-self :( – UncleBens