#include<iostream>
#include<vector>
#include<functional>
#include<string>
template<typename Type,
typename Return,
typename Container,
typename Parameter>
Container
StringTo (Type&& copy,
const char tokens[],
Return (Container::*Insert) (const Parameter&))
{
static_assert(not std::is_lvalue_reference<Type>::value, "Must be rvalue.");
Container container;
return container;
}
template<typename Type>
auto
StringToVector (Type&& copy,
const char tokens[])
{
static_assert(not std::is_lvalue_reference<Type>::value, "Must be rvalue.");
return StringTo(std::move(copy), tokens, &std::vector<Type>::push_back);
}
int main()
{
auto v = StringToVector(std::string("hello world"), " ");
}
I2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlPHZlY3Rvcj4KI2luY2x1ZGU8ZnVuY3Rpb25hbD4KI2luY2x1ZGU8c3RyaW5nPgoKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlLAogICAgICAgICAgICAgdHlwZW5hbWUgUmV0dXJuLAogICAgICAgICAgICAgdHlwZW5hbWUgQ29udGFpbmVyLAogICAgICAgICAgICAgdHlwZW5hbWUgUGFyYW1ldGVyPgogICAgQ29udGFpbmVyCiAgICBTdHJpbmdUbyAoVHlwZSYmIGNvcHksCiAgICAgICAgICAgICAgY29uc3QgY2hhciB0b2tlbnNbXSwKICAgICAgICAgICAgICBSZXR1cm4gKENvbnRhaW5lcjo6Kkluc2VydCkgKGNvbnN0IFBhcmFtZXRlciYpKQogICAgewogICAgICBzdGF0aWNfYXNzZXJ0KG5vdCBzdGQ6OmlzX2x2YWx1ZV9yZWZlcmVuY2U8VHlwZT46OnZhbHVlLCAiTXVzdCBiZSBydmFsdWUuIik7CiAgICAgIENvbnRhaW5lciBjb250YWluZXI7CiAgICAgIHJldHVybiBjb250YWluZXI7CiAgICB9CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KICAgIGF1dG8KICAgIFN0cmluZ1RvVmVjdG9yIChUeXBlJiYgY29weSwKICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyIHRva2Vuc1tdKQogICAgewogICAgICBzdGF0aWNfYXNzZXJ0KG5vdCBzdGQ6OmlzX2x2YWx1ZV9yZWZlcmVuY2U8VHlwZT46OnZhbHVlLCAiTXVzdCBiZSBydmFsdWUuIik7CiAgICAgIHJldHVybiBTdHJpbmdUbyhzdGQ6Om1vdmUoY29weSksIHRva2VucywgJnN0ZDo6dmVjdG9yPFR5cGU+OjpwdXNoX2JhY2spOwogICAgfQoKCmludCBtYWluKCkKewogIGF1dG8gdiA9IFN0cmluZ1RvVmVjdG9yKHN0ZDo6c3RyaW5nKCJoZWxsbyB3b3JsZCIpLCAiICIpOwp9