以下代码在 Visual Studio 2010 中编译,但在 Visual Studio 2012 RC 中编译失败。
#include <string>
// Windows stuffs
typedef __nullterminated const wchar_t *LPCWSTR;
class CTestObj {
public:
CTestObj() {m_tmp = L"default";};
operator LPCWSTR() { return m_tmp.c_str(); } // returns const wchar_t*
operator std::wstring() const { return m_tmp; } // returns std::wstring
protected:
std::wstring m_tmp;
};
int _tmain(int argc, _TCHAR* argv[])
{
CTestObj x;
std::wstring strval = (std::wstring) x;
return 0;
}
返回的错误是:
错误 C2440:“类型转换”:无法转换
'CTestObj'
为'std::wstring'
没有构造函数可以采用源类型,或者构造函数重载决议不明确
我已经意识到注释掉任何一个转换运算符都可以解决编译问题。我只想明白:
- 是什么导致了这个
- 为什么这在 VS2010 中编译而不在 VS2012 中编译?是因为 C++11 的变化吗?