diff options
Diffstat (limited to 'test/util')
-rw-r--r-- | test/util/posix_error.h | 26 | ||||
-rw-r--r-- | test/util/proc_util.h | 2 |
2 files changed, 21 insertions, 7 deletions
diff --git a/test/util/posix_error.h b/test/util/posix_error.h index 8450be9b9..2dc5504fd 100644 --- a/test/util/posix_error.h +++ b/test/util/posix_error.h @@ -103,8 +103,10 @@ class ABSL_MUST_USE_RESULT PosixErrorOr { bool ok() const; // Returns a reference to our current value, or CHECK-fails if !this->ok(). - const T& ValueOrDie() const; - T& ValueOrDie(); + const T& ValueOrDie() const&; + T& ValueOrDie() &; + const T&& ValueOrDie() const&&; + T&& ValueOrDie() &&; // Ignores any errors. This method does nothing except potentially suppress // complaints from any tools that are checking that errors are not dropped on @@ -179,17 +181,29 @@ bool PosixErrorOr<T>::ok() const { } template <typename T> -const T& PosixErrorOr<T>::ValueOrDie() const { +const T& PosixErrorOr<T>::ValueOrDie() const& { TEST_CHECK(absl::holds_alternative<T>(value_)); return absl::get<T>(value_); } template <typename T> -T& PosixErrorOr<T>::ValueOrDie() { +T& PosixErrorOr<T>::ValueOrDie() & { TEST_CHECK(absl::holds_alternative<T>(value_)); return absl::get<T>(value_); } +template <typename T> +const T&& PosixErrorOr<T>::ValueOrDie() const&& { + TEST_CHECK(absl::holds_alternative<T>(value_)); + return std::move(absl::get<T>(value_)); +} + +template <typename T> +T&& PosixErrorOr<T>::ValueOrDie() && { + TEST_CHECK(absl::holds_alternative<T>(value_)); + return std::move(absl::get<T>(value_)); +} + extern ::std::ostream& operator<<(::std::ostream& os, const PosixError& e); template <typename T> @@ -399,7 +413,7 @@ IsPosixErrorOkAndHolds(InnerMatcher&& inner_matcher) { if (!posixerroror.ok()) { \ return (posixerroror.error()); \ } \ - lhs = std::move(posixerroror.ValueOrDie()) + lhs = std::move(posixerroror).ValueOrDie() #define EXPECT_NO_ERRNO(expression) \ EXPECT_THAT(expression, IsPosixErrorOkMatcher()) @@ -419,7 +433,7 @@ IsPosixErrorOkAndHolds(InnerMatcher&& inner_matcher) { ({ \ auto _expr_result = (expr); \ ASSERT_NO_ERRNO(_expr_result); \ - std::move(_expr_result.ValueOrDie()); \ + std::move(_expr_result).ValueOrDie(); \ }) } // namespace testing diff --git a/test/util/proc_util.h b/test/util/proc_util.h index f8021d92e..e1ee2db9c 100644 --- a/test/util/proc_util.h +++ b/test/util/proc_util.h @@ -115,7 +115,7 @@ MATCHER_P(ContainsMappings, mappings, return false; } - auto maps = std::move(maps_or.ValueOrDie()); + auto maps = std::move(maps_or).ValueOrDie(); // Does maps contain all elements in mappings? The comparator ignores // the major, minor, and inode fields. |