std::reference_converts_from_temporary
来自 cppreference.cn
定义于头文件 <type_traits> |
||
template< class T, class U > struct reference_converts_from_temporary; |
(自 C++23 起) | |
设 V
为 std::remove_cv_t<U> 如果 U
是标量类型或 cv void,否则为 U
。如果 T
是引用类型,并且给定一个假设的表达式 e 使得 decltype(e) 为 V
,则变量定义 T ref = e; 是良构的,并且 将临时对象绑定到 ref
,然后提供等于 true 的成员常量 value
。否则,value
为 false。
如果 T
是指向 const 限定但非 volatile 限定的对象类型的左值引用类型或右值引用类型,则 std::remove_reference_t<T> 和 std::remove_reference_t<U> 都应为完整类型、cv void 或 未知边界数组;否则行为是未定义的。
如果上面的模板的实例化直接或间接地依赖于不完整类型,并且如果该类型被假设地完成,则该实例化可能会产生不同的结果,则行为是未定义的。
如果程序为 std::reference_converts_from_temporary
或 std::reference_converts_from_temporary_v
添加特化,则行为是未定义的。
目录 |
[编辑] 辅助变量模板
template< class T, class U > inline constexpr bool reference_converts_from_temporary_v = |
(自 C++23 起) | |
继承自 std::integral_constant
成员常量
value [静态] |
true 如果 T 是引用类型,U 值可以在复制初始化中绑定到 T ,并且临时对象将绑定到引用,否则为 false(公共静态成员常量) |
成员函数
operator bool |
将对象转换为 bool,返回 value (公共成员函数) |
operator() (C++14) |
返回 value (公共成员函数) |
成员类型
类型 | 定义 |
value_type
|
bool |
type
|
std::integral_constant<bool, value> |
[编辑] 注解
std::reference_converts_from_temporary
可以用于拒绝一些总是产生悬空引用的情况。
[编辑] 示例
运行此代码
#include <type_traits> int main() {} static_assert( std::reference_converts_from_temporary_v<int&&, int> == true && std::reference_converts_from_temporary_v<const int&, int> == true && std::reference_converts_from_temporary_v<int&&, int&&> == false && std::reference_converts_from_temporary_v<const int&, int&&> == false && std::reference_converts_from_temporary_v<int&&, long&&> == true && std::reference_converts_from_temporary_v<int&&, long> == true);
[编辑] 参见
(C++11)(C++20) |
检查一个类型是否可以转换为另一个类型 (类模板) |
(C++17)(C++23) |
使用给定参数调用任何 可调用 对象 并可以指定返回类型(自 C++23 起) (函数模板) |
(C++11) |
将一个或多个参数绑定到函数对象 (函数模板) |
(C++17) |
使用一个或多个 variant 保存的参数调用提供的仿函数(函数模板) |
构造一个新的 std::function 实例( std::function<R(Args...)> 的公共成员函数) | |
构造一个新的 std::move_only_function 对象( std::move_only_function 的公共成员函数) | |
构造任务对象 ( std::packaged_task<R(Args...)> 的公共成员函数) |