https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86910
Bug ID: 86910 Summary: std::filesystem::create_directories doesn't set error code or throw while violating postcondition. Product: gcc Version: 8.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: libstdc++ Assignee: unassigned at gcc dot gnu.org Reporter: ssh at pobox dot com Target Milestone: --- std::filesystem::create_directories should create all directories that don't exists in the given path. It is not an error if some of the directories exist. But they must be directories to fulfil the postcondition. The current implementation doens't signal an error if it didn't create the directory because a file existed with the same name, so the given postcondition is_directory(p) is violated but no error occurs. //create_directories.cpp #include <filesystem> #include <fstream> #include <iostream> #include <system_error> namespace fs = std::filesystem; int main() { fs::path p("testxyz"); if(!fs::exists(p)) { std::ofstream file(p); file.close(); } std::error_code ec; if(fs::create_directories(p, ec)) std::cout << "created" << std::endl; else std::cout << "didn't create" << std::endl; if(!fs::is_directory(p)) std::cerr << "postcondition failed!" << std::endl; std::cerr << "error code " << (ec?"set":"not set") << std::endl; fs::remove(p); } Compiled on Ubuntu 18.04 with g++-8 -std=c++17 -o create_dirs create_directories.cpp -lstdc++fs The expected output would be: didn't create postcondition failed! error code set but current code gives: didn't create postcondition failed! error code not set The interface without ec should throw, but doesn't.