diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index c89db7477e9b76c68365554cf25fc99789dd6a13..4a251af437888cc7f825e9d4d5c2aebb080f48d0 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,3 +1,13 @@
+2006-12-22  Paolo Carlini  <pcarlini@suse.de>
+
+        DR 541, [WP].
+	* include/std/memory (auto_ptr<void>): Add specialization.
+	* testsuite/tr1/2_general_utilities/memory/shared_ptr/
+	assign/dr541.cc: New.
+	* testsuite/20_util/memory/auto_ptr/assign_neg.cc: Adjust
+	dg-error markers.
+	* docs/html/ext/howto.html: Add an entry for DR 541.
+
 2006-12-16  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>
 
 	* docs/html/27_io/howto.html: Fix typos.
diff --git a/libstdc++-v3/docs/html/ext/howto.html b/libstdc++-v3/docs/html/ext/howto.html
index 888591ab27d528ca84383940b0b1405563584c05..951e108dacd1a26025d013e66c7ada8c1715f108 100644
--- a/libstdc++-v3/docs/html/ext/howto.html
+++ b/libstdc++-v3/docs/html/ext/howto.html
@@ -594,6 +594,12 @@
         input_iterator' value_type.
     </dd>
 
+    <dt><a href="lwg-defects.html#541">541</a>:
+        <em>shared_ptr template assignment and void</em>
+    </dt>
+    <dd>Add an auto_ptr&lt;void&gt; specialization.
+    </dd>
+
     <dt><a href="lwg-active.html#543">543</a>:
         <em>valarray slice default constructor</em>
     </dt>
diff --git a/libstdc++-v3/include/std/memory b/libstdc++-v3/include/std/memory
index b57a94f4bbd57cd91859df7baa9c0a32dea7aecf..c47d49c034d2220afe788a5c8dbbc5c6fd69f965 100644
--- a/libstdc++-v3/include/std/memory
+++ b/libstdc++-v3/include/std/memory
@@ -1,6 +1,7 @@
 // <memory> -*- C++ -*-
 
-// Copyright (C) 2001, 2002, 2004, 2005 Free Software Foundation, Inc.
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006
+// Free Software Foundation, Inc.
 //
 // This file is part of the GNU ISO C++ Library.  This library is free
 // software; you can redistribute it and/or modify it under the
@@ -367,7 +368,16 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
       template<typename _Tp1>
         operator auto_ptr<_Tp1>() throw()
         { return auto_ptr<_Tp1>(this->release()); }
-  };
+    };
+
+  // _GLIBCXX_RESOLVE_LIB_DEFECTS
+  // 541. shared_ptr template assignment and void
+  template<>
+    class auto_ptr<void>
+    {
+    public:
+      typedef void element_type;
+    };
 
 _GLIBCXX_END_NAMESPACE
 
diff --git a/libstdc++-v3/testsuite/20_util/memory/auto_ptr/assign_neg.cc b/libstdc++-v3/testsuite/20_util/memory/auto_ptr/assign_neg.cc
index cab11c973dc17e6b15b2852a3526c7a554303456..4ae7acfd5c48b37803cf60975216479bde5b984d 100644
--- a/libstdc++-v3/testsuite/20_util/memory/auto_ptr/assign_neg.cc
+++ b/libstdc++-v3/testsuite/20_util/memory/auto_ptr/assign_neg.cc
@@ -1,6 +1,6 @@
 // { dg-do compile }
 
-// Copyright (C) 2002, 2003, 2004 Free Software Foundation
+// Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation
 //
 // This file is part of the GNU ISO C++ Library.  This library is free
 // software; you can redistribute it and/or modify it under the
@@ -46,5 +46,5 @@ main()
   test01();
   return 0;
 }
-// { dg-error "candidates" "" { target *-*-* } 223 } 
-// { dg-error "::auto_ptr" "" { target *-*-* } 353 } 
+// { dg-error "candidates" "" { target *-*-* } 224 } 
+// { dg-error "::auto_ptr" "" { target *-*-* } 354 } 
diff --git a/libstdc++-v3/testsuite/tr1/2_general_utilities/memory/shared_ptr/assign/dr541.cc b/libstdc++-v3/testsuite/tr1/2_general_utilities/memory/shared_ptr/assign/dr541.cc
new file mode 100644
index 0000000000000000000000000000000000000000..f9dc8393504c99eaa10510082fcf2e2e6a03c8d4
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/2_general_utilities/memory/shared_ptr/assign/dr541.cc
@@ -0,0 +1,30 @@
+// { dg-do compile }
+
+// Copyright (C) 2006 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library.  This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING.  If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// TR1 2.2.2 Template class shared_ptr [tr.util.smartptr.shared]
+
+#include <tr1/memory>
+
+// DR 541. shared_ptr template assignment and void
+void test01()
+{
+  std::tr1::shared_ptr<void> p;
+  p.operator=<void>(p);
+}