I wrote a function like below:
template <typename T>
std::tuple<std::vector<T>, T, T> f() {
std::vector<T> p(1000);
return std::make_tuple(std::move(p), 10, 10);
}
Since the return type is quite complicated, is it guaranteed that under c++11 the compiler will either apply copy elision or move semantic when it constructs the result or I have to explicitly say something like std::move(std::make_tuple(std::move(p), 10, 10))?