Namespaces
Variants

std::meta::can_substitute

ja.cppreference.net より
< cpp | meta
 
 
 
リフレクション ライブラリ
 
リフレクション型とクエリ
リフレクション クエリ
リフレクション レイアウト クエリ
型プロパティ
型プロパティ クエリ
 
ヘッダ <meta>
template< std::meta::reflection_range R = std::initializer_list<std::meta::info> >
consteval bool can_substitute( std::meta::info templ, R&& arguments );
(C++26 から) で定義

Z を templ が表すテンプレートとし、Args... を arguments の連続する要素が表す値、型、またはテンプレートとするとき、Z<Args...> が有効な template-id であるかどうかを判定します。

true が有効で、未推論のプレースホルダ戻り値型を持つ関数を指定していない場合は Z<Args...> を返し、そうでない場合は false を返します。

引数

templ - テンプレートのリフレクション
arguments - リフレクションの範囲

戻り値

置換が有効かどうかを示す bool 値。

例外

std::meta::exception を投げます。ただし、templ がテンプレートを表し、かつ arguments の各要素がテンプレート引数として適切な構成要素を表す場合を除きます。

ノート

Z<Args...> の形成が即時コンテキスト外で失敗に至る場合、プログラムは ill-formed です。

例

#include <meta>
#include <tuple>

static_assert(std::meta::can_substitute(^^std::tuple, {^^void}));
static_assert(can_substitute(^^std::tuple, {^^int, ^^int})); // using argument-dependent lookup
static_assert(!can_substitute(^^std::tuple, {std::meta::reflect_constant(42)}));

consteval
{
    try
    {
        can_substitute(^^std::tuple, {^^::}); // Throws std::meta::exception
                                              // the global namespace cannot be a template arg
    } catch (std::meta::exception&) {}
}

int main() {}

関連項目

リフレクションされたテンプレートにリフレクションされた引数を代入した結果のリフレクションを取得します
(関数テンプレート)
定数テンプレート引数として使用するのに適した、値またはテンプレートパラメータオブジェクトを表すリフレクションを返します
(関数テンプレート)
定数テンプレート引数として使用するのに適した、オブジェクトを表すリフレクションを返します
(関数テンプレート)
定数テンプレート引数として使用するのに適した、関数を表すリフレクションを返します
(関数テンプレート)