memory_uses_allocator_construction_args

memory_uses_allocator_construction_args (std::uses_allocator_construction_args)

<memory> 헤더에 정의되어 있어요. uses-allocator construction에 필요한 인자 튜플을 만들어요. std::make_obj_using_allocator·std::uninitialized_construct_using_allocator 등의 핵심 헬퍼예요. C++20부터 도입됐어요.

출처: cppreference

본문

Tstd::pair의 특수화가 아닌 경우:

template< class T, class Alloc, class... Args >
constexpr auto uses_allocator_construction_args( const Alloc& alloc, Args&&... args ) noexcept;  // (1) since C++20

Tstd::pair의 특수화인 경우:

template< class T, class Alloc, class Tuple1, class Tuple2 >
constexpr auto uses_allocator_construction_args( const Alloc& alloc, std::piecewise_construct_t, Tuple1&& x, Tuple2&& y ) noexcept;  // (2)

template< class T, class Alloc >
constexpr auto uses_allocator_construction_args( const Alloc& alloc ) noexcept;  // (3)

template< class T, class Alloc, class U, class V >
constexpr auto uses_allocator_construction_args( const Alloc& alloc, U&& u, V&& v ) noexcept;  // (4)

template< class T, class Alloc, class U, class V >
constexpr auto uses_allocator_construction_args( const Alloc& alloc, std::pair<U, V>& pr ) noexcept;  // (5) since C++23

template< class T, class Alloc, class U, class V >
constexpr auto uses_allocator_construction_args( const Alloc& alloc, const std::pair<U, V>& pr ) noexcept;  // (6)

template< class T, class Alloc, class U, class V >
constexpr auto uses_allocator_construction_args( const Alloc& alloc, std::pair<U, V>&& pr ) noexcept;  // (7)

이 함수는 std::uses_allocator<T, Alloc>::value와 T의 사용 방식을 고려해, 할당자를 T의 생성자에 전달하는 데 필요한 인자들을 담은 튜플을 돌려줘요. Tstd::uses_allocator를 만족하지 않으면 할당자 없이 기존 인자들만, 만족하면 할당자를 첫 인자 또는 마지막 인자로 넣는 방식(Alloc-اول 조건)으로 구성돼요.

// allocator-aware 타입 T 를 만들기 위한 인자 튜플
auto args = std::uses_allocator_construction_args<T>(alloc, a, b);
auto obj = std::make_from_tuple<T>(std::move(args));   // 또는 make_obj_using_allocator

std::make_obj_using_allocator<T>(alloc, args...)는 내부적으로 이 함수를 사용해 할당자를 생성 인자에 통합해요.

더 알아보기 (Learn more)

cppreference