2010-10-08 Paolo Carlini <paolo.carlini@oracle.com>
authorpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 8 Oct 2010 20:30:44 +0000 (20:30 +0000)
committerpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 8 Oct 2010 20:30:44 +0000 (20:30 +0000)
* include/std/future (_Result_alloc): Derive from _Alloc,
exploit the Empty Base Optimization.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@165194 138bc75d-0d04-0410-961f-82ee72b054a4

libstdc++-v3/ChangeLog
libstdc++-v3/include/std/future

index 172eb5b..b4ca4f2 100644 (file)
@@ -1,3 +1,8 @@
+2010-10-08  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       * include/std/future (_Result_alloc): Derive from _Alloc,
+       exploit the Empty Base Optimization.
+
 2010-10-08  Jonathan Wakely  <jwakely.gcc@gmail.com>
 
        PR libstdc++/45403
index ff56698..2933c8b 100644 (file)
@@ -215,24 +215,22 @@ namespace std
 
     /// Result_alloc.
     template<typename _Res, typename _Alloc>
-      struct _Result_alloc : _Result<_Res>
+      struct _Result_alloc : _Result<_Res>, _Alloc
       {
         typedef typename _Alloc::template rebind<_Result_alloc>::other
           __allocator_type;
 
         explicit
-       _Result_alloc(const _Alloc& __a) : _Result<_Res>(), _M_alloc(__a)
+       _Result_alloc(const _Alloc& __a) : _Result<_Res>(), _Alloc(__a)
         { }
        
       private:
        void _M_destroy()
         {
-          __allocator_type __a(_M_alloc);
+          __allocator_type __a(*this);
           __a.destroy(this);
           __a.deallocate(this, 1);
         }
-
-        __allocator_type _M_alloc;
       };
 
     template<typename _Res, typename _Allocator>