[Bug libstdc++/106201] filesystem::directory_iterator is a borrowable range?
redi at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Tue Nov 22 12:33:04 GMT 2022
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106201
--- Comment #10 from Jonathan Wakely <redi at gcc dot gnu.org> ---
I'm planning to use this workaround for gcc-11 and gcc-12:
--- a/libstdc++-v3/include/bits/fs_path.h
+++ b/libstdc++-v3/include/bits/fs_path.h
@@ -737,7 +737,14 @@ namespace __detail
/// @{
/// @relates std::filesystem::path
+#if __cpp_concepts >= 201907L
+ // Workaround for PR libstdc++/106201
+ inline void
+ swap(same_as<path> auto& __lhs, same_as<path> auto& __rhs) noexcept
+ { __lhs.swap(__rhs); }
+#else
inline void swap(path& __lhs, path& __rhs) noexcept { __lhs.swap(__rhs); }
+#endif
size_t hash_value(const path& __p) noexcept;
This will prevent that swap overload from being a candidate for swapping
counted_iterator<filesystem::directory_iterator>, so we won't check for
conversion to path& and hit the constraint recursion.
More information about the Gcc-bugs
mailing list