最終更新日時: 2026年02月11日 15時05分02秒 (JST)
yoh が更新

履歴 編集

class template
<utility>

# std::constant_arg_t(C++26)

    namespace std {
      template <auto V>
      struct constant_arg_t {
        explicit constant_arg_t() = default;
      };

      template <auto V> constexpr constant_arg_t<V> constant_arg{};
    }

## 概要

`constant_arg_t`クラスは、オーバーロードのための空クラスである。

標準ライブラリの特定機能において、定数引数をテンプレートパラメータとして受け取って構築するための関数オーバーロードを定義するためにある。

## 備考

デフォルトコンストラクタに`explicit`が付いているのは、`constant_arg_t<F> x = {};`のように`=`付きの波カッコ初期化を禁止するためである。ユーザーは通常、`constant_arg_t`型の変数テンプレートとして事前定義されている`constant_arg`を使用すればよいので、問題にはならない。

## 例

    #include <functional>
    #include <print>
    #include <utility>

    void call(std::function_ref<void()> fn)
    {
      fn();
    }

    struct Dog {
      void cry() { std::println("Bow-wow"); }
    };

    int main()
    {
      Dog dog;
      call({std::constant_arg<&Dog::cry>, dog});
    }

### 出力

    Bow-wow

## バージョン

### 言語

- C++26

### 処理系

- Clang: ??
- GCC: ??
- ICC: ??
- Visual C++: ??

## 関連項目

- `function_ref`

## 参照

- P0792R14 `function_ref`: a type-erased callable reference
- P3774R1 Rename `std::nontype`, and make it broadly useful