Os ponteiros para literais de string permanecem válidos depois que uma função retorna?

O ponteiro retornado pela função a seguir é válido?

const char * bool2str( bool flg )
{
    return flg ? "Yes" : "No";
}

Funciona bem no Visual C ++ e g ++. O que o padrão C ++ diz sobre isso?