Объясните инвалиду детства на голову, почему компилируя следующий код с помощью VS2005 я получаю предупреждение C4239?
По какой причине такое преобразование запрещено стандартом? Где тут грабли?
И как добиться желаемого результат без предупреждений?
class auto_ptr1
{
public:
auto_ptr1(int *_Ptr = 0)
: _Myptr(_Ptr)
{
}
auto_ptr1(auto_ptr1& _Right)
: _Myptr(_Right.release())
{}
int *release()
{
int *_Tmp = _Myptr;
_Myptr = 0;
return (_Tmp);
}
private:
int* _Myptr;
};
auto_ptr1 Func()
{
return auto_ptr1(new int);
}