Chcesz zwracać referencję do obiektu, nie tworząc obiektu tylko próbując zwracać adres wartości tymczasowej. Tak się nie da.
Potrzebujesz utworzyć obiekt w pamięci, żeby móc zwrócić referencję do niego. Zwróć też uwagę na to, ile czasu ów obiekt żyje po zwróceniu takiej referencji.
Zazwyczaj zabieg zwracania referencji robi się dla metod klasy, zwracając referencję do obiektu, na rzecz którego dana metoda zostaje wywołana.
Nie wiem, po co Ci zwracanie referencji do typów prostych. Powinieneś to robić przez wartość.
Nie wiem, jakie są obecne trendy, ale takie działanie było kiepskim pomysłem:
Foo &function()
{
Foo bar;
// ...
return bar; // po wyjściu poza zakres "function", obiekt "bar" powinien zostać zniszczony... GCC rzucał ostrzeżeniem, ale zezwalał na takie kwiatki.
}
Bardzo proszę mnie poprawić, jeśli się mylę.