...but that requires the argument to be a type from a template D: so you'd have to write:
template<typename String = std::string> void dosomething(String &&str)
...but that requires the argument to be a type from a template D: so you'd have to write:
...and that's not quite right either, since you'd want it to be either an rvalue reference or a const lvalue reference