【发布时间】:2020-02-08 20:15:03
【问题描述】:
GCC (10.0.1) 和 Clang (11.0.0)/MSVC (VS 16.4.3) 当带有斜杠的不存在路径给出为论据。
更准确地说,虽然所有三个编译器都确实创建了目录,但后两个在这种情况下返回 false,使得 std::filesystem::create_directories() 的返回值模棱两可(并且违反直觉)。
具体来说,如果路径“a/b/c”处不存在文件,则如下程序,
#include <filesystem>
#include <iostream>
int main() {
std::cout << std::boolalpha << std::filesystem::create_directories("a/b/c/");
}
在该路径创建一个目录,但在 Clang/MSVC 下打印 false 而在 GCC 下打印 true。
正确的行为是什么?
【问题讨论】:
-
您确定每种情况的前提条件都相同吗?也就是说,以太
a/b/c总是存在还是a/b/c永远不存在? documentation 表示"Return value: true if a directory was created for the directory p resolves to, false otherwise"。事实上,在我正在努力在同一路径上连续两次调用create_directories的盒子上,第一次调用返回true,第二次调用返回false。
标签: c++ gcc clang c++17 std-filesystem