Ошибка компиляции C++ в Visual Studio 2012 : LPCWSTR и wstring

Следующий код компилируется в 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;
}

Возвращенная ошибка:

error C2440: 'приведение типа': невозможно преобразовать из 'CTestObj'в 'std::wstring'
Ни один конструктор не может взять источник тип или разрешение перегрузки конструктора было неоднозначным

Я уже понял, что комментирование любого из операторов преобразования решает проблему компиляции. Я просто хочу понять:

  1. Чтопроисходит под капотом, чтобы вызвать это
  2. Почемуэто компилируется в VS2010, а не в VS2012? Это из-за изменения С++ 11?
6
задан ildjarn 1 June 2012 в 00:27
поделиться