#include <string>
#include <algorithm>
#include <iostream>
#include <ostream>
class StringConverter
{
char *str; // TODO: use smart pointer with right deleter
public:
StringConverter(const std::string &user_string) // Will be defined only at user side
{
str=new char[user_string.length()+1];
(*(std::copy(user_string.begin(),user_string.end(),str)))=0;
}
operator std::string() // Will be defined only at library side
{
return std::string(str);
}
~StringConverter()
{
delete [] str;
}
};
StringConverter foo()
{
return std::string("asd");
}
int main(int argc,char *argv[])
{
std::cout << std::string(foo()) << std::endl;
return 0;
}
ICAgICNpbmNsdWRlIDxzdHJpbmc+CiAgICAjaW5jbHVkZSA8YWxnb3JpdGhtPgogICAgI2luY2x1ZGUgPGlvc3RyZWFtPgogICAgI2luY2x1ZGUgPG9zdHJlYW0+CgogICAgY2xhc3MgU3RyaW5nQ29udmVydGVyCiAgICB7CiAgICAgICAgY2hhciAqc3RyOyAvLyBUT0RPOiB1c2Ugc21hcnQgcG9pbnRlciB3aXRoIHJpZ2h0IGRlbGV0ZXIKICAgIHB1YmxpYzoKICAgICAgICBTdHJpbmdDb252ZXJ0ZXIoY29uc3Qgc3RkOjpzdHJpbmcgJnVzZXJfc3RyaW5nKSAvLyBXaWxsIGJlIGRlZmluZWQgb25seSBhdCB1c2VyIHNpZGUKICAgICAgICB7CiAgICAgICAgICAgIHN0cj1uZXcgY2hhclt1c2VyX3N0cmluZy5sZW5ndGgoKSsxXTsKICAgICAgICAgICAgKCooc3RkOjpjb3B5KHVzZXJfc3RyaW5nLmJlZ2luKCksdXNlcl9zdHJpbmcuZW5kKCksc3RyKSkpPTA7CiAgICAgICAgfQogICAgICAgIG9wZXJhdG9yIHN0ZDo6c3RyaW5nKCkgLy8gV2lsbCBiZSBkZWZpbmVkIG9ubHkgYXQgbGlicmFyeSBzaWRlCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gc3RkOjpzdHJpbmcoc3RyKTsKICAgICAgICB9CiAgICAgICAgflN0cmluZ0NvbnZlcnRlcigpCiAgICAgICAgewogICAgICAgICAgICBkZWxldGUgW10gc3RyOwogICAgICAgIH0KICAgIH07CgogICAgU3RyaW5nQ29udmVydGVyIGZvbygpCiAgICB7CiAgICAgICAgcmV0dXJuIHN0ZDo6c3RyaW5nKCJhc2QiKTsKICAgIH0KCgogICAgaW50IG1haW4oaW50IGFyZ2MsY2hhciAqYXJndltdKQogICAgewogICAgICAgIHN0ZDo6Y291dCA8PCBzdGQ6OnN0cmluZyhmb28oKSkgPDwgc3RkOjplbmRsOwogICAgICAgIHJldHVybiAwOwogICAgfQo=