Inicializar un miembro de referencia con sí mismo legal

Este fue un error que encontré en una aplicación de servidor usando Valgrind.

struct Foo
{
    Foo(const std::string& a)
        : a_(a_)
    {
    }
    const std::string& a_;
};

con gcc -Wall no recibe una advertencia. ¿Por qué es este código legal?