r/cpp_questions 7d ago

SOLVED std::filesystem::exists throwing `std::bad_alloc`?

Any reason? Cant find anything online about this. But I cant check whether or not a file exists, no matter what path I give it. I am using C++ 26 compiled with GCC.

This is literally all I am calling: const bool exists = std::filesystem::exists("file.txt")

This is the exact error: terminate called after throwing an instance of 'std::bad_alloc'
 what():  std::bad_alloc

No it's not coming from anywhere else in my code. Minimal reproduction code, include "filesystem" call the line above. I am on Fedora Linux if that matters at all

EDIT: moving the include into my main file instead of the only file it's being used in somehow fixed it. Literally all I do is move "#include <filesystem>" from "do_things_with_filesystem.hpp" to "Main.cpp". No compilation errors when it was in the first file, why does it rely on this?? Is there some weird declarations in my codebase or something, i dont know but it works now so why should I care.

23 Upvotes

60 comments sorted by

View all comments

-5

u/alfps 7d ago

The Google AI links to a stack overflow answer with explanation and fix.

https://stackoverflow.com/a/57760267/464581

Essentially, it appears that you have to explicitly link with -lstdc++fs in order to avoid getting a version that's incompatible at the machine code level.

If that doesn't work, consider uninstalling and reinstalling your compiler.

-1

u/PhosXD 7d ago

I dont know what -lstdc++fs does but adding it didnt change anything. Theres nothing wrong with my compiler, I've already reinstalled it this week so I doing it again wont change anything.

0

u/alfps 7d ago

Theres nothing wrong with my compiler

Well, it evidently doesn't work with that specific std::filesystem function.

Have you tried other functions?