mirror of
https://github.com/gcc-mirror/gcc.git
synced 2024-11-21 13:40:47 +00:00
libstdc++: Add missing parts of LWG 3480 for directory iterators [PR117560]
It looks like I only read half the resolution of LWG 3480 and decided we already supported it. As well as making the non-member overloads of end take their parameters by value, we need some specializations of the enable_borrowed_range and enable_view variable templates. libstdc++-v3/ChangeLog: PR libstdc++/117560 * include/bits/fs_dir.h (enable_borrowed_range, enable_view): Define specializations for directory iterators, as per LWG 3480. * testsuite/27_io/filesystem/iterators/lwg3480.cc: New test.
This commit is contained in:
parent
9ede072ffa
commit
eec6e89235
@ -39,6 +39,7 @@
|
||||
#if __cplusplus >= 202002L
|
||||
# include <compare> // std::strong_ordering
|
||||
# include <bits/iterator_concepts.h> // std::default_sentinel_t
|
||||
# include <bits/ranges_base.h> // enable_view, enable_borrowed_range
|
||||
#endif
|
||||
|
||||
namespace std _GLIBCXX_VISIBILITY(default)
|
||||
@ -626,6 +627,27 @@ _GLIBCXX_END_NAMESPACE_CXX11
|
||||
extern template class
|
||||
__shared_ptr<filesystem::recursive_directory_iterator::_Dir_stack>;
|
||||
|
||||
#if __glibcxx_ranges // >= C++20
|
||||
// _GLIBCXX_RESOLVE_LIB_DEFECTS
|
||||
// 3480. directory_iterator and recursive_directory_iterator are not ranges
|
||||
namespace ranges
|
||||
{
|
||||
template<>
|
||||
inline constexpr bool
|
||||
enable_borrowed_range<filesystem::directory_iterator> = true;
|
||||
template<>
|
||||
inline constexpr bool
|
||||
enable_borrowed_range<filesystem::recursive_directory_iterator> = true;
|
||||
|
||||
template<>
|
||||
inline constexpr bool
|
||||
enable_view<filesystem::directory_iterator> = true;
|
||||
template<>
|
||||
inline constexpr bool
|
||||
enable_view<filesystem::recursive_directory_iterator> = true;
|
||||
} // namespace ranges
|
||||
#endif // ranges
|
||||
|
||||
_GLIBCXX_END_NAMESPACE_VERSION
|
||||
} // namespace std
|
||||
|
||||
|
16
libstdc++-v3/testsuite/27_io/filesystem/iterators/lwg3480.cc
Normal file
16
libstdc++-v3/testsuite/27_io/filesystem/iterators/lwg3480.cc
Normal file
@ -0,0 +1,16 @@
|
||||
// { dg-do compile { target c++20 } }
|
||||
// { dg-require-filesystem-ts "" }
|
||||
|
||||
// LWG 3480
|
||||
// directory_iterator and recursive_directory_iterator are not C++20 ranges
|
||||
|
||||
#include <filesystem>
|
||||
|
||||
namespace fs = std::filesystem;
|
||||
namespace rg = std::ranges;
|
||||
|
||||
static_assert( rg::borrowed_range<fs::directory_iterator> );
|
||||
static_assert( rg::borrowed_range<fs::recursive_directory_iterator> );
|
||||
|
||||
static_assert( rg::view<fs::directory_iterator> );
|
||||
static_assert( rg::view<fs::recursive_directory_iterator> );
|
Loading…
Reference in New Issue
Block a user