summaryrefslogtreecommitdiff
path: root/absl
diff options
context:
space:
mode:
Diffstat (limited to 'absl')
-rw-r--r--absl/container/BUILD.bazel5
-rw-r--r--absl/types/optional.h8
2 files changed, 11 insertions, 2 deletions
diff --git a/absl/container/BUILD.bazel b/absl/container/BUILD.bazel
index 295f4125..8bdf6312 100644
--- a/absl/container/BUILD.bazel
+++ b/absl/container/BUILD.bazel
@@ -18,6 +18,7 @@ load(
"//absl:copts.bzl",
"ABSL_DEFAULT_COPTS",
"ABSL_TEST_COPTS",
+ "ABSL_EXCEPTIONS_FLAG",
)
package(default_visibility = ["//visibility:public"])
@@ -40,7 +41,7 @@ cc_library(
cc_test(
name = "fixed_array_test",
srcs = ["fixed_array_test.cc"],
- copts = ABSL_TEST_COPTS + ["-fexceptions"],
+ copts = ABSL_TEST_COPTS + ABSL_EXCEPTIONS_FLAG,
deps = [
":fixed_array",
"//absl/base:exception_testing",
@@ -76,7 +77,7 @@ cc_library(
cc_test(
name = "inlined_vector_test",
srcs = ["inlined_vector_test.cc"],
- copts = ABSL_TEST_COPTS + ["-fexceptions"],
+ copts = ABSL_TEST_COPTS + ABSL_EXCEPTIONS_FLAG,
deps = [
":inlined_vector",
":test_instance_tracker",
diff --git a/absl/types/optional.h b/absl/types/optional.h
index ef825591..9858a974 100644
--- a/absl/types/optional.h
+++ b/absl/types/optional.h
@@ -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));
}