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

履歴 編集

class template
<memory>

# std::hash(C++26)

    namespace std {
      template <class T, class Allocator>
      struct hash<indirect<T, Allocator>>;
    }

## 概要

`std::hash`クラスの、`std::indirect`に対する特殊化。

この特殊化は、`hash<T>`が有効である場合にのみ有効となる。

## 効果

`indirect<T, Allocator>`型のオブジェクト`i`に対して、`hash<indirect<T, Allocator>>()(i)`は、`i`が無効値状態でなければ`hash<T>()(*i)`と同じ値を返し、無効値状態であれば処理系定義の値を返す。

## 備考

メンバ関数が`noexcept`である保証はない。

## 例

    #include <cassert>
    #include <functional>
    #include <memory>

    int main()
    {
      std::indirect<int> a{42};
      // 所有する値のハッシュ値と一致する
      assert((std::hash<std::indirect<int>>{}(a) == std::hash<int>{}(42)));
    }

### 出力

## バージョン

### 言語

- C++26

### 処理系

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

## 関連項目

- `std::indirect`

## 参照

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