From a692857bd4abea817b0415456653da5428d5edeb Mon Sep 17 00:00:00 2001
From: paolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Fri, 22 Dec 2006 12:49:48 +0000
Subject: [PATCH] 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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@120148 138bc75d-0d04-0410-961f-82ee72b054a4
---
 libstdc++-v3/ChangeLog                        | 10 +++++++
 libstdc++-v3/docs/html/ext/howto.html         |  6 ++++
 libstdc++-v3/include/std/memory               | 14 +++++++--
 .../20_util/memory/auto_ptr/assign_neg.cc     |  6 ++--
 .../memory/shared_ptr/assign/dr541.cc         | 30 +++++++++++++++++++
 5 files changed, 61 insertions(+), 5 deletions(-)
 create mode 100644 libstdc++-v3/testsuite/tr1/2_general_utilities/memory/shared_ptr/assign/dr541.cc

diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index c89db7477e9b..4a251af43788 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 888591ab27d5..951e108dacd1 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 b57a94f4bbd5..c47d49c034d2 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 cab11c973dc1..4ae7acfd5c48 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 000000000000..f9dc8393504c
--- /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);
+}
-- 
GitLab