#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <iterator>
#include <sstream>
using namespace std;
class Test {
public:
Test () { cout<<"Test constructed"<<endl; }
Test (const Test&) { cout<<"Test copy constructed"<<endl; }
Test (const Test&&) { cout<<"Test move constructed"<<endl; }
Test& operator= (const Test&) { cout<<"Test copy assigned"<<endl; return *this; }
Test& operator= (const Test&&) { cout<<"Test move assigned"<<endl;return *this; }
~Test() { cout<<"Test destructed"<<endl; }
};
Test f(){
return Test();
}
std::vector<std::string> split(const std::string& s, char delimiter)
{
std::vector<std::string> tokens;
std::string token;
std::istringstream tokenStream(s);
while (std::getline(tokenStream, token, delimiter))
{
tokens.push_back(token);
}
return tokens;
}
int main()
{
auto r = split("one, two, three", ' ');
copy (r.begin(), r.end(), ostream_iterator<string>(cout," "));
auto t = f(); // 1 copy elision
t = f(); //2 move assignement
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8aXRlcmF0b3I+CiNpbmNsdWRlIDxzc3RyZWFtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNsYXNzIFRlc3QgewoJcHVibGljOgoJVGVzdCAoKSB7IGNvdXQ8PCJUZXN0IGNvbnN0cnVjdGVkIjw8ZW5kbDsgfQoJVGVzdCAoY29uc3QgVGVzdCYpIHsgY291dDw8IlRlc3QgY29weSBjb25zdHJ1Y3RlZCI8PGVuZGw7IH0KCVRlc3QgKGNvbnN0IFRlc3QmJikgeyBjb3V0PDwiVGVzdCBtb3ZlIGNvbnN0cnVjdGVkIjw8ZW5kbDsgfQoJVGVzdCYgb3BlcmF0b3I9IChjb25zdCBUZXN0JikgeyBjb3V0PDwiVGVzdCBjb3B5IGFzc2lnbmVkIjw8ZW5kbDsgcmV0dXJuICp0aGlzOyAgfQoJVGVzdCYgb3BlcmF0b3I9IChjb25zdCBUZXN0JiYpIHsgY291dDw8IlRlc3QgbW92ZSBhc3NpZ25lZCI8PGVuZGw7cmV0dXJuICp0aGlzOyB9Cgl+VGVzdCgpIHsgY291dDw8IlRlc3QgZGVzdHJ1Y3RlZCI8PGVuZGw7IH0KCn07IAoKVGVzdCBmKCl7CglyZXR1cm4gVGVzdCgpOyAKfQoKc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHNwbGl0KGNvbnN0IHN0ZDo6c3RyaW5nJiBzLCBjaGFyIGRlbGltaXRlcikKewogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gdG9rZW5zOwogICBzdGQ6OnN0cmluZyB0b2tlbjsKICAgc3RkOjppc3RyaW5nc3RyZWFtIHRva2VuU3RyZWFtKHMpOwogICB3aGlsZSAoc3RkOjpnZXRsaW5lKHRva2VuU3RyZWFtLCB0b2tlbiwgZGVsaW1pdGVyKSkKICAgewogICAgICB0b2tlbnMucHVzaF9iYWNrKHRva2VuKTsKICAgfQogICByZXR1cm4gdG9rZW5zOwp9CgppbnQgbWFpbigpCnsKCWF1dG8gciA9IHNwbGl0KCJvbmUsIHR3bywgdGhyZWUiLCAnICcpOwoJY29weSAoci5iZWdpbigpLCByLmVuZCgpLCBvc3RyZWFtX2l0ZXJhdG9yPHN0cmluZz4oY291dCwiICIpKTsKCQoJYXV0byB0ID0gZigpOyAvLyAxICBjb3B5IGVsaXNpb24KCXQgPSBmKCk7IC8vMiAgIG1vdmUgYXNzaWduZW1lbnQgCn0=