aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libstdc++-v3/ChangeLog5
-rw-r--r--libstdc++-v3/include/bits/fs_dir.h50
2 files changed, 27 insertions, 28 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index 655c3d0..65b16d8 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,5 +1,10 @@
2019-04-05 Jonathan Wakely <jwakely@redhat.com>
+ * include/bits/fs_dir.h (directory_iterator::operator*)
+ (directory_iterator::operator->): Add noexcept.
+ (operator==, operator!=): Replace namespace-scope equality operators
+ for directory iterators with hidden friends.
+
PR libstdc++/89986
* config/abi/pre/gnu.ver: Add missing exports.
* testsuite/27_io/filesystem/iterators/directory_iterator.cc: Test
diff --git a/libstdc++-v3/include/bits/fs_dir.h b/libstdc++-v3/include/bits/fs_dir.h
index a5947b3..69f0eb8 100644
--- a/libstdc++-v3/include/bits/fs_dir.h
+++ b/libstdc++-v3/include/bits/fs_dir.h
@@ -390,8 +390,8 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
directory_iterator&
operator=(directory_iterator&& __rhs) noexcept = default;
- const directory_entry& operator*() const;
- const directory_entry* operator->() const { return &**this; }
+ const directory_entry& operator*() const noexcept;
+ const directory_entry* operator->() const noexcept { return &**this; }
directory_iterator& operator++();
directory_iterator& increment(error_code& __ec);
@@ -407,7 +407,16 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
friend bool
operator==(const directory_iterator& __lhs,
- const directory_iterator& __rhs);
+ const directory_iterator& __rhs) noexcept
+ {
+ return !__rhs._M_dir.owner_before(__lhs._M_dir)
+ && !__lhs._M_dir.owner_before(__rhs._M_dir);
+ }
+
+ friend bool
+ operator!=(const directory_iterator& __lhs,
+ const directory_iterator& __rhs) noexcept
+ { return !(__lhs == __rhs); }
friend class recursive_directory_iterator;
@@ -422,17 +431,6 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
end(directory_iterator) noexcept
{ return directory_iterator(); }
- inline bool
- operator==(const directory_iterator& __lhs, const directory_iterator& __rhs)
- {
- return !__rhs._M_dir.owner_before(__lhs._M_dir)
- && !__lhs._M_dir.owner_before(__rhs._M_dir);
- }
-
- inline bool
- operator!=(const directory_iterator& __lhs, const directory_iterator& __rhs)
- { return !(__lhs == __rhs); }
-
class recursive_directory_iterator
{
public:
@@ -499,7 +497,16 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
friend bool
operator==(const recursive_directory_iterator& __lhs,
- const recursive_directory_iterator& __rhs);
+ const recursive_directory_iterator& __rhs) noexcept
+ {
+ return !__rhs._M_dirs.owner_before(__lhs._M_dirs)
+ && !__lhs._M_dirs.owner_before(__rhs._M_dirs);
+ }
+
+ friend bool
+ operator!=(const recursive_directory_iterator& __lhs,
+ const recursive_directory_iterator& __rhs) noexcept
+ { return !(__lhs == __rhs); }
struct _Dir_stack;
std::__shared_ptr<_Dir_stack> _M_dirs;
@@ -513,19 +520,6 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
end(recursive_directory_iterator) noexcept
{ return recursive_directory_iterator(); }
- inline bool
- operator==(const recursive_directory_iterator& __lhs,
- const recursive_directory_iterator& __rhs)
- {
- return !__rhs._M_dirs.owner_before(__lhs._M_dirs)
- && !__lhs._M_dirs.owner_before(__rhs._M_dirs);
- }
-
- inline bool
- operator!=(const recursive_directory_iterator& __lhs,
- const recursive_directory_iterator& __rhs)
- { return !(__lhs == __rhs); }
-
_GLIBCXX_END_NAMESPACE_CXX11
// @} group filesystem