#include <string>
#include <vector>
using namespace std;
auto f()
{
vector<string> coll{ "hello" };
//
// Must I use move(coll[0]) ?
//
return coll[0];
}
int main()
{
auto s = f();
DoSomething(s);
}
Я знаю: если я просто return coll;
, то coll
гарантированно будет возвращен.
Однако я не уверен: Возможно ли, что coll[0]
будет перемещено по возврату?
Update:
#include <iostream>
struct A
{
A() { std::cout << "constructed\n"; }
A(const A&) { std::cout << "copy-constructed\n"; }
A(A&&) { std::cout << "move-constructed\n"; }
~A() { std::cout << "destructed\n"; }
};
struct B
{
A a;
};
A f()
{
B b;
return b.a;
}
int main()
{
f();
}
gcc 6.2 и clang 3.8 выводит то же самое:
построен
копия возведенных
разрушаются
разрушаются