https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92267
Jonathan Wakely <redi at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Known to work| |8.3.0
Target Milestone|--- |9.3
Known to fail| |10.0, 9.2.0
--- Comment #3 from Jonathan Wakely <redi at gcc dot gnu.org> ---
This change (to prevent a -Wdeprecated-copy warning) changes the copy
constructor from non-trivial to trivial:
+#if __cplusplus < 201103L
+ // Conversion from iterator to const_iterator.
_Deque_iterator(const iterator& __x) _GLIBCXX_NOEXCEPT
: _M_cur(__x._M_cur), _M_first(__x._M_first),
_M_last(__x._M_last), _M_node(__x._M_node) { }
+#else
+ // Conversion from iterator to const_iterator.
+ template<typename _Iter,
+ typename = _Require<is_same<_Self, const_iterator>,
+ is_same<_Iter, iterator>>>
+ _Deque_iterator(const _Iter& __x) noexcept
+ : _M_cur(__x._M_cur), _M_first(__x._M_first),
+ _M_last(__x._M_last), _M_node(__x._M_node) { }
+
+ _Deque_iterator(const _Deque_iterator&) = default;
+ _Deque_iterator& operator=(const _Deque_iterator&) = default;
+#endif
The fix is to define the copy constructor explicitly again:
- _Deque_iterator(const _Deque_iterator&) = default;
+ _Deque_iterator(const _Deque_iterator& __x) noexcept
+ : _M_cur(__x._M_cur), _M_first(__x._M_first),
+ _M_last(__x._M_last), _M_node(__x._M_node) { }
+