Export of internal Abseil changes.
-- 61a5128b3b3db9db7df219b7ef737b78f7743e54 by Abseil Team <absl-team@google.com>: Internal change PiperOrigin-RevId: 239413069 -- fd47ba5c2243523cc579239a220254cbc47376af by Jon Cohen <cohenjon@google.com>: Internal change. PiperOrigin-RevId: 239404848 -- bece0ae2b391351feb27547a4693f4e654b1b4ab by Eric Fiselier <ericwf@google.com>: Unconditionally include memory.h in optional. PiperOrigin-RevId: 239298731 GitOrigin-RevId: 61a5128b3b3db9db7df219b7ef737b78f7743e54 Change-Id: I09c1268154f1c8ea2b653d3e907f709e09025817
This commit is contained in:
		
							parent
							
								
									bf29470384
								
							
						
					
					
						commit
						e75672f6af
					
				
					 6 changed files with 210 additions and 21 deletions
				
			
		|  | @ -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 <utility> | ||||
| 
 | ||||
| #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<copy_traits::non_movable> { | |||
| }; | ||||
| 
 | ||||
| template <typename T> | ||||
| constexpr copy_traits get_ctor_copy_traits() { | ||||
|   return std::is_copy_constructible<T>::value | ||||
|              ? copy_traits::copyable | ||||
|              : std::is_move_constructible<T>::value ? copy_traits::movable | ||||
|                                                     : copy_traits::non_movable; | ||||
| } | ||||
| struct ctor_copy_traits { | ||||
|   static constexpr copy_traits traits = | ||||
|       std::is_copy_constructible<T>::value | ||||
|           ? copy_traits::copyable | ||||
|           : std::is_move_constructible<T>::value ? copy_traits::movable | ||||
|                                                  : copy_traits::non_movable; | ||||
| }; | ||||
| 
 | ||||
| template <typename T> | ||||
| constexpr copy_traits get_assign_copy_traits() { | ||||
|   return absl::is_copy_assignable<T>::value && | ||||
|                  std::is_copy_constructible<T>::value | ||||
|              ? copy_traits::copyable | ||||
|              : absl::is_move_assignable<T>::value && | ||||
|                        std::is_move_constructible<T>::value | ||||
|                    ? copy_traits::movable | ||||
|                    : copy_traits::non_movable; | ||||
| } | ||||
| struct assign_copy_traits { | ||||
|   static constexpr copy_traits traits = | ||||
|       absl::is_copy_assignable<T>::value && std::is_copy_constructible<T>::value | ||||
|           ? copy_traits::copyable | ||||
|           : absl::is_move_assignable<T>::value && | ||||
|                     std::is_move_constructible<T>::value | ||||
|                 ? copy_traits::movable | ||||
|                 : copy_traits::non_movable; | ||||
| }; | ||||
| 
 | ||||
| // Whether T is constructible or convertible from optional<U>.
 | ||||
| template <typename T, typename U> | ||||
|  | @ -482,9 +483,9 @@ struct optional_hash_base<T, decltype(std::hash<absl::remove_const_t<T> >()( | |||
| template <typename T> | ||||
| class optional : private optional_internal::optional_data<T>, | ||||
|                  private optional_internal::optional_ctor_base< | ||||
|                      optional_internal::get_ctor_copy_traits<T>()>, | ||||
|                      optional_internal::ctor_copy_traits<T>::traits>, | ||||
|                  private optional_internal::optional_assign_base< | ||||
|                      optional_internal::get_assign_copy_traits<T>()> { | ||||
|                      optional_internal::assign_copy_traits<T>::traits> { | ||||
|   using data_base = optional_internal::optional_data<T>; | ||||
| 
 | ||||
|  public: | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue