#include <iostream>
using namespace std;
class A {
public:
A(std::string value)
: m_value(value)
{
}
// A a = std::string("some value")
A& operator=(const std::string value) {
m_value = value;
}
operator std::string() const { return m_value; }
const std::string* operator->()const { return & m_value; }
private:
std::string m_value;
};
int main() {
A a("foo");
std::string temp = a;
printf("1.) Temp's value: %s \n", temp.c_str());
printf("2.) A's value w/ static_cast: %s \n", static_cast<string>(a).c_str());
printf("3.) A's value w/ arrow: %s \n", a->c_str());
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgQSB7CnB1YmxpYzoKICAgIEEoc3RkOjpzdHJpbmcgdmFsdWUpCiAgICAgICAgOiBtX3ZhbHVlKHZhbHVlKQogICAgewogICAgfQoKICAgIC8vIEEgYSA9IHN0ZDo6c3RyaW5nKCJzb21lIHZhbHVlIikKICAgIEEmIG9wZXJhdG9yPShjb25zdCBzdGQ6OnN0cmluZyB2YWx1ZSkgewogICAgICAgIG1fdmFsdWUgPSB2YWx1ZTsKICAgIH0KCiAgICBvcGVyYXRvciBzdGQ6OnN0cmluZygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KICAgIGNvbnN0IHN0ZDo6c3RyaW5nKiBvcGVyYXRvci0+KCljb25zdCB7IHJldHVybiAmIG1fdmFsdWU7IH0KCnByaXZhdGU6CiAgICBzdGQ6OnN0cmluZyBtX3ZhbHVlOwp9OwoKCmludCBtYWluKCkgewoJQSBhKCJmb28iKTsKCXN0ZDo6c3RyaW5nIHRlbXAgPSBhOwoJcHJpbnRmKCIxLikgVGVtcCdzIHZhbHVlOiAlcyBcbiIsIHRlbXAuY19zdHIoKSk7CglwcmludGYoIjIuKSBBJ3MgdmFsdWUgdy8gc3RhdGljX2Nhc3Q6ICVzIFxuIiwgc3RhdGljX2Nhc3Q8c3RyaW5nPihhKS5jX3N0cigpKTsKCXByaW50ZigiMy4pIEEncyB2YWx1ZSB3LyBhcnJvdzogJXMgXG4iLCBhLT5jX3N0cigpKTsKCXJldHVybiAwOwp9