[Bug libstdc++/90102] Incorrect ambiguous overload with _GLIBCXX_DEBUG

redi at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Tue Apr 16 15:01:00 GMT 2019


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

--- Comment #5 from Jonathan Wakely <redi at gcc dot gnu.org> ---
I'll come back to this for GCC 10.

Slightly better (and not broken) patch:

--- a/libstdc++-v3/include/debug/vector
+++ b/libstdc++-v3/include/debug/vector
@@ -220,11 +220,11 @@ namespace __debug
       ~vector() = default;
 #endif

+#if __cplusplus < 201103L
       /// Construction from a normal-mode vector
       vector(const _Base& __x)
       : _Base(__x) { }

-#if __cplusplus < 201103L
       vector&
       operator=(const vector& __x)
       {
@@ -234,6 +234,12 @@ namespace __debug
        return *this;
       }
 #else
+      /// Construction from a normal-mode vector
+      template<typename _Up,
+              typename = _Require<is_same<__remove_cvref_t<_Up>, _Base>>>
+       vector(const _Up& __x)
+       : _Base(std::forward<_Base>(__x)) { }
+
       vector&
       operator=(const vector&) = default;


More information about the Gcc-bugs mailing list