【问题标题】:Which versions of GCC and clang support std::filesystem/std::experimental::filesystem?哪些 GCC 和 clang 版本支持 std::filesystem/std::experimental::filesystem?
【发布时间】:2019-12-22 14:46:17
【问题描述】:

我正在使用 GCC 7.4.0clang 6.0.0,它们似乎都在 @987654322 中实现了 filesystem @。

由于我正在处理的项目需要 std::filesystem,我想知道它们的哪些版本(主要 + 次要)支持它,以及它在 <experimental/filesystem><filesystem> 中实现的版本。

这样我就可以正确处理#includes 和namespaces,并添加一些#ifs 以避免尝试使用不受支持的编译器版本来编译项目

【问题讨论】:

  • 感谢您的信息。但是std::experimental::filesystem(我现在正在使用的)呢,它是什么时候引入的?
  • 请注意,使用 experimental/filesystem 是 C++17 版本中的 a bit different
  • 这很有趣。我想我将不得不花更多时间研究实现以避免额外的调试会话!

标签: gcc clang c++17 std-filesystem


【解决方案1】:

我注意到 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_charsstd::from_chars(仅适用于整数,不适用于浮点类型)。

【讨论】:

    猜你喜欢
    • 2016-05-01
    • 1970-01-01
    • 2019-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-04
    • 1970-01-01
    相关资源
    最近更新 更多