我使用的是GCC 7.4.0和clang 6.0.0,它们似乎都在<experimental/filesystem>
中实现了文件系统。
由于我正在从事的项目需要 std::filesystem,我想知道其中哪些版本(主要 + 次要(支持它,以及它在哪些版本中以<experimental/filesystem>
和<filesystem>
实现。
这样我就可以正确处理#include
s 和namespace
s,并加入一些#if
以避免尝试使用不受支持的编译器版本编译项目
我注意到GCC是一个与标准库(https://gcc.gnu.org/onlinedocs/gcc/Standard-Libraries.html(分开且不同的编译器系统。
也就是说,GCC 8.0 包含std::filesystem
库 - 但您的项目需要处于 C++17 模式才能使用它。
https://gcc.gnu.org/onlinedocs/libstdc++/manual/using_headers.html#manual.intro.using.headers.cheaders
表 3.9 "C++ 2020 年图书馆标题">
any
charconv
execution
filesystem
memory_resource
optional
string_view
variant
显示 C++17 包含文件。这些在 C++17 编译模式下可用,即
-std=c++17
或-std=gnu++17
.在早期模式下包含这些标头不会导致编译错误,但不会定义任何内容。除非下面另有说明,否则它们也可以在更高模式(C++20 等(中使用。
W.R.T. 您的具体问题:
谢谢你的信息。 但是
std::experimental::filesystem
(我现在正在使用的(是什么时候引入的呢?
G++ 的发布历史说它包含在 8.x 版中(粗体强调我的(:
https://gcc.gnu.org/gcc-8/changes.html
改进了对 C++17 的实验性支持,包括以下功能:
- 支持类模板参数推导的演绎指南。
std::filesystem
实施。std::char_traits<char>
和std::char_traits<wchar_t>
可在常量表达式中使用。std::to_chars
和std::from_chars
(仅适用于整数,不适用于浮点类型(。