From e75672f6afc7e8f23ee7b532e86d1b3b9be3984e Mon Sep 17 00:00:00 2001 From: Abseil Team Date: Wed, 20 Mar 2019 09:34:39 -0700 Subject: Export of internal Abseil changes. -- 61a5128b3b3db9db7df219b7ef737b78f7743e54 by Abseil Team : Internal change PiperOrigin-RevId: 239413069 -- fd47ba5c2243523cc579239a220254cbc47376af by Jon Cohen : Internal change. PiperOrigin-RevId: 239404848 -- bece0ae2b391351feb27547a4693f4e654b1b4ab by Eric Fiselier : Unconditionally include memory.h in optional. PiperOrigin-RevId: 239298731 GitOrigin-RevId: 61a5128b3b3db9db7df219b7ef737b78f7743e54 Change-Id: I09c1268154f1c8ea2b653d3e907f709e09025817 --- absl/types/optional.h | 37 +++++++++++++++++++------------------ 1 file changed, 19 insertions(+), 18 deletions(-) (limited to 'absl/types/optional.h') diff --git a/absl/types/optional.h b/absl/types/optional.h index 58906aa..f0ae9a1 100644 --- a/absl/types/optional.h +++ b/absl/types/optional.h @@ -36,6 +36,7 @@ #define ABSL_TYPES_OPTIONAL_H_ #include "absl/base/config.h" +#include "absl/memory/memory.h" #include "absl/utility/utility.h" #ifdef ABSL_HAVE_STD_OPTIONAL @@ -60,7 +61,6 @@ using std::nullopt; #include #include "absl/base/attributes.h" -#include "absl/memory/memory.h" #include "absl/meta/type_traits.h" #include "absl/types/bad_optional_access.h" @@ -400,23 +400,24 @@ class optional_assign_base { }; template -constexpr copy_traits get_ctor_copy_traits() { - return std::is_copy_constructible::value - ? copy_traits::copyable - : std::is_move_constructible::value ? copy_traits::movable - : copy_traits::non_movable; -} +struct ctor_copy_traits { + static constexpr copy_traits traits = + std::is_copy_constructible::value + ? copy_traits::copyable + : std::is_move_constructible::value ? copy_traits::movable + : copy_traits::non_movable; +}; template -constexpr copy_traits get_assign_copy_traits() { - return absl::is_copy_assignable::value && - std::is_copy_constructible::value - ? copy_traits::copyable - : absl::is_move_assignable::value && - std::is_move_constructible::value - ? copy_traits::movable - : copy_traits::non_movable; -} +struct assign_copy_traits { + static constexpr copy_traits traits = + absl::is_copy_assignable::value && std::is_copy_constructible::value + ? copy_traits::copyable + : absl::is_move_assignable::value && + std::is_move_constructible::value + ? copy_traits::movable + : copy_traits::non_movable; +}; // Whether T is constructible or convertible from optional. template @@ -482,9 +483,9 @@ struct optional_hash_base >()( template class optional : private optional_internal::optional_data, private optional_internal::optional_ctor_base< - optional_internal::get_ctor_copy_traits()>, + optional_internal::ctor_copy_traits::traits>, private optional_internal::optional_assign_base< - optional_internal::get_assign_copy_traits()> { + optional_internal::assign_copy_traits::traits> { using data_base = optional_internal::optional_data; public: -- cgit v1.2.3