https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118035
Bug ID: 118035
Summary: deque<string> bug when inserting an empty iterator
interval
Product: gcc
Version: 14.2.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: libstdc++
Assignee: unassigned at gcc dot gnu.org
Reporter: p2ye at uwaterloo dot ca
Target Milestone: ---
Created attachment 59861
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=59861&action=edit
demonstration of the bug
In the following code, I insert an empty iterator range [v.begin(), v.end())
into my_deque and then I output each element of the deque:
#include <deque>
#include <iostream>
#include <vector>
using namespace std;
int main() {
deque<string> my_deque{"one", "two", "three"};
vector<string> v{};
my_deque.insert(my_deque.begin() + 1, v.begin(), v.end());
for (auto s : my_deque) {
cout << s << endl;
}
}
I would expect the output to be "one\ntwo\nthree\n", since inserting an empty
range into the deque should not modify the deque.
However, the output that I get is "one\n\n\n", which shows that the insert
operation somehow cleared the strings "two" and "three".