Warum gibt decltype (auto) hier eine Referenz zurück?

Ich denke (dachte) ich versteheauto. Gleiches überdecltype. In C ++ 14 kann man jedoch etwas Diabolisches wie @ habedecltype(auto) als Rückgabetyp einer Funktion. Folgendes berücksichtigen

decltype(auto) foo()
{
    int m = 1;
    return m;
}

Der Rückgabetyp istint, alles macht Sinn.

Jedoch

decltype(auto) foo()
{
    int m = 1;
    return (m);
}

kehrt zurückint& (d. h. Verweis aufint).

Ich habe absolut keine Ahnung, warum das passiert, warum machen diese Klammern überhaupt einen Unterschied !? Hoffe, jemand kann etwas Licht ins Dunkel bringen.

PS: Ich habe auch getaggt mitC++ da es viel mehr Leute gibt, die das @ überprüfC++ tag thanC++14.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage