tcbrindle/cpp17_headers

No <filesystem>

LordAro opened this issue · 4 comments

It'd be good if we could get that as well

Can <filesystem> be a header-only library?

Boost's seems to be, so don't see why not

This says "Boost.Filesystem is implemented as a separately compiled library, so you must install binaries in a location that can be found by your linker."

Filesystem is complicated because

  • There is no standalone implementation I know of other than Boost

  • Boost.Filesystem and the std::experimental::filesystem implementation included with recent GCCs require linking to libboost_filesystem or libstdc++fs respectively. As such, it's not possible to "transparently upgrade" to a standard version in the way we can with other headers, as the user needs to control which version is used, so they can link to the right library.

  • Given that one needs to link to an external library (and thus add a dependency), most of the arguments for avoiding Boost disappear.

Given these factors, I think the best thing to do with <filesystem> is to recommend the Boost version rather than attempting to provide it ourselves.