https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97654
Bug ID: 97654 Summary: std::filesystem::copy() can't overwrite existing symlink Product: gcc Version: 9.3.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: libstdc++ Assignee: unassigned at gcc dot gnu.org Reporter: d...@adrian-ebeling.de Target Milestone: --- Created attachment 49480 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=49480&action=edit Full output with -v std::filesystem::copy() with copy_options = copy_symlinks | overwrite_existing does not overwrite existing symlinks. Instead it produces the following error: terminate called after throwing an instance of 'std::filesystem::__cxx11::filesystem_error' what(): filesystem error: cannot copy: Invalid argument [link] [link_copy] Using gcc-9.3.0 on Ubuntu focal. Here's a simple shell script that creates the source files and produces the error: #!/bin/bash # Create a regular file and two links to it touch dest ln -sf dest link ln -sf dest link_copy # Create a cpp program that uses std::filesystem to copy "link" to "link_copy", # overwriting the existing link_copy cat <<EOF > copyLink.cpp #include <filesystem> int main() { using namespace std::filesystem; copy("link", "link_copy", copy_options::copy_symlinks | copy_options::overwrite_existing); } EOF #compile and run g++ -v --save-temps -std=c++17 copyLink.cpp -o copyLink ./copyLink