Don't use auto_ptr.
diff --git a/asio/include/asio/detail/winapi_thread.hpp b/asio/include/asio/detail/winapi_thread.hpp
index 6706ef9..3db74c8 100644
--- a/asio/include/asio/detail/winapi_thread.hpp
+++ b/asio/include/asio/detail/winapi_thread.hpp
@@ -20,8 +20,8 @@
 #if defined(ASIO_WINDOWS)
 #if defined(ASIO_WINDOWS_APP) || defined(UNDER_CE)
 
-#include <memory>
 #include "asio/detail/noncopyable.hpp"
+#include "asio/detail/scoped_ptr.hpp"
 #include "asio/detail/socket_types.hpp"
 #include "asio/detail/throw_error.hpp"
 #include "asio/error.hpp"
@@ -41,7 +41,7 @@
   template <typename Function>
   winapi_thread(Function f, unsigned int = 0)
   {
-    std::auto_ptr<func_base> arg(new func<Function>(f));
+    scoped_ptr<func_base> arg(new func<Function>(f));
     DWORD thread_id = 0;
     thread_ = ::CreateThread(0, 0, winapi_thread_function,
         arg.get(), 0, &thread_id);
@@ -105,7 +105,7 @@
 
 inline DWORD WINAPI winapi_thread_function(LPVOID arg)
 {
-  std::auto_ptr<winapi_thread::func_base> func(
+  scoped_ptr<winapi_thread::func_base> func(
       static_cast<winapi_thread::func_base*>(arg));
   func->run();
   return 0;