summarylogtreecommitdiffstats
path: root/boost_C++0x.patch
blob: 2746d7f62595919e09bf0f2e9147df92780b12e8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
===================================================================
--- a/trunk/boost/smart_ptr/shared_ptr.hpp
+++ b/trunk/boost/smart_ptr/shared_ptr.hpp
@@ -198,5 +198,15 @@
     }
 
-//  generated copy constructor, destructor are fine
+//  generated copy constructor, destructor are fine...
+
+#if defined( BOOST_HAS_RVALUE_REFS )
+
+// ... except in C++0x, move disables the implicit copy
+
+    shared_ptr( shared_ptr const & r ): px( r.px ), pn( r.pn ) // never throws
+    {
+    }
+
+#endif
 
     template<class Y>
===================================================================
--- a/trunk/boost/smart_ptr/weak_ptr.hpp
+++ b/trunk/boost/smart_ptr/weak_ptr.hpp
@@ -41,6 +41,22 @@
     }
 
-//  generated copy constructor, assignment, destructor are fine
-
+//  generated copy constructor, assignment, destructor are fine...
+
+#if defined( BOOST_HAS_RVALUE_REFS )
+
+// ... except in C++0x, move disables the implicit copy
+
+    weak_ptr( weak_ptr const & r ): px( r.px ), pn( r.pn ) // never throws
+    {
+    }
+
+    weak_ptr & operator=( weak_ptr const & r ) // never throws
+    {
+        px = r.px;
+        pn = r.pn;
+        return *this;
+    }
+
+#endif
 
 //
===================================================================
--- a/trunk/boost/smart_ptr/shared_array.hpp
+++ b/trunk/boost/smart_ptr/shared_array.hpp
@@ -70,5 +70,23 @@
     }
 
-//  generated copy constructor, assignment, destructor are fine
+//  generated copy constructor, destructor are fine...
+
+#if defined( BOOST_HAS_RVALUE_REFS )
+
+// ... except in C++0x, move disables the implicit copy
+
+    shared_array( shared_array const & r ): px( r.px ), pn( r.pn ) // never throws
+    {
+    }
+
+#endif
+
+    // assignment
+
+    shared_array & operator=( shared_array const & r ) // never throws
+    {
+        this_type( r ).swap( *this );
+        return *this;
+    }
 
     void reset(T * p = 0)