의 구분은 스콧 마이어스에 의해이 예에서 충분히 명확되었다 : 우리는, 따라서 A 경우 추론 될 상황있을 때전달 참조입니까? 를 rvalue 참조 및 전달 참조 사이
Widget&& var1 = someWidget; // here, “&&” means rvalue reference (1)
auto&& var2 = var1; // here, “&&” does not mean rvalue reference (2)
template<typename T>
void f(std::vector<T>&& param); // here, “&&” means rvalue reference (3)
template<typename T>
void f(T&& param); // here, “&&”does not mean rvalue reference (4)
는 본질적으로 차이가 발생 (3) 명시 적으로 언급 우리가 (0)은 vector<...>&&
이고 (4)의 경우 T
은 "가치 범주"로 범주화 된 (참조 축소 규칙 적용 후).
그러나 좀 더 복잡한 패턴 일치는 어떻게됩니까? 예를 들어 다음과 같은 경우를 보자
template <template <class...> class Tuple, class... Ts>
void f(Tuple<Ts...>&& arg)
{
}
&&
여기에 무엇을 의미합니까?
Deducible 컨텍스트가 중요하지 않습니다. (3)과 (4)는 둘 다 연역적이다. – Oktalist