https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116529

--- Comment #7 from Jonathan Wakely <redi at gcc dot gnu.org> ---
That's what this does:

--- a/libstdc++-v3/include/bits/unique_ptr.h
+++ b/libstdc++-v3/include/bits/unique_ptr.h
@@ -379,8 +379,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 #pragma GCC diagnostic push
 #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
       /// Converting constructor from @c auto_ptr
-      template<typename _Up, typename = _Require<
-              is_convertible<_Up*, _Tp*>, is_same<_Dp, default_delete<_Tp>>>>
+      template<typename _Up,
+              typename = _Require<is_convertible<_Up*, pointer>,
+                                  is_same<_Dp, default_delete<_Tp>>>>
        unique_ptr(auto_ptr<_Up>&& __u) noexcept;
 #pragma GCC diagnostic pop
 #endif

This is equivalent, because when D must be default_delete<T>, pointer must be
T*. But the ill-formed type now occurs during substitution.

Reply via email to