diff --git a/libcxx/docs/Status/SpaceshipProjects.csv b/libcxx/docs/Status/SpaceshipProjects.csv --- a/libcxx/docs/Status/SpaceshipProjects.csv +++ b/libcxx/docs/Status/SpaceshipProjects.csv @@ -74,7 +74,7 @@ | `[time.zone.link.nonmembers] `_","| chrono::time_zone | chrono::leap_second | chrono::time_zone_link",A ```` implementation,Unassigned,|Not Started| -| `[fs.filesystem.syn] `_,| `filesystem::space_info `_,None,Adrian Vogelsgesang,|In Progress| +| `[fs.filesystem.syn] `_,| `filesystem::space_info `_,None,Adrian Vogelsgesang,|Complete| | `[fs.path.nonmember] `_,| `filesystem::path `_,None,Adrian Vogelsgesang,|In Progress| | `[fs.dir.entry.obs] `_,| `filesystem::directory_entry `_,None,Adrian Vogelsgesang,|In Progress| | `[re.submatch.op] `_,| sub_match,None,Mark de Wever,|In Progress| diff --git a/libcxx/include/__filesystem/space_info.h b/libcxx/include/__filesystem/space_info.h --- a/libcxx/include/__filesystem/space_info.h +++ b/libcxx/include/__filesystem/space_info.h @@ -28,6 +28,10 @@ uintmax_t capacity; uintmax_t free; uintmax_t available; + +# if _LIBCPP_STD_VER > 17 + friend _LIBCPP_HIDE_FROM_ABI bool operator==(const space_info&, const space_info&) = default; +# endif }; _LIBCPP_AVAILABILITY_FILESYSTEM_POP diff --git a/libcxx/include/filesystem b/libcxx/include/filesystem --- a/libcxx/include/filesystem +++ b/libcxx/include/filesystem @@ -64,6 +64,8 @@ uintmax_t capacity; uintmax_t free; uintmax_t available; + + friend bool operator==(const space_info&, const space_info&) = default; // C++20 }; enum class file_type; diff --git a/libcxx/test/std/input.output/filesystems/fs.filesystem.synopsis/space_info.pass.cpp b/libcxx/test/std/input.output/filesystems/fs.filesystem.synopsis/space_info.pass.cpp new file mode 100644 --- /dev/null +++ b/libcxx/test/std/input.output/filesystems/fs.filesystem.synopsis/space_info.pass.cpp @@ -0,0 +1,40 @@ +//===----------------------------------------------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// +// UNSUPPORTED: c++03, c++11, c++14, c++17 + +// + +// friend bool operator==(const space_info&, const space_info&); + +#include "filesystem_include.h" + +#include "test_macros.h" +#include "test_comparisons.h" + +using namespace fs; + +constexpr bool test() { + assert(testEquality(space_info{1, 2, 3}, space_info{1, 2, 3}, true)); + assert(testEquality(space_info{0, 2, 3}, space_info{1, 2, 3}, false)); + assert(testEquality(space_info{1, 0, 3}, space_info{1, 2, 3}, false)); + assert(testEquality(space_info{1, 2, 0}, space_info{1, 2, 3}, false)); + + return true; +} + +int main(int, char**) { + using space_info = std::filesystem::space_info; + + AssertEqualityAreNoexcept(); + AssertEqualityReturnBool(); + + test(); + static_assert(test()); + + return 0; +}