std::filesystem 示例未在 C++ 17 上编译

Hap*_*ine 0 c++ c++17 std-filesystem

我无法使用 c++ 17 clang 编译此官方 cpp 文件系统参考示例:

https://en.cppreference.com/w/cpp/filesystem/recursive_directory_iterator

#include <fstream>
#include <iostream>
#include <filesystem>
namespace fs = std::filesystem;

int main()
{
   fs::current_path(fs::temp_directory_path());
   fs::create_directories("sandbox/a/b");
   std::ofstream("sandbox/file1.txt");
   fs::create_symlink("a", "sandbox/syma");

   // Iterate over the `std::filesystem::directory_entry` elements explicitly
   for (const fs::directory_entry& dir_entry : 
       fs::recursive_directory_iterator("sandbox"))
   {
       std::cout << dir_entry << '\n';
   }
   std::cout << "-----------------------------\n";
   // Iterate over the `std::filesystem::directory_entry` elements using `auto`
   for (auto const& dir_entry : fs::recursive_directory_iterator("sandbox"))
   {
       std::cout << dir_entry << '\n';
   }

   fs::remove_all("sandbox");
}
Run Code Online (Sandbox Code Playgroud)

编译器返回:

/main.cpp:17:19:错误:二进制表达式的操作数无效('std::__1::ostream'(又名'basic_ostream')和'const fs::directory_entry')std::cout << dir_entry << std::endl;

有人可以帮忙吗?

Yks*_*nen 5

C++17 标准中存在一个缺陷,不允许operator<<使用 进行调用std::filesystem::directory_entry,已在LWG 3171中报告。它现在已修复为缺陷报告,但似乎 clang 仅在版本 14 中修复了它: https: //godbolt.org/z/3arTcGYvY。gcc 似乎已将修复程序反向移植到所有支持的版本std::filesystem(即 gcc9.1 及更高版本): https: //godbolt.org/z/fh7cdMxso