[libc++] Mark more types as trivially relocatable (#89724)
Co-authored-by: Louis Dionne <ldionne.2@gmail.com>
This commit is contained in:
@@ -24,12 +24,14 @@
|
||||
#include <__memory/pointer_traits.h>
|
||||
#include <__memory/swap_allocator.h>
|
||||
#include <__type_traits/add_lvalue_reference.h>
|
||||
#include <__type_traits/conditional.h>
|
||||
#include <__type_traits/enable_if.h>
|
||||
#include <__type_traits/integral_constant.h>
|
||||
#include <__type_traits/is_nothrow_assignable.h>
|
||||
#include <__type_traits/is_nothrow_constructible.h>
|
||||
#include <__type_traits/is_swappable.h>
|
||||
#include <__type_traits/is_trivially_destructible.h>
|
||||
#include <__type_traits/is_trivially_relocatable.h>
|
||||
#include <__type_traits/remove_reference.h>
|
||||
#include <__utility/forward.h>
|
||||
#include <__utility/move.h>
|
||||
@@ -64,6 +66,15 @@ public:
|
||||
using iterator = pointer;
|
||||
using const_iterator = const_pointer;
|
||||
|
||||
// A __split_buffer contains the following members which may be trivially relocatable:
|
||||
// - pointer: may be trivially relocatable, so it's checked
|
||||
// - allocator_type: may be trivially relocatable, so it's checked
|
||||
// __split_buffer doesn't have any self-references, so it's trivially relocatable if its members are.
|
||||
using __trivially_relocatable = __conditional_t<
|
||||
__libcpp_is_trivially_relocatable<pointer>::value && __libcpp_is_trivially_relocatable<allocator_type>::value,
|
||||
__split_buffer,
|
||||
void>;
|
||||
|
||||
pointer __first_;
|
||||
pointer __begin_;
|
||||
pointer __end_;
|
||||
|
||||
Reference in New Issue
Block a user