Рассмотрим такой пример:
#include <memory>
using namespace std;
auto_ptr<int> get()
{
return auto_ptr<int>(new int);
}
int main()
{
auto_ptr<int> p;
p = get(); // (1)
}
Далее, вроде результат возврата функции (в данном случае) — rvalue. Следовательно, на него нельзя делать неконстантную ссылку. Следовательно, нельзя присвоить в месте, помеченном (1) (у auto_ptr-а присваивание, как и конструктор копии, требует именно неконстантную ссылку). Причем gcc 2.95 так, собственно, и говорит.
Получаем, что auto_ptr нельзя использовать для возврата указателя из функции. Тем не менее, постоянно упоминается, что для этого, собственно, он и применяется. Где я не прав?