#include <iostream>
#include <string>
struct UserString {
const char* p;
operator const char*() const {
std::cout << "! " << __FUNCTION__ << std::endl;
return p;
}
UserString()
: p ("UserString")
{ }
};
struct WUserString {
const wchar_t* p;
operator const wchar_t*() const {
std::cout << "! " << __FUNCTION__ << std::endl;
return p;
}
WUserString()
: p (L"WUserString")
{ }
};
int main() {
using namespace std;
cout << "String Literal" << endl;
cout << string("std::string") << endl;
cout << UserString() << endl;
cout << static_cast<const char*>(UserString()) << endl;
wcout << L"WString Literal" << endl;
wcout << wstring(L"std::wstring") << endl;
wcout << WUserString() << endl;
wcout << static_cast<const wchar_t*>(WUserString()) << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgoKc3RydWN0IFVzZXJTdHJpbmcgewogICAgY29uc3QgY2hhciogcDsKCW9wZXJhdG9yIGNvbnN0IGNoYXIqKCkgY29uc3QgewoJCXN0ZDo6Y291dCA8PCAiISAiIDw8IF9fRlVOQ1RJT05fXyA8PCBzdGQ6OmVuZGw7CgkJcmV0dXJuIHA7Cgl9CgoJVXNlclN0cmluZygpCgk6IHAgKCJVc2VyU3RyaW5nIikKCXsgfQp9OwoKc3RydWN0IFdVc2VyU3RyaW5nIHsKCWNvbnN0IHdjaGFyX3QqIHA7CglvcGVyYXRvciBjb25zdCB3Y2hhcl90KigpIGNvbnN0IHsKCQlzdGQ6OmNvdXQgPDwgIiEgIiA8PCBfX0ZVTkNUSU9OX18gPDwgc3RkOjplbmRsOwoJCXJldHVybiBwOwoJfQoKCVdVc2VyU3RyaW5nKCkKCTogcCAoTCJXVXNlclN0cmluZyIpCgl7IH0KfTsKCgppbnQgbWFpbigpIHsKCXVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgljb3V0IDw8ICJTdHJpbmcgTGl0ZXJhbCIgPDwgZW5kbDsKCWNvdXQgPDwgc3RyaW5nKCJzdGQ6OnN0cmluZyIpIDw8IGVuZGw7Cgljb3V0IDw8IFVzZXJTdHJpbmcoKSA8PCBlbmRsOwoJY291dCA8PCBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oVXNlclN0cmluZygpKSA8PCBlbmRsOwoKCXdjb3V0IDw8IEwiV1N0cmluZyBMaXRlcmFsIiA8PCBlbmRsOwoJd2NvdXQgPDwgd3N0cmluZyhMInN0ZDo6d3N0cmluZyIpIDw8IGVuZGw7Cgl3Y291dCA8PCBXVXNlclN0cmluZygpIDw8IGVuZGw7Cgl3Y291dCA8PCBzdGF0aWNfY2FzdDxjb25zdCB3Y2hhcl90Kj4oV1VzZXJTdHJpbmcoKSkgPDwgZW5kbDsKCglyZXR1cm4gMDsKfQo=