It seems your C++17 compiler doesn’t include the standard filesystem
header. One possible way to get around that:
#ifndef __has_include
static_assert(false, "__has_include not supported");
#else
# if __cplusplus >= 201703L && __has_include(<filesystem>)
# include <filesystem>
namespace fs = std::filesystem;
# elif __has_include(<experimental/filesystem>)
# include <experimental/filesystem>
namespace fs = std::experimental::filesystem;
# elif __has_include(<boost/filesystem.hpp>)
# include <boost/filesystem.hpp>
namespace fs = boost::filesystem;
# endif
#endif
Then use fs::
instead of std::filesystem::
everywhere.
Checking __cplusplus >= 201703L
is just an extra precaution if you want to use filesystem
when using C++11/14. In those cases, __has_include(<filesystem>)
may be true
but including it will not define the std::filesystem
namespace.