diff options
Diffstat (limited to 'absl/status')
-rw-r--r-- | absl/status/internal/statusor_internal.h | 2 | ||||
-rw-r--r-- | absl/status/statusor_test.cc | 11 |
2 files changed, 12 insertions, 1 deletions
diff --git a/absl/status/internal/statusor_internal.h b/absl/status/internal/statusor_internal.h index 96e41da5..7cc76256 100644 --- a/absl/status/internal/statusor_internal.h +++ b/absl/status/internal/statusor_internal.h @@ -215,7 +215,7 @@ class StatusOrData { template <typename U, absl::enable_if_t<std::is_constructible<absl::Status, U&&>::value, int> = 0> - explicit StatusOrData(U&& v) : status_(v) { + explicit StatusOrData(U&& v) : status_(std::forward<U>(v)) { EnsureNotOk(); } diff --git a/absl/status/statusor_test.cc b/absl/status/statusor_test.cc index 5e4b2687..c2e8fb7e 100644 --- a/absl/status/statusor_test.cc +++ b/absl/status/statusor_test.cc @@ -292,6 +292,17 @@ TEST(StatusOr, TestDefaultCtor) { EXPECT_EQ(thing.status().code(), absl::StatusCode::kUnknown); } +TEST(StatusOr, StatusCtorForwards) { + absl::Status status(absl::StatusCode::kInternal, "Some error"); + + EXPECT_EQ(absl::StatusOr<int>(status).status().message(), "Some error"); + EXPECT_EQ(status.message(), "Some error"); + + EXPECT_EQ(absl::StatusOr<int>(std::move(status)).status().message(), + "Some error"); + EXPECT_NE(status.message(), "Some error"); +} + // Define `EXPECT_DEATH_OR_THROW` to test the behavior of `StatusOr::value`, // which either throws `BadStatusOrAccess` or `LOG(FATAL)` based on whether // exceptions are enabled. |