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) { } +