右辺値参照と転送参照の違いは、Scott Meyers によるこの例で十分に明確にされました。
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) は、ケース (4) が推定され、(参照崩壊規則を適用した後) 「値カテゴリ」の観点から分類されることを明示的に示していvector<...>&&
ます。T
しかし、もう少し複雑なパターン マッチングではどうなるでしょうか。たとえば、次の場合を考えてみましょう。
template <template <class...> class Tuple, class... Ts>
void f(Tuple<Ts...>&& arg)
{
}
こことは&&
どういう意味ですか?