最終更新日時: 2026年05月18日 11時56分37秒 (JST)
Akira Takahashi が更新

履歴 編集

function
<inplace_vector>

# std::inplace_vector::try_push_back(C++26)

    constexpr std::optional<reference> try_push_back(const T& x); // (1) C++26
    constexpr std::optional<reference> try_push_back(T&& x);      // (2) C++26

## 概要

末尾へ要素追加を試みる。容量超過時は例外を送出せず、`std::nullopt`を返す。

- (1) : `x`をコピーして末尾への追加を試みる。
- (2) : `x`をムーブして末尾への追加を試みる。

## 効果

`size() < N`の場合、`x`を末尾に追加する。そうでない場合、何もしない。

## 戻り値

要素が追加された場合は追加された要素への参照を保持した`std::optional`、追加できなかった場合は`std::nullopt`を返す。

## 例外

投げない（`T`のコンストラクタが例外を送出する場合を除く）

## 計算量

定数時間

## 例

    #include <print>
    #include <inplace_vector>

    int main()
    {
      std::inplace_vector<int, 3> iv = {1, 2, 3};

      auto r1 = iv.try_push_back(4);
      std::println("push_back(4): {}", (r1 ? "success" : "failed"));

      iv.pop_back();
      auto r2 = iv.try_push_back(4);
      std::println("push_back(4): {}", (r2 ? "success" : "failed"));
      std::println("value: {}", *r2);
    }

### 出力

    push_back(4): failed
    push_back(4): success
    value: 4

## バージョン

### 言語

- C++26

### 処理系

- Clang: 23 ✅
- GCC: 16 ✅
- Visual C++: 2026 Update 2 ❌

## 参照

- P0843R14 `inplace_vector`
- P3981R2 Better return types in `std::inplace_vector` and `std::exception_ptr_cast`
  - 戻り値型を`pointer`から`std::optional<reference>`に変更