#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"), " ");
}