Why did you drop data_pointer? It is much better choice than std::string