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() {}
参阅
(C++26) |
获取替换反射模板中的反射参数后所得结果的反射 (函数模板) |
(C++26) |
返回表示某个值或 模板参数对象的反射,适合用作常量模板实参 (函数模板) |
(C++26) |
返回表示某个对象的反射,适合用作常量模板实参 (函数模板) |
(C++26) |
返回表示某个函数的反射,适合用作常量模板实参 (函数模板) |