https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89117
Bug ID: 89117
Summary: [9 regression] filesystem::path's replace_extension()
broken?
Product: gcc
Version: unknown
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: libstdc++
Assignee: unassigned at gcc dot gnu.org
Reporter: h2+bugs at fsfe dot org
Target Milestone: ---
In GCC9 a call to replace_extension() no longer removes the extension from a
filesystem::path. This leads to very unexpected behaviour without prior warning
or error.
Example:
#include <iostream>
#include <filesystem>
int main()
{
std::filesystem::path p{"/tmp/abc.txt.gz"};
std::cout << p << '\t' << p.extension() << '\n';
p.replace_extension(); // remove .gz
std::cout << p << '\t' << p.extension() << '\n';
}
hannes@fbsdmain /tmp % g++8 -std=c++17 test.cpp -lstdc++fs
hannes@fbsdmain /tmp % ./a.out
"/tmp/abc.txt.gz" ".gz"
"/tmp/abc.txt" ".txt"
hannes@fbsdmain /tmp % g++9 -std=c++17 test.cpp -lstdc++fs
hannes@fbsdmain /tmp % ./a.out
"/tmp/abc.txt.gz" ".gz"
"/tmp/abc.txt" ".gz"
These are my tested versions:
g++8 (FreeBSD Ports Collection) 8.2.1 20190118
g++9 (FreeBSD Ports Collection) 9.0.0 20190113 (experimental)