[Bug libstdc++/52433] New: [C++11] debug mode iterators need move constructors
redi at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Wed Feb 29 12:53:00 GMT 2012
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52433
Bug #: 52433
Summary: [C++11] debug mode iterators need move constructors
Classification: Unclassified
Product: gcc
Version: 4.7.0
Status: UNCONFIRMED
Keywords: rejects-valid
Severity: normal
Priority: P3
Component: libstdc++
AssignedTo: unassigned@gcc.gnu.org
ReportedBy: redi@gcc.gnu.org
#define _GLIBCXX_DEBUG
#include <vector>
struct X {
X() = default;
X(const X&) = default;
X(X&&) = default;
std::vector<int>::iterator i;
};
X f()
{
X x;
return x;
}
t.cc: In function 'X f()':
t.cc:14:12: error: use of deleted function 'X::X(X&&)'
t.cc:7:5: note: 'X::X(X&&)' is implicitly deleted because the default
definition would be ill-formed:
t.cc:7:5: error: non-static data member 'X::i' does not have a move constructor
or trivial copy constructor
Untested patch:
--- include/debug/safe_iterator.h.orig 2012-02-29 12:42:45.876490264 +0000
+++ include/debug/safe_iterator.h 2012-02-29 12:44:57.535918988 +0000
@@ -169,6 +169,19 @@
._M_iterator(__x, "other"));
}
+ /// @post @p __x is singular and unattached
+ _Safe_iterator(_Safe_iterator&& __x)
+ {
+ // _GLIBCXX_RESOLVE_LIB_DEFECTS
+ // DR 408. Is vector<reverse_iterator<char*> > forbidden?
+ _GLIBCXX_DEBUG_VERIFY(!__x._M_singular()
+ || __x._M_current == _Iterator(),
+ _M_message(__msg_init_copy_singular)
+ ._M_iterator(*this, "this")
+ ._M_iterator(__x, "other"));
+ swap(*this, __x);
+ }
+
/**
* @brief Converting constructor from a mutable iterator to a
* constant iterator.
More information about the Gcc-bugs
mailing list