namespace std {
template <class T>
consteval const remove_cvref_t<T>* define_static_object(T&& t);
}
概要
コンパイル時に計算したオブジェクトを静的ストレージに配置し、そのポインタを返す。
戻り値
tのコピーを保持する静的ストレージ上のオブジェクトへのポインタを返す。
備考
Tが配列型の場合はreflect_constant_array()を用いて配置される(多次元配列も扱える)。共用体型の場合はクラス型と同様に扱われる
例
#include <meta>
#include <print>
struct Config {
int width;
int height;
};
int main() {
constexpr auto* p = std::define_static_object(Config{1920, 1080});
std::println("{}x{}", p->width, p->height);
}
出力
1920x1080
バージョン
言語
- C++26
処理系
- Clang: ??
- GCC: 16 (
-freflectionオプション指定) ✅ - Visual C++: ??
関連項目
参照
- P3491R3
define_static_{string,object,array} - LWG Issue 4483. Multidimensional arrays are not supported by
meta::reflect_constant_arrayand related functions- C++26で、配列型(多次元配列を含む)に対しては
reflect_constant_array()を用い、共用体型はクラス型と同様に扱うよう規定が整理された
- C++26で、配列型(多次元配列を含む)に対しては