考虑以下代码片段。
template <typename T>
concept IsRValue = std::is_rvalue_reference_v<T>;
void funTakingRValues(IsRValue auto&& val)
{
std::cout << val << std::endl;
}
int main()
{
auto && x = 5;
std::cout << "Is rvalue reference = " << std::is_rvalue_reference_v<decltype(x)> << std::endl;
funTakingIntegralsWhichAreRValues(std::forward<decltype(x)>(x));
}
在这种情况下,
x
被视为基于 cout 语句结果的 r 值参考。但不满足依赖于相同类型特征的约束 IsRValue。
发生什么事了?
该概念仅接收
auto
部分,而没有 &&
。
请注意,由于它是转发引用,因此传递左值会将
auto
推导为 T &
,这就是概念将收到的内容。