* [PATCH] Make filesystem::path comparison operators hidden friends (LWG 3065)
@ 2019-04-24 22:00 Jonathan Wakely
0 siblings, 0 replies; only message in thread
From: Jonathan Wakely @ 2019-04-24 22:00 UTC (permalink / raw)
To: libstdc++, gcc-patches
[-- Attachment #1: Type: text/plain, Size: 477 bytes --]
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.
Tested powerpc64le-linux, committed to trunk.
[-- Attachment #2: patch.txt --]
[-- Type: text/plain, Size: 4456 bytes --]
commit bcfec0ca213b70e81e8291b3344ff47fd8eac012
Author: Jonathan Wakely <jwakely@redhat.com>
Date: Wed Apr 24 21:48:17 2019 +0100
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.
diff --git a/libstdc++-v3/include/bits/fs_path.h b/libstdc++-v3/include/bits/fs_path.h
index bf7c65c9cad..3674b4391f8 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 4f187da7804..f5bb1afca5d 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 5417ab4c011..4d45c7e15df 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>();
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2019-04-24 21:35 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-04-24 22:00 [PATCH] Make filesystem::path comparison operators hidden friends (LWG 3065) Jonathan Wakely
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).