Hem std::forwardve std::movebaşka bir şey yayınları bulunmaktadır.
X x;
std::move(x);
Yukarıda xX tipi lvalue ifadesi X tipi bir rvalue ifadesine (tam olarak bir xvalue) verilir. moveayrıca bir rvalue kabul edebilir:
std::move(make_X());
ve bu durumda bir kimlik fonksiyonudur: X tipi bir değer alır ve X tipi bir değer döndürür.
İle std::forwardhedefi bir dereceye kadar seçebilirsiniz:
X x;
std::forward<Y>(x);
xX türünün lvalue ifadesini Y türündeki bir ifadeye çevirir . Y'nin ne olabileceği konusunda kısıtlamalar vardır.
Y erişilebilir bir X Tabanı veya X Tabanı referansı olabilir. Y X veya X referansı olabilir. forward . Y, erişilebilir bir Taban dönüşümü dışında X'ten dönüştürülebilen bir tür olamaz.
Y bir değer değeri referansıysa, sonuç bir değer değeri ifadesi olacaktır. Y bir değer değeri başvurusu değilse, sonuç bir değer (kesin olacak x değeri) ifadesi olur.
forwardrvalue bağımsız değişkenini yalnızca Y bir lvalue referansı değilse alabilir. Yani, değer için bir değer atayamazsınız. Bu, güvenlik nedenlerinden ötürü yaygın bir şekilde yapılması, sallanan referanslara yol açmaktadır. Ancak bir rvalue'yu rvalue'ya dökmek tamamdır ve izin verilir.
İzin verilmeyen bir şeye Y belirtmeye çalışırsanız, hata çalışma zamanında değil derleme zamanında yakalanır.