‘std::filesystem’ has not been declared after including

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.

Leave a Comment