This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c++/77264] New: [7 Regression] std::string's replace gives wrong results with C++17, works with C++11
- From: "burnus at gcc dot gnu.org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Tue, 16 Aug 2016 10:55:09 +0000
- Subject: [Bug c++/77264] New: [7 Regression] std::string's replace gives wrong results with C++17, works with C++11
- Authentication-results: sourceware.org; auth=none
- Auto-submitted: auto-generated
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77264
Bug ID: 77264
Summary: [7 Regression] std::string's replace gives wrong
results with C++17, works with C++11
Product: gcc
Version: 7.0
Status: UNCONFIRMED
Keywords: wrong-code
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: burnus at gcc dot gnu.org
Target Milestone: ---
Running
g++ -std=c++11 test.cc && ./a.out > working
g++ -std=c++17 test.cc && ./a.out > failing
diff -U0 working failing
shows:
--- working 2016-08-16 12:50:40.318596035 +0200
+++ failing 2016-08-16 12:50:40.870592038 +0200
@@ -1 +1 @@
-RESULT: Running <This_Program>
+RESULT: Running <>
Namely, the replace call does not work with --std=c++17, but only with
--std++11. I think it worked two weeks ago. It definitely worked a month ago.
// ----------- test.cc ----------------
#include <string>
std::string&
string_replace (std::string& str, const std::string& old_str,
const std::string& new_str)
{
size_t pos = 0;
while ((pos = str.find(old_str, pos)) != std::string::npos)
{
str.replace (pos, old_str.length (), new_str);
pos += new_str.length ();
}
return str;
}
int main () {
std::string str("Running <PROGRAM_NAME>");
std::string old_str("PROGRAM_NAME");
std::string new_str("This_Program");
__builtin_printf ("RESULT: %s\n",
string_replace(str, old_str, new_str).c_str());
return 0;
}