Вы можете сделать это, но я не уверен, почему вы хотите это сделать.
Если вы используете auto_ptr для указания владельца ptr (как обычно делают люди), то вам нужно только передать auto_ptr функции, если вы хотите передать владение ptr этой функции, и в этом случае Вы бы передали auto_ptr по значению:
void DoSomething(auto_ptr<int> a)
Таким образом, любой код, вызывающий DoSomething, отказывается от владения ptr:
auto_ptr<int> p (new int (7));
DoSomething (p);
// p is now empty.
В противном случае просто передайте ptr по значению:
void DoSomething(int* a)
{...}
...
auto_ptr<int> p (new int (7));
DoSomething (p.get ());
// p still holds the ptr.
или передать ссылку на указанный объект:
void DoSomething(int& a)
{...}
...
auto_ptr<int> p (new int (7));
DoSomething (*p);
// p still holds the ptr.
Второй обычно предпочтительнее, поскольку он делает более явным, что DoSomething вряд ли попытается удалить объект.