std::reference_constructs_from_temporary
来自 cppreference.com
在头文件 <type_traits> 中定义 |
||
template< class T, class U > struct reference_constructs_from_temporary; |
(自 C++23 起) | |
令 V
为 std::remove_cv_t<U> 如果 U
是标量类型或 cv void
,否则为 U
。如果 T
是引用类型,并且给定一个假设表达式 e 使得 decltype(e) 为 V
,变量定义 T ref(e); 是格式良好的,并且 绑定一个临时对象 到 ref
,则提供成员常量 value
等于 true。否则,value
为 false。
如果 T
是对 const 限定但不是 volatile 限定的对象类型的左值引用类型或右值引用类型,那么 std::remove_reference_t<T> 和 std::remove_reference_t<U> 应为 完整类型,cv void,或 未知边界的数组;否则行为未定义。
如果模板的实例化直接或间接依赖于不完整的类型,并且该实例化如果该类型假设已完成可能会产生不同的结果,则行为未定义。
如果程序为 std::reference_constructs_from_temporary
或 std::reference_constructs_from_temporary_v
添加了特化,则行为未定义。
内容 |
[编辑] 辅助变量模板
template< class T, class U > inline constexpr bool reference_constructs_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_constructs_from_temporary
可用于拒绝始终产生悬空引用的某些情况。
如果编译器已实现 CWG1696,也可以使用成员初始化列表来拒绝将临时对象绑定到引用。
[编辑] 示例
运行此代码
#include <type_traits> static_assert(std::reference_constructs_from_temporary_v<int&&, int> == true); static_assert(std::reference_constructs_from_temporary_v<const int&, int> == true); static_assert(std::reference_constructs_from_temporary_v<int&&, int&&> == false); static_assert(std::reference_constructs_from_temporary_v<const int&, int&&> == false); static_assert(std::reference_constructs_from_temporary_v<int&&, long&&> == true); static_assert(std::reference_constructs_from_temporary_v<int&&, long> == true); int main() {}
[编辑] 另请参阅
(C++11)(C++11)(C++11) |
检查类型是否具有针对特定参数的构造函数 (类模板) |
构造一个新的 tuple ( std::tuple<Types...> 的公共成员函数) | |
构造新的 pair ( std::pair<T1,T2> 的公共成员函数) | |
(C++17) |
使用参数元组构造对象 (函数模板) |