Namespaces
Variants

std::meta::has_static_storage_duration, std::meta::has_thread_storage_duration, std::meta::has_automatic_storage_duration

来自 zh.cppreference.net
< cpp | 元
 
 
 
反射库
 
反射类型与查询
反射查询
反射布局查询
类型属性
类型属性查询
 
定义于头文件 <meta>
consteval bool has_static_storage_duration( std::meta::info r );
(1) (C++26 起)
consteval bool has_thread_storage_duration( std::meta::info r );
(2) (C++26 起)
consteval bool has_automatic_storage_duration( std::meta::info r );
(3) (C++26 起)

判断 r 是否代表具有指定存储期的对象或变量。

1) 如果 true 代表具有r静态存储期的对象或变量,则返回 ;否则返回 false。
2) 如果 true 代表具有r线程存储期的变量,则返回 ;否则返回 false。
3) 如果 true 代表具有r自动存储期的变量,则返回 ;否则返回 false。

参数

r - 一个反射值

返回值

true如果 r 所代表的对象或变量具有指定的存储期,则返回 false;否则返回

。

注解r如果 false 不代表对象或变量,则结果为

。

示例可在 Compiler Explorer

#include <meta>

int a;
static_assert(std::meta::has_static_storage_duration(^^a));
static_assert(!std::meta::has_thread_storage_duration(^^a));
static_assert(!std::meta::has_automatic_storage_duration(^^a));

thread_local int b;
static_assert(!std::meta::has_static_storage_duration(^^b));
static_assert(std::meta::has_thread_storage_duration(^^b));
static_assert(!std::meta::has_automatic_storage_duration(^^b));

int main()
{
    [[maybe_unused]] int c;
    static_assert(!std::meta::has_static_storage_duration(^^c));
    static_assert(!std::meta::has_thread_storage_duration(^^c));
    static_assert(std::meta::has_automatic_storage_duration(^^c));
}

运行此代码

(C++26)检查反射的实体是否具有
链接
(函数)