aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2019-04-24 22:35:26 +0100
committerJonathan Wakely <redi@gcc.gnu.org>2019-04-24 22:35:26 +0100
commitf90b16c429fec60a1aaa10c6ef26a7a536b61e2a (patch)
tree5342a8d7159aa08ff7bd930aeaf6de872b652192
parent7f8aaa1ae95814217fa81692f08e01781fa5f747 (diff)
downloadgcc-f90b16c429fec60a1aaa10c6ef26a7a536b61e2a.zip
gcc-f90b16c429fec60a1aaa10c6ef26a7a536b61e2a.tar.gz
gcc-f90b16c429fec60a1aaa10c6ef26a7a536b61e2a.tar.bz2
Make filesystem::path comparison operators hidden friends (LWG 3065)
This change revealed two testsuite bugs where some string comparisons only compiled by converting the strings to filesystem::path objects. * include/bits/fs_path.h (operator<, operator<=, operator>) (operator>=, operator==, operator!=): Make hidden friends, as per LWG 3065. * testsuite/27_io/filesystem/path/native/string-char8_t.cc: Fix string type in test. * testsuite/27_io/filesystem/path/native/string.cc: Likewise. From-SVN: r270558
-rw-r--r--libstdc++-v3/ChangeLog7
-rw-r--r--libstdc++-v3/include/bits/fs_path.h66
-rw-r--r--libstdc++-v3/testsuite/27_io/filesystem/path/native/string-char8_t.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/filesystem/path/native/string.cc2
4 files changed, 43 insertions, 34 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index 33b6371..abd3b52 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,5 +1,12 @@
2019-04-24 Jonathan Wakely <jwakely@redhat.com>
+ * include/bits/fs_path.h (operator<, operator<=, operator>)
+ (operator>=, operator==, operator!=): Make hidden friends, as per
+ LWG 3065.
+ * testsuite/27_io/filesystem/path/native/string-char8_t.cc: Fix
+ string type in test.
+ * testsuite/27_io/filesystem/path/native/string.cc: Likewise.
+
* include/std/any (any::any(ValueType&&)): Use __and_v.
* include/std/numeric (midpoint(T, T, T), midpoint(T*, T*, T*)):
Likewise.
diff --git a/libstdc++-v3/include/bits/fs_path.h b/libstdc++-v3/include/bits/fs_path.h
index bf7c65c..3674b43 100644
--- a/libstdc++-v3/include/bits/fs_path.h
+++ b/libstdc++-v3/include/bits/fs_path.h
@@ -417,6 +417,40 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
return __is;
}
+ // non-member operators
+
+ /// Compare paths
+ friend bool operator<(const path& __lhs, const path& __rhs) noexcept
+ { return __lhs.compare(__rhs) < 0; }
+
+ /// Compare paths
+ friend bool operator<=(const path& __lhs, const path& __rhs) noexcept
+ { return !(__rhs < __lhs); }
+
+ /// Compare paths
+ friend bool operator>(const path& __lhs, const path& __rhs) noexcept
+ { return __rhs < __lhs; }
+
+ /// Compare paths
+ friend bool operator>=(const path& __lhs, const path& __rhs) noexcept
+ { return !(__lhs < __rhs); }
+
+ /// Compare paths
+ friend bool operator==(const path& __lhs, const path& __rhs) noexcept
+ { return __lhs.compare(__rhs) == 0; }
+
+ /// Compare paths
+ friend bool operator!=(const path& __lhs, const path& __rhs) noexcept
+ { return !(__lhs == __rhs); }
+
+ /// Append one path to another
+ friend path operator/(const path& __lhs, const path& __rhs)
+ {
+ path __result(__lhs);
+ __result /= __rhs;
+ return __result;
+ }
+
// Create a basic_string by reading until a null character.
template<typename _InputIterator,
typename _Traits = std::iterator_traits<_InputIterator>,
@@ -578,38 +612,6 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
size_t hash_value(const path& __p) noexcept;
- /// Compare paths
- inline bool operator<(const path& __lhs, const path& __rhs) noexcept
- { return __lhs.compare(__rhs) < 0; }
-
- /// Compare paths
- inline bool operator<=(const path& __lhs, const path& __rhs) noexcept
- { return !(__rhs < __lhs); }
-
- /// Compare paths
- inline bool operator>(const path& __lhs, const path& __rhs) noexcept
- { return __rhs < __lhs; }
-
- /// Compare paths
- inline bool operator>=(const path& __lhs, const path& __rhs) noexcept
- { return !(__lhs < __rhs); }
-
- /// Compare paths
- inline bool operator==(const path& __lhs, const path& __rhs) noexcept
- { return __lhs.compare(__rhs) == 0; }
-
- /// Compare paths
- inline bool operator!=(const path& __lhs, const path& __rhs) noexcept
- { return !(__lhs == __rhs); }
-
- /// Append one path to another
- inline path operator/(const path& __lhs, const path& __rhs)
- {
- path __result(__lhs);
- __result /= __rhs;
- return __result;
- }
-
template<typename _InputIterator>
inline auto
u8path(_InputIterator __first, _InputIterator __last)
diff --git a/libstdc++-v3/testsuite/27_io/filesystem/path/native/string-char8_t.cc b/libstdc++-v3/testsuite/27_io/filesystem/path/native/string-char8_t.cc
index 4f187da..f5bb1af 100644
--- a/libstdc++-v3/testsuite/27_io/filesystem/path/native/string-char8_t.cc
+++ b/libstdc++-v3/testsuite/27_io/filesystem/path/native/string-char8_t.cc
@@ -46,7 +46,7 @@ test02()
path p(s);
auto str = p.string<char>();
- VERIFY( str == u"abc" );
+ VERIFY( str == "abc" );
VERIFY( str == p.string() );
auto strw = p.string<wchar_t>();
diff --git a/libstdc++-v3/testsuite/27_io/filesystem/path/native/string.cc b/libstdc++-v3/testsuite/27_io/filesystem/path/native/string.cc
index 5417ab4..4d45c7e 100644
--- a/libstdc++-v3/testsuite/27_io/filesystem/path/native/string.cc
+++ b/libstdc++-v3/testsuite/27_io/filesystem/path/native/string.cc
@@ -46,7 +46,7 @@ test02()
path p(s);
auto str = p.string<char>();
- VERIFY( str == u"abc" );
+ VERIFY( str == "abc" );
VERIFY( str == p.string() );
auto strw = p.string<wchar_t>();