std::filesystem示例不能在c++ 17上编译



我无法使用c++ 17编译这个官方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");
}

编译器返回:

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

有人能帮忙吗?

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

相关内容

  • 没有找到相关文章

最新更新