【发布时间】:2021-03-05 11:24:46
【问题描述】:
参考
template<typename T>
void fun(ParamType param); // ParamType is some form of T, e.g. T, T&, T const, ...
fun(expr); // expr is an expression
我知道ParamType 中的&&“某处”不足以使ParamType 成为通用引用,例如ParamType = std::vector<T>&& 是右值引用。 && 需要在模板参数 T 旁边,因为它 (T&&)可能是一个通用引用。
但我也知道ParamType 中的T&& "somewhere" 仍然不够,例如ParamType = std::remove_reference_t<T&&> 不是通用引用。
因此,我几乎是在问ParamType 的“表格”是否有/有什么要求才能作为转发参考?。
不过,by doing a bit of research,我觉得我需要问一个更“二进制”的问题:
为简单起见,假设T 是唯一的模板参数,因此ParamType 是T 的唯一函数(在数学意义上),如果这两个都为真,是否正确
-
T以ParamType的形式出现T&& -
fun推导出T和PramType(即T不需要通过fun<T>传递)
那么ParamType 是通用引用吗?
换句话说,如果ParamType 中包含T&& 并推导出T,那么它是否总是一个通用引用?
【问题讨论】:
标签: c++ c++11 template-meta-programming rvalue-reference forwarding-reference