Changes imported from Abseil "staging" branch:
- d7810aa3eadf258776b9c4914df3b3db68791829 absl::optional<T>::value_or(U) now enforces copy/move by Matt Armstrong <marmstrong@google.com> - 3cc15e447c1851a91dd88e537e5f74faece605a3 Use ABSL_EXCEPTIONS_FLAG instead of -fexceptions in absl/... by Jon Cohen <cohenjon@google.com> GitOrigin-RevId: d7810aa3eadf258776b9c4914df3b3db68791829 Change-Id: Ib40e22678944b633e734af790449871630f0eeab
This commit is contained in:
parent
787891a388
commit
dcf112f074
2 changed files with 11 additions and 2 deletions
|
|
@ -849,12 +849,20 @@ class optional : private optional_internal::optional_data<T>,
|
|||
// is empty.
|
||||
template <typename U>
|
||||
constexpr T value_or(U&& v) const& {
|
||||
static_assert(std::is_copy_constructible<value_type>::value,
|
||||
"optional<T>::value_or: T must by copy constructible");
|
||||
static_assert(std::is_convertible<U&&, value_type>::value,
|
||||
"optional<T>::value_or: U must be convertible to T");
|
||||
return static_cast<bool>(*this)
|
||||
? **this
|
||||
: static_cast<T>(absl::forward<U>(v));
|
||||
}
|
||||
template <typename U>
|
||||
T value_or(U&& v) && { // NOLINT(build/c++11)
|
||||
static_assert(std::is_move_constructible<value_type>::value,
|
||||
"optional<T>::value_or: T must by copy constructible");
|
||||
static_assert(std::is_convertible<U&&, value_type>::value,
|
||||
"optional<T>::value_or: U must be convertible to T");
|
||||
return static_cast<bool>(*this) ? std::move(**this)
|
||||
: static_cast<T>(std::forward<U>(v));
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue