- utility[meta header]
- std[meta namespace]
- class template[meta id-type]
- cpp26[meta cpp]
namespace std {
template <auto V>
struct nontype_t {
explicit nontype_t() = default;
};
template <auto V> constexpr nontype_t<V> nontype{};
}
nontype_t
クラスは、オーバーロードのための空クラスである。
標準ライブラリの特定機能において、非型引数をテンプレートパラメータとして受け取って構築するための関数オーバーロードを定義するためにある。
デフォルトコンストラクタにexplicit
が付いているのは、nontype_t<F> x = {};
のように=
付きの波カッコ初期化を禁止するためである。ユーザーは通常、nontype_t
型の変数テンプレートとして事前定義されているnontype
を使用すればよいので、問題にはならない。
#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::nontype<&Dog::cry>, dog});
}
- std::nontype[color ff0000]
- std::function_ref[link /reference/functional/function_ref.md]
Bow-wow
- C++26
- Clang: ??
- GCC: ??
- ICC: ??
- Visual C++: ??