Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there a way to include forward headers for std::filesystem?

In the same way that iostreams has the forward-include header #include<iosfwd> a header with declarations only, I assumed that Filesystems would have one too. However I couldn't find one.

I have a class that declares a single member function with filesystem::path const& as argument and it seems an overkill to bring the whole of #include<experimental/filesystem> just to get path.

#include<experimental/filsystem_fwd> // or #include<experimental/filesystem/path/*only*/>
...
struct A{
  ...
  void save(std::experimental::filesystem::path const& p);
}
like image 754
alfC Avatar asked Jun 21 '19 09:06

alfC


Video Answer


1 Answers

Is there such a header? No.

Could you make such a header? Also, no. [namespace.std]/1 tells us:

The behavior of a C++ program is undefined if it adds declarations or definitions to namespace std or to a namespace within namespace std unless otherwise specified.

Since any forward declarations of std namespace things would have to be part of the std namespace, you can't do that. You're allowed to write template specializations, and there are certain cases where you're allowed to poke at std itself. But declaring std::filesystem::* isn't something you can do.

like image 127
Nicol Bolas Avatar answered Oct 19 '22 15:10

Nicol Bolas