Namespaces
Variants

std::define_static_object

ja.cppreference.net より
 
 
 
リフレクションライブラリ
 
リフレクション型とクエリ
リフレクションクエリ
リフレクションレイアウトクエリ
型プロパティ
型プロパティクエリ
 
ヘッダ <meta>
template< class T >
consteval const remove_cvref_t<T>* define_static_object( T&& t );
で定義 (C++26 以上)

値を静的記憶域に昇格させます。

以下と同等:

using U = std::remove_cvref_t<T>;
if constexpr (std::meta::is_class_type(^^U) || std::meta::is_union_type(^^U))
{
    std::meta::info obj = std::meta::reflect_constant(std::forward<T>(t));
    return std::addressof(std::meta::extract<const U&>(obj));
}
else if constexpr (std::meta::is_array_type(^^U))
{
    std::meta::info obj = std::meta::reflect_constant_array(std::forward<T>(t));
    return std::addressof(std::meta::extract<const U&>(obj));
}
else
{
    return std::define_static_array(std::span(std::addressof(t), 1)).data();
}

パラメータ

t - 構造化型

の値

値 t を持つテンプレートパラメータオブジェクトへのポインタ。

注記

テンプレートパラメータオブジェクトとして、結果のオブジェクトは静的記憶域期間 を持ちます。 テンプレート引数等価 な値は同じオブジェクトに対応します。

結果のオブジェクトは、もし がスカラ型である場合、潜在的に非一意なオブジェクトstd::remove_cvref_t<T> です。

もし t がテンプレートパラメータオブジェクトである場合、結果は同じオブジェクトを指します。

機能テスト マクロ 値 標準 機能
__cpp_lib_define_static 202506L (C++26) std::define_static_object

例

関連項目

コンパイル時配列を静的記憶域に昇格させ、静的配列の span を返します
(関数テンプレート)
コンパイル時文字列を静的記憶域に昇格させ、静的文字列の最初の文字へのポインタを返します
(関数テンプレート)
値または テンプレートパラメータオブジェクト を表すリフレクションを返します。定数テンプレート引数として使用するのに適しています
(関数テンプレート)