Your vector is a local variable. It exists within the function and is destroyed when the function ends.
Consequently, your reference is dangling. It refers to an object that no longer exists.
Just return by value; your compiler is smart enough to optimise away a pointless copy, even if you are pre-C++11 and thus don't have move semantics.