I really like your code style.
It's not so important, but anyway, in next free function:
std::string concat(const std::vector<std::string>& strings, const std::string& delim = "")
Maybe you wanted the delim default value to be " "" " (a space)? or not?