直接使用类型特征与在右值引用的概念中使用类型特征时的不同行为

问题描述 投票:0回答:1

考虑以下代码片段。

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。 发生什么事了?

c++ c++-concepts rvalue-reference
1个回答
0
投票

该概念仅接收

auto
部分,而没有
&&

请注意,由于它是转发引用,因此传递左值会将

auto
推导为
T &
,这就是概念将收到的内容。

© www.soinside.com 2019 - 2024. All rights reserved.