Ваш A
конструктор копирования получает аргумент по неконстантной ссылке:
A(A<T>& o) : Super(o) { }
^ not const
Ваш пример, вероятно, пытается скопировать временный объект, и неконстантная ссылка не может привязаться к временному объекту. Visual C ++ имеет злое расширение, которое позволяет этому работать; вы должны быть осторожны, чтобы не полагаться на это расширение, если хотите, чтобы ваш код был переносимым.
Если вы пытаетесь имитировать конструктор копирования auto_ptr
, вам также необходимо реализовать что-то похожее на auto_ptr_ref
, которое используется в качестве помощника, чтобы разрешить копирование временных auto_ptr
s. Я описываю, как это достигается в принятом ответе на Как можно реализовать конструктор копирования std::auto_ptr
?
Для чего это стоит, вывод из std::auto_ptr
немного странный; по возможности используйте композицию вместо наследования (в std::auto_ptr
не так уж много всего, что вы бы извлекли из нее пользу в любом случае).