Questo era un errore che ho trovato in un'applicazione server che utilizza Valgrind.Inizializzazione di un membro di riferimento con se stesso legale?
struct Foo
{
Foo(const std::string& a)
: a_(a_)
{
}
const std::string& a_;
};
con gcc -Wall non si riceve un avviso. Perché questo codice legale?
Purtroppo gcc non sembra mai di mettere in guardia di auto-inizializzazione nelle liste di inizializzazione (anche con -Wall -Wextra) - è davvero fastidioso se ti piace dare ai parametri ctor lo stesso nome dei membri, perché un errore di battitura nel parametro renderà l'inizializzazione fallita in modo silenzioso. –
-Wextra avverte sul parametro non utilizzato 'a', che è un buon suggerimento, ma non ha rilevato il vero problema. –
Neanche con -Winit-self :( – UncleBens