哪些版本的GCC和Clang支持std :: filesystem / std :: experimental :: filesystem?

时间:2019-12-22 14:46:17

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

我使用的是 GCC 7.4.0 clang 6.0.0 ,它们似乎都在{{ 1}}。

由于我正在处理的项目需要std :: filesystem,所以我想知道其中的哪个版本(主要+次要版本)支持它,以及在<experimental/filesystem>和{{ 1}}。

这样我就可以正确处理<experimental/filesystem><filesystem>,并抛出一些#include以避免尝试使用不受支持的编译器版本编译项目< / p>

1 个答案:

答案 0 :(得分: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(仅适用于整数,不适用于浮点类型)。
  •