http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48635
--- Comment #7 from Paolo Carlini <paolo.carlini at oracle dot com> 2011-04-17 19:44:51 UTC --- Ok... Do we have testcases for that? By the way, I noticed that in the templated *constructor* we have been using D instead of E in the forward, and that doesn't seem correct vs the FDIS itself. What do you think? The below regtests fine: Index: include/bits/unique_ptr.h =================================================================== --- include/bits/unique_ptr.h (revision 172616) +++ include/bits/unique_ptr.h (working copy) @@ -153,7 +153,7 @@ && std::is_convertible<_Ep, _Dp>::value))> ::type> unique_ptr(unique_ptr<_Up, _Ep>&& __u) - : _M_t(__u.release(), std::forward<deleter_type>(__u.get_deleter())) + : _M_t(__u.release(), std::forward<_Ep>(__u.get_deleter())) { } #if _GLIBCXX_USE_DEPRECATED @@ -186,7 +186,7 @@ operator=(unique_ptr<_Up, _Ep>&& __u) { reset(__u.release()); - get_deleter() = std::forward<deleter_type>(__u.get_deleter()); + get_deleter() = std::forward<_Ep>(__u.get_deleter()); return *this; } @@ -306,7 +306,7 @@ template<typename _Up, typename _Ep> unique_ptr(unique_ptr<_Up, _Ep>&& __u) - : _M_t(__u.release(), std::forward<deleter_type>(__u.get_deleter())) + : _M_t(__u.release(), std::forward<_Ep>(__u.get_deleter())) { } // Destructor. @@ -326,7 +326,7 @@ operator=(unique_ptr<_Up, _Ep>&& __u) { reset(__u.release()); - get_deleter() = std::forward<deleter_type>(__u.get_deleter()); + get_deleter() = std::forward<_Ep>(__u.get_deleter()); return *this; }