Namespaces
Variants

std::meta::can_substitute

来自 zh.cppreference.net
 
 
 
反射库
 
反射类型与查询
反射查询
反射布局查询
类型属性
类型属性查询
 
在头文件 <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...> 是否为有效的 模板标识符。

如果 true 有效且未命名带有未推导占位符返回类型的函数,则返回 Z<Args...>;否则返回 false。

参数

templ - 模板的反射
参数 - 一个 范围 的反射

返回值

一个布尔值,指示替换是否有效。

异常

除非 表示一个模板,且 的每个元素表示一个适合作为模板实参的构造,否则抛出 templstd::meta::exceptionarguments。

注解

如果形成 Z<Args...> 导致 即时语境之外的失败,则程序非良构。

示例

#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() {}

参阅

获取替换反射模板中的反射参数后所得结果的反射
(函数模板)
返回表示某个值或 模板参数对象的反射,适合用作常量模板实参
(函数模板)
返回表示某个对象的反射,适合用作常量模板实参
(函数模板)
返回表示某个函数的反射,适合用作常量模板实参
(函数模板)