C ++ 11 tipos de retorno automáticos e de função

Eu sei da diferença entreauto, auto&, const auto econst auto& (por exemplo, em um loop "para cada"), mas uma coisa que me surpreendeu é:

std::string bla;
const std::string& cf()
{
    return bla;
}


int main (int argc, char *argv[])
{
    auto s1=cf();
    const std::string& s2=cf();
    s1+="XXX"; // not an error
    s2+="YYY"; //error as expected
}

Então alguém pode me dizer quando o tipo dex na expressãoauto x = fun(); não será o mesmo tipo que o tipo do valor de retorno dofun()?

questionAnswers(2)

yourAnswerToTheQuestion