最終更新日時: 2026年07月23日 11時34分53秒 (JST)
Raclamusi が更新

履歴 編集

function
<memory>

# std::indirect::swap(C++26)

    constexpr void swap(indirect& other) noexcept(see below);

## 概要

`*this`と`other`の状態を交換する。所有オブジェクトまたは無効値状態を交換する。

## 事前条件

`allocator_traits<Allocator>::propagate_on_container_swap::value`が`true`の場合、`Allocator`はCpp17Swappable要件を満たすこと。そうでない場合、`get_allocator() == other.get_allocator()`が`true`であること。

## 効果

`*this`と`other`の状態（所有オブジェクトまたは無効値状態）を交換する。`propagate_on_container_swap::value`が`true`の場合はアロケータも交換する。所有オブジェクトに対して直接`swap`を呼ぶわけではない。

## 例外

以下と等価な`noexcept`指定を持つ：

    noexcept(allocator_traits<Allocator>::propagate_on_container_swap::value ||
             allocator_traits<Allocator>::is_always_equal::value)

## 例

    #include <cassert>
    #include <memory>

    int main()
    {
      std::indirect<int> a{1};
      std::indirect<int> b{2};
      a.swap(b);
      assert(*a == 2 && *b == 1);
    }

### 出力

## バージョン

### 言語

- C++26

### 処理系

- Clang: 22 ❌
- GCC: 16.1 ✅
- Visual C++: 2026 Update 2 ❌

## 関連項目

- `std::indirect`

## 参照

- P3019R14 `indirect` and `polymorphic`: Vocabulary Types for Composite Class Design