fork download
  1. #include <iostream>
  2. #include <string>
  3.  
  4. struct UserString {
  5. const char* p;
  6. operator const char*() const {
  7. std::cout << "! " << __FUNCTION__ << std::endl;
  8. return p;
  9. }
  10.  
  11. UserString()
  12. : p ("UserString")
  13. { }
  14. };
  15.  
  16. struct WUserString {
  17. const wchar_t* p;
  18. operator const wchar_t*() const {
  19. std::cout << "! " << __FUNCTION__ << std::endl;
  20. return p;
  21. }
  22.  
  23. WUserString()
  24. : p (L"WUserString")
  25. { }
  26. };
  27.  
  28.  
  29. int main() {
  30. using namespace std;
  31. cout << "String Literal" << endl;
  32. cout << string("std::string") << endl;
  33. cout << UserString() << endl;
  34. cout << static_cast<const char*>(UserString()) << endl;
  35.  
  36. wcout << L"WString Literal" << endl;
  37. wcout << wstring(L"std::wstring") << endl;
  38. wcout << WUserString() << endl;
  39. wcout << static_cast<const wchar_t*>(WUserString()) << endl;
  40.  
  41. return 0;
  42. }
  43.  
Success #stdin #stdout 0s 3032KB
stdin
Standard input is empty
stdout
String Literal
std::string
! operator const char*
UserString
! operator const char*
UserString
WString Literal
std::wstring
! operator const wchar_t*
0x80491b0
! operator const wchar_t*
WUserString