次のコードはVisualStudio2010でコンパイルされますが、Visual Studio2012RCではコンパイルできません。
#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'
んコンストラクターがソース型を取得できなかったか、コンストラクターのオーバーロード解決があいまいでした
いずれかの変換演算子をコメントアウトすると、コンパイルの問題が修正されることはすでに理解しています。私はただ理解したい:
- これを引き起こすためにボンネットの下で何が起こっているのか
- なぜこれはVS2012ではなくVS2010でコンパイルされるのですか?C ++ 11の変更によるものですか?