322 debug_name_ = debug_name;
327 if constexpr (std::is_default_constructible_v<T>) {
328 default_construct_ = default_construct_cb<T>;
329 default_construct_n_ = default_construct_n_cb<T>;
330 default_construct_indices_ = default_construct_indices_cb<T>;
331 value_initialize_ = value_initialize_cb<T>;
332 value_initialize_n_ = value_initialize_n_cb<T>;
333 value_initialize_indices_ = value_initialize_indices_cb<T>;
343 if constexpr (std::is_destructible_v<T>) {
344 destruct_ = destruct_cb<T>;
345 destruct_n_ = destruct_n_cb<T>;
346 destruct_indices_ = destruct_indices_cb<T>;
348 if constexpr (std::is_copy_assignable_v<T>) {
349 copy_assign_ = copy_assign_cb<T>;
350 copy_assign_n_ = copy_assign_n_cb<T>;
351 copy_assign_indices_ = copy_assign_indices_cb<T>;
352 copy_assign_compressed_ = copy_assign_compressed_cb<T>;
354 if constexpr (std::is_copy_constructible_v<T>) {
355 if constexpr (std::is_trivially_copy_constructible_v<T>) {
356 copy_construct_ = copy_assign_;
357 copy_construct_n_ = copy_assign_n_;
358 copy_construct_indices_ = copy_assign_indices_;
359 copy_construct_compressed_ = copy_assign_compressed_;
362 copy_construct_ = copy_construct_cb<T>;
363 copy_construct_n_ = copy_construct_n_cb<T>;
364 copy_construct_indices_ = copy_construct_indices_cb<T>;
365 copy_construct_compressed_ = copy_construct_compressed_cb<T>;
368 if constexpr (std::is_move_assignable_v<T>) {
369 if constexpr (std::is_trivially_move_assignable_v<T>) {
372 move_assign_ =
reinterpret_cast<decltype(move_assign_)
>(copy_assign_);
373 move_assign_n_ =
reinterpret_cast<decltype(move_assign_n_)
>(copy_assign_n_);
374 move_assign_indices_ =
reinterpret_cast<decltype(move_assign_indices_)
>(
375 copy_assign_indices_);
378 move_assign_ = move_assign_cb<T>;
379 move_assign_n_ = move_assign_n_cb<T>;
380 move_assign_indices_ = move_assign_indices_cb<T>;
383 if constexpr (std::is_move_constructible_v<T>) {
384 if constexpr (std::is_trivially_move_constructible_v<T>) {
385 move_construct_ = move_assign_;
386 move_construct_n_ = move_assign_n_;
387 move_construct_indices_ = move_assign_indices_;
390 move_construct_ = move_construct_cb<T>;
391 move_construct_n_ = move_construct_n_cb<T>;
392 move_construct_indices_ = move_construct_indices_cb<T>;
395 if constexpr (std::is_destructible_v<T>) {
396 if constexpr (std::is_trivially_move_assignable_v<T> && std::is_trivially_destructible_v<T>) {
397 relocate_assign_ = move_assign_;
398 relocate_assign_n_ = move_assign_n_;
399 relocate_assign_indices_ = move_assign_indices_;
401 relocate_construct_ = move_assign_;
402 relocate_construct_n_ = move_assign_n_;
403 relocate_construct_indices_ = move_assign_indices_;
406 if constexpr (std::is_move_assignable_v<T>) {
407 relocate_assign_ = relocate_assign_cb<T>;
408 relocate_assign_n_ = relocate_assign_n_cb<T>;
409 relocate_assign_indices_ = relocate_assign_indices_cb<T>;
411 if constexpr (std::is_move_constructible_v<T>) {
412 relocate_construct_ = relocate_construct_cb<T>;
413 relocate_construct_n_ = relocate_construct_n_cb<T>;
414 relocate_construct_indices_ = relocate_construct_indices_cb<T>;
418 if constexpr (std::is_copy_assignable_v<T>) {
419 fill_assign_n_ = fill_assign_n_cb<T>;
420 fill_assign_indices_ = fill_assign_indices_cb<T>;
422 if constexpr (std::is_copy_constructible_v<T>) {
423 if constexpr (std::is_trivially_constructible_v<T>) {
424 fill_construct_n_ = fill_assign_n_;
425 fill_construct_indices_ = fill_assign_indices_;
428 fill_construct_n_ = fill_construct_n_cb<T>;
429 fill_construct_indices_ = fill_construct_indices_cb<T>;
436 print_ = print_cb<T>;
439 is_equal_ = is_equal_cb<T>;
442 alignment_mask_ = uintptr_t(this->
alignment) - uintptr_t(1);
444 move_construct_ && move_assign_ && destruct_);