#include <iostream>
template <typename T>
struct some_other_allocator : std::allocator<T>{};
using other_string = std::basic_string<char, std::char_traits<char>, some_other_allocator<char>>;
int main() {
other_string string1("hello");
//using std::string constructor
std::string string2(string1.begin(),string1.end());
std::string string2_copy;
//using std::copy
std::copy(string1.begin(),string1.end(),std::back_inserter(string2_copy));
std::cout << string1 << std::endl;
std::cout << string2 << std::endl;
std::cout << string2_copy << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKCnRlbXBsYXRlIDx0eXBlbmFtZSBUPgpzdHJ1Y3Qgc29tZV9vdGhlcl9hbGxvY2F0b3IgOiBzdGQ6OmFsbG9jYXRvcjxUPnt9OwoKCgp1c2luZyBvdGhlcl9zdHJpbmcgPSBzdGQ6OmJhc2ljX3N0cmluZzxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBzb21lX290aGVyX2FsbG9jYXRvcjxjaGFyPj47CgppbnQgbWFpbigpIHsKCW90aGVyX3N0cmluZyBzdHJpbmcxKCJoZWxsbyIpOwoJCgkvL3VzaW5nIHN0ZDo6c3RyaW5nIGNvbnN0cnVjdG9yCglzdGQ6OnN0cmluZyBzdHJpbmcyKHN0cmluZzEuYmVnaW4oKSxzdHJpbmcxLmVuZCgpKTsKCQoJc3RkOjpzdHJpbmcgc3RyaW5nMl9jb3B5OwoJLy91c2luZyBzdGQ6OmNvcHkKCXN0ZDo6Y29weShzdHJpbmcxLmJlZ2luKCksc3RyaW5nMS5lbmQoKSxzdGQ6OmJhY2tfaW5zZXJ0ZXIoc3RyaW5nMl9jb3B5KSk7CgkKCXN0ZDo6Y291dCA8PCBzdHJpbmcxIDw8IHN0ZDo6ZW5kbDsKCXN0ZDo6Y291dCA8PCBzdHJpbmcyIDw8IHN0ZDo6ZW5kbDsKCXN0ZDo6Y291dCA8PCBzdHJpbmcyX2NvcHkgPDwgc3RkOjplbmRsOwoJcmV0dXJuIDA7Cn0=