Стандарт требует, чтобы path
был как минимум заранее объявлен в <filesystem>
, см .: 29.11.5 Заголовок <filesystem>
Сводка . На практике это будет зависеть от вашего компилятора, в котором объявлено std::filesystem::path
, и поэтому вам нужно просто включить <filesystem>
.
. У меня также сложилось впечатление, что включение только <boost/filesystem/path.hpp>
быть дешевле с точки зрения времени компиляции, чем необходимость включать 'all of' <fileysystem>
, но его измерение дает удивительные результаты, по крайней мере на моей машине, для std::filesystem
:
$ echo '#include <filesystem>' | time -p g++ -std=c++17 -x c++ -c -
real 0.49
user 0.43
sys 0.05
по сравнению только с включением <boost/filesystem/path.hpp>
:
$ echo '#include <boost/filesystem/path.hpp>' | time -p g++ -std=c++17 -x c++ -c -
real 0.89
user 0.81
sys 0.07
Таким образом, включение <filesystem>
почти в два раза быстрее, чем включение 'only' <boost/filesystem/path.hpp>
. Чтобы еще больше подчеркнуть, что увеличение времени компиляции может быть связано с реализацией Boost, а не с какой-то другой неясной причиной, я проверил количество заголовочных файлов, которые необходимо предварительно обработать, в результате включения <boost/filesystem/path.hpp>
и <filesystem>
соответственно:
$ echo '#include <boost/filesystem/path.hpp>' | g++ -std=c++17 -x c++ -M -c - | wc -l
407
против:
$ echo '#include <filesystem>' | g++ -std=c++17 -x c++ -M -c - | wc -l
144
Думаю, можно с уверенностью заключить, что вам не нужно беспокоиться о включении <filesystem>
, если вас беспокоит время компиляции.